[meta-ti] [PATCH] linux: remove old platform-specific 2.6.37 kernels

Denys Dmytriyenko denis at denix.org
Fri Jun 20 14:21:02 PDT 2014


From: Denys Dmytriyenko <denys at ti.com>

Most of the legacy devices should be working fine with latest kernels,
either ti-staging or mainline.

Signed-off-by: Denys Dmytriyenko <denys at ti.com>
---
 ...date-PIO-mode-help-information-in-Kconfig.patch |    44 -
 .../linux-omap-psp-2.6.37/am3517-evm/defconfig     |  2358 -
 .../omap3/0001-Fix-matrix-suspend.patch            |   111 -
 ...upport-remove-support-for-non-TI-hardware.patch |   130 -
 ...001-am37x-Adding-ABB-Support-for-1GHz-OPP.patch |   319 -
 ...ux-omap3-Add-OCF-support-to-2.6.37-kernel.patch |  7043 --
 ...nable-clock-pad-register-in-configuration.patch |    29 -
 .../0001-nlcp-sdio-fixes-for-wowlan-support.patch  |    96 -
 ...7evm-Allow-for-NAND-to-really-be-disabled.patch |    48 -
 ...vm-add-support-for-the-WL12xx-WLAN-module.patch |   147 -
 .../0001-omap3evm-add-wake-on-wlan-support.patch   |    49 -
 ...0001-omap_hsmmc-make-default-dto-value-14.patch |    34 -
 ...musb-am35x-set-default-VBUS-timeout-value.patch |    38 -
 ...ecting-WL12XX_PLATFROM_DATA-independently.patch |    37 -
 ...pport-suspend-resume-while-runtime-suspen.patch |    82 -
 ...map3-am3517evm-Update-NOR-partition-table.patch |    58 -
 ...map3_evm_defconfig-add-OCF-driver-support.patch |  2292 -
 ...2-usb-musb-am35x-fix-role-switching-issue.patch |    67 -
 .../0003-AM3517-Add-am3517_evn_nor_defconfig.patch |   256 -
 ...detection-of-nonremovable-cards-on-rescan.patch |    43 -
 .../omap3/0003-mmc_card_keep_power-cleanups.patch  |    69 -
 ...ap3_evm_defconfig-add-WLAN-config-options.patch |   283 -
 ...-not-switch-to-1-bit-mode-if-not-required.patch |    43 -
 ...n-t-reinitialize-nonremovable-powered-res.patch |    77 -
 ...0005-mmc-fix-division-by-zero-in-MMC-core.patch |    41 -
 ...io-don-t-power-up-cards-on-system-suspend.patch |   112 -
 ...icate-insertion-of-mmc_card_keep_power-fu.patch |    30 -
 ...0006-wl12xx-Backport-wl12xx-platform-data.patch |    64 -
 .../omap3/0007-activate-wireless-extensions.patch  |    26 -
 .../linux/linux-omap-psp-2.6.37/omap3/defconfig    |  2505 -
 recipes-kernel/linux/linux-omap-psp_2.6.37.bb      |   103 -
 ...BeagleBoard-Adjust-USER-button-pin-for-xM.patch |    29 -
 ...beagleboard-hack-in-support-from-xM-rev-C.patch |    94 -
 ...0001-board-omap3beagle-whitespace-cleanup.patch |    91 -
 .../0001-omap3-allow-1GHz-mpurates.patch           |    26 -
 .../linux-omap/0001-xM-audio-fix-from-Ashok.patch  |    27 -
 ...3beagle-allow-for-building-without-wl1271.patch |    42 -
 ...omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch |    44 -
 .../0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch   |    48 -
 .../0003-omap3-beaglexm-fix-power-on-of-DVI.patch  |    94 -
 ...0004-omap-Beagle-detect-new-xM-revision-B.patch |    43 -
 ...agleboard-Add-infrastructure-to-do-fixups.patch |   219 -
 ...agleboard-pre-export-GPIOs-to-userspace-w.patch |    57 -
 .../0007-modedb.c-add-proper-720p60-mode.patch     |    28 -
 ...isplay-single-block-read-console-messages.patch |    28 -
 .../0009-MTD-silence-ecc-errors-on-mtdblock0.patch |    63 -
 .../linux/linux-omap/base/0010-Miracle-patch.patch |   504 -
 .../base/0011-ARM-OMAP-add-omap_rev_-macros.patch  |    81 -
 ...enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch |    31 -
 ...eboard-add-WIP-support-for-beagleboardtoy.patch |   128 -
 ...-smsc911x-return-ENODEV-if-device-is-not-.patch |    29 -
 ...ut-touchscreen-ads7846-return-ENODEV-if-d.patch |    47 -
 ...able-audio-capture-by-default-for-twl4030.patch |    27 -
 .../base/0017-MFD-enable-madc-clock.patch          |    51 -
 .../base/0018-MFD-add-twl4030-madc-driver.patch    |   740 -
 ...RM-OMAP-Add-twl4030-madc-support-to-Overo.patch |    32 -
 ...M-OMAP-Add-twl4030-madc-support-to-Beagle.patch |    35 -
 ...dd-support-for-Samsung-LTE430WQ-F0C-panel.patch |   173 -
 ...Add-support-for-LG-Philips-LB035Q02-panel.patch |   299 -
 ...dd-bootarg-for-selecting-svideo-or-compos.patch |    75 -
 ...mc-twl4030-move-clock-input-selection-pri.patch |    39 -
 ...C-add-support-for-backup-battery-recharge.patch |    55 -
 ...tomatically-set-musb-mode-in-platform-dat.patch |    49 -
 ...heck-for-both-cpu-type-and-revision-rathe.patch |    34 -
 ...0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch |   355 -
 .../linux/linux-omap/beagleboard/defconfig         |  3361 -
 .../linux-omap/beagleboard/logo_linux_clut224.ppm  | 73147 -------------------
 ...MAP3-PM-Adding-T2-enabling-of-smartreflex.patch |    60 -
 ...q-ensure-driver-initializes-after-cpufreq.patch |    27 -
 ...PUfreq-ensure-policy-is-fully-initialized.patch |    31 -
 .../0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch   |   269 -
 ...AP-PM-CPUFREQ-Fix-conditional-compilation.patch |    32 -
 ...uce-a-user-list-for-each-voltage-domain-i.patch |   199 -
 ...uce-API-in-the-OPP-layer-to-find-the-opp-.patch |    82 -
 ...uce-API-to-register-a-device-with-a-volta.patch |   182 -
 ...uce-device-specific-set-rate-and-get-rate.patch |   120 -
 ...MAP-Voltage-layer-changes-to-support-DVFS.patch |   134 -
 ...ntroduce-dependent-voltage-domain-support.patch |   195 -
 .../dvfs/0012-OMAP-Introduce-device-scale.patch    |   134 -
 ...0013-OMAP-Disable-smartreflex-across-DVFS.patch |    50 -
 ...duce-custom-set-rate-and-get-rate-APIs-fo.patch |   176 -
 ...e-cpufreq-driver-to-use-the-new-set_rate-.patch |    54 -
 ...duce-voltage-domain-info-in-the-hwmod-str.patch |    45 -
 ...AP3-Add-voltage-dependency-table-for-VDD1.patch |    61 -
 ...map3-4-opp-make-omapx_opp_init-non-static.patch |    62 -
 ...0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch |   107 -
 ...0-omap3-Add-basic-support-for-720MHz-part.patch |   202 -
 ...01-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch |    29 -
 ...void-incrementing-mm_users-on-CPU-startup.patch |    32 -
 .../0003-ARM-get-rid-of-kmap_high_l1_vipt.patch    |   186 -
 ...ache-xsc3l2-after-stack-based-kmap_atomic.patch |   189 -
 ...he-feroceon-l2-after-stack-based-kmap_ato.patch |   119 -
 ...t-the-required-VFMUNIT-clock-gating-disab.patch |    45 -
 ...vo-Add-hdmi-connector-properties-after-in.patch |    38 -
 ...tel_ips-When-i915-loads-after-IPS-make-IP.patch |   190 -
 ...rify-Ironlake-eDP-presence-on-DP_A-using-.patch |    69 -
 ...0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch |    42 -
 ...update-Nomadik-U300-and-Ux500-maintainers.patch |    65 -
 ...40-1-Stop-irqsoff-trace-on-return-to-user.patch |    44 -
 ...le-atm-fix-PHY-signal-initialization-race.patch |   100 -
 .../0014-ehea-Avoid-changing-vlan-flags.patch      |    34 -
 ...isabling-multilink-protocol-ID-compressio.patch |    64 -
 ...ng-the-wrong-variable-in-skfp_driver_init.patch |    31 -
 ...s-Add-missing-control_type-initialization.patch |    84 -
 ...s-max98088-Fix-register-cache-incoherency.patch |    72 -
 ...ecs-wm8523-Fix-register-cache-incoherency.patch |    74 -
 ...ecs-wm8741-Fix-register-cache-incoherency.patch |    61 -
 ...ecs-wm8904-Fix-register-cache-incoherency.patch |   131 -
 ...ecs-wm8955-Fix-register-cache-incoherency.patch |   107 -
 ...ecs-wm8962-Fix-register-cache-incoherency.patch |   151 -
 ...ecs-wm9090-Fix-register-cache-incoherency.patch |    75 -
 ...ecs-wm8753-Fix-register-cache-incoherency.patch |   514 -
 ...-incorrect-direct-gfn-for-unpaged-mode-sh.patch |    35 -
 ...027-fix-freeing-user_struct-in-user-cache.patch |    34 -
 ...cspi.c-Force-CS-to-be-in-inactive-state-a.patch |   111 -
 ...-undesirable-side-effect-of-adding-visibl.patch |    49 -
 ...-m68knommu-Coldfire-QSPI-platform-support.patch |    33 -
 ...nt-buffer-overflow-in-OSS-load_mixer_volu.patch |    47 -
 ...e-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch |    32 -
 ...i915-bios-Reverse-order-of-100-120-Mhz-SS.patch |    33 -
 ...o-Report-LVDS-attached-to-ch701x-as-conne.patch |    30 -
 ...-update-Documentation-filesystems-Locking.patch |   402 -
 ...rong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch |    63 -
 ...ing-zram-work-around-oops-due-to-startup-.patch |    54 -
 ...de-instead-of-kernel-address-for-proc-fil.patch |    43 -
 ...aset-Fix-memory-leak-in-do_disconnect_req.patch |    56 -
 ...IC-core-network-driver-fix-mem-leak-on-al.patch |    58 -
 ...g3-fix-return-value-check-in-tg3_read_vpd.patch |    35 -
 ...tarfire-Fix-dma_addr_t-size-test-for-MIPS.patch |    37 -
 ...vers-atm-atmtcp.c-add-missing-atm_dev_put.patch |    50 -
 .../linus/0044-KVM-i8259-initialize-isr_ack.patch  |    32 -
 .../0045-hwmon-s3c-hwmon-Fix-compilation.patch     |    37 -
 ...prove-initialisation-error-message-and-do.patch |    58 -
 ...M-6605-1-Add-missing-include-asm-memory.h.patch |    42 -
 .../0048-mv_xor-fix-race-in-tasklet-function.patch |    31 -
 ...-provide-dummy-functions-for-DMA_ENGINE-n.patch |    55 -
 ...vent-device-probe-failure-due-to-volume-c.patch |    52 -
 ...rt-changeset-fcb9757333-to-avoid-a-regres.patch |   518 -
 ...radio_fops-should-also-use-unlocked_ioctl.patch |    31 -
 ...rofile-op_model_amd.c-Perform-initialisat.patch |    81 -
 ...x-callchain-hit-bad-cast-on-ascii-display.patch |    39 -
 ...add-IT8152_LAST_IRQ-definition-to-fix-bui.patch |    40 -
 ...M-pxa-fix-page-table-corruption-on-resume.patch |    46 -
 ...-fix-oops-when-changing-tx-rx-ring-params.patch |    63 -
 ...-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch |   157 -
 ...9-name_to_dev_t-must-not-call-__init-code.patch |    31 -
 .../0060-bridge-stp-ensure-mac-header-is-set.patch |    38 -
 .../linus/0061-ima-fix-add-LSM-rule-bug.patch      |    64 -
 .../0062-arch-mn10300-kernel-irq.c-fix-build.patch |    31 -
 ..._fs-method-from-Documentation-filesystems.patch |    38 -
 ...-route.c-respect-prefsrc-for-local-routes.patch |    57 -
 .../linux/linux-omap/linus/0065-Linux-2.6.37.patch |    25 -
 ...ode-between-video_usercopy-and-video_ioct.patch |   297 -
 ...-v4l-subdev-Don-t-require-core-operations.patch |    31 -
 ...Merge-v4l2_i2c_new_subdev_cfg-and-v4l2_i2.patch |   132 -
 .../0004-v4l-subdev-Add-device-node-support.patch  |   615 -
 ...ev-Uninline-the-v4l2_subdev_init-function.patch |   103 -
 .../0006-v4l-subdev-Control-ioctls-support.patch   |    88 -
 .../media/0007-v4l-subdev-Events-support.patch     |   223 -
 .../0008-media-Media-device-node-support.patch     |   500 -
 .../linux-omap/media/0009-media-Media-device.patch |   398 -
 .../media/0010-media-Entities-pads-and-links.patch |   690 -
 .../media/0011-media-Entity-graph-traversal.patch  |   228 -
 .../media/0012-media-Entity-use-count.patch        |   176 -
 ...0013-media-Media-device-information-query.patch |   659 -
 ...media-Entities-pads-and-links-enumeration.patch |   889 -
 .../linux-omap/media/0015-media-Links-setup.patch  |   517 -
 .../0016-media-Pipelines-and-media-streams.patch   |   259 -
 ...edia_device-pointer-to-the-v4l2_device-st.patch |   115 -
 ...ke-video_device-inherit-from-media_entity.patch |   234 -
 ...ake-v4l2_subdev-inherit-from-media_entity.patch |   265 -
 ...e-media-v4l2-mediabus.h-header-to-include.patch |   205 -
 ...-enums-with-fixed-sized-fields-in-public-.patch |    50 -
 ...V4L2_MBUS_FMT_GREY8_1X8-to-V4L2_MBUS_FMT_.patch |   154 -
 ...edia-bus-pixel-codes-by-types-and-sort-th.patch |   112 -
 ...-Create-v4l2-subdev-file-handle-structure.patch |   243 -
 ...4l-subdev-Add-a-new-file-operations-class.patch |    93 -
 ...0026-v4l-v4l2_subdev-pad-level-operations.patch |    49 -
 ...0028-v4l-v4l2_subdev-userspace-format-API.patch |  3546 -
 ...-v4l2_subdev-userspace-frame-interval-API.patch |   479 -
 .../0030-v4l-v4l2_subdev-userspace-crop-API.patch  |   350 -
 .../0031-v4l-subdev-Generic-ioctl-support.patch    |    46 -
 ...Add-subdev-sensor-g_skip_frames-operation.patch |    35 -
 ...e-linux-videodev2.h-in-media-v4l2-ctrls.h.patch |    27 -
 ...a-use-before-set-in-the-control-framework.patch |    32 -
 ...it-YUYV-on-16-bit-bus-and-SGRBG10-media-b.patch |    60 -
 ...aining-RAW10-patterns-w-DPCM-pixel-code-v.patch |    48 -
 ...d-missing-12-bits-bayer-media-bus-formats.patch |   105 -
 .../0038-v4l-Add-12-bits-bayer-pixel-formats.patch |    35 -
 ...pdate-Camera-ISP-definitions-for-OMAP3630.patch |    99 -
 ...0-omap3-Remove-unusued-ISP-CBUFF-resource.patch |    32 -
 ...unction-to-register-omap3isp-platform-dev.patch |    91 -
 ...-omap2-Fix-camera-resources-for-multiomap.patch |    70 -
 .../linux-omap/media/0043-OMAP3-ISP-driver.patch   | 21513 ------
 ...nable-Magic-SysRq-on-serial-console-ttyOx.patch |    35 -
 .../linux/linux-omap/omap3-touchbook/defconfig     |     1 -
 recipes-kernel/linux/linux-omap/omap3evm/defconfig |     1 -
 recipes-kernel/linux/linux-omap/overo/defconfig    |     1 -
 .../linux/linux-omap/usrp-e1xx/defconfig           |     1 -
 ...-to-set-config-options-in-GPMC-per-CS-con.patch |    80 -
 ...ns-to-dma.c-to-set-address-and-length-for.patch |    83 -
 ...ed-Add-driver-for-USRP-Embedded-FPGA-inte.patch |  1889 -
 ...d-MAC-address-from-NVS-file-on-HW-startup.patch |    41 -
 .../0002-wl1271-11n-Support-Add-Definitions.patch  |   165 -
 .../0003-wl1271-11n-Support-ACX-Commands.patch     |   128 -
 ...Support-functionality-and-configuration-a.patch |   249 -
 ...et-wl-vif-only-if-add_interface-succeeded.patch |    86 -
 ...t-bssid-filter-ssid-and-bssid-from-firmwa.patch |    44 -
 ...ia-radio-wl128x-FM-Driver-common-header-f.patch |   268 -
 ...media-radio-wl128x-FM-Driver-V4L2-sources.patch |   645 -
 ...dia-radio-wl128x-FM-Driver-Common-sources.patch |  2114 -
 ...s-media-radio-wl128x-FM-driver-RX-sources.patch |   938 -
 ...s-media-radio-wl128x-FM-driver-TX-sources.patch |   494 -
 ...ia-radio-wl128x-Kconfig-Makefile-for-wl12.patch |    52 -
 ...ia-radio-Update-Kconfig-and-Makefile-for-.patch |    38 -
 ...rs-misc-ti-st-change-protocol-parse-logic.patch |   900 -
 .../wl1271/0015-Bluetooth-btwilink-driver.patch    |   463 -
 recipes-kernel/linux/linux-omap_2.6.37.bb          |   215 -
 .../0001-TI-WL12xx-MMC-patches-03.21.00.04.patch   |   616 -
 ...date-PIO-mode-help-information-in-Kconfig.patch |    44 -
 ...da850-Set-maximum-OPP-frequency-to-456MHz.patch |    28 -
 .../0003-AM18xx-WL1271-Enable-BT.patch             |   114 -
 ...21.00.04.sdk-activate-wireless-extensions.patch |    25 -
 ...a850-Add-Mistral-WL12XX-config-support-to.patch |    77 -
 .../0006-Add-wlan-and-BT-config-switches.patch     |   210 -
 ...mmc-davinci-Eliminate-spurious-interrupts.patch |    64 -
 ...mmc-davinci-Poll-for-small-size-transfers.patch |    96 -
 .../am180x-evm/configs/static                      |  1891 -
 .../linux-omapl138-psp-2.6.37/am180x-evm/defconfig |  2020 -
 .../tipspkernel/am180x-evm/configs/static          |  1858 -
 .../tipspkernel/am180x-evm/defconfig               |  1858 -
 .../linux-omapl138-psp-2.6.37/uio_pruss.patch      |   539 -
 recipes-kernel/linux/linux-omapl138-psp_2.6.37.bb  |    42 -
 233 files changed, 156701 deletions(-)
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/defconfig
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-Fix-matrix-suspend.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-OCF-support-remove-support-for-non-TI-hardware.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-am37x-Adding-ABB-Support-for-1GHz-OPP.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-linux-omap3-Add-OCF-support-to-2.6.37-kernel.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-mt9t111-enable-clock-pad-register-in-configuration.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-nlcp-sdio-fixes-for-wowlan-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3-am3517evm-Allow-for-NAND-to-really-be-disabled.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-support-for-the-WL12xx-WLAN-module.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-wake-on-wlan-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap_hsmmc-make-default-dto-value-14.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-usb-musb-am35x-set-default-VBUS-timeout-value.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-allow-selecting-WL12XX_PLATFROM_DATA-independently.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-mmc-sdio-support-suspend-resume-while-runtime-suspen.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3-am3517evm-Update-NOR-partition-table.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3_evm_defconfig-add-OCF-driver-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-usb-musb-am35x-fix-role-switching-issue.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-AM3517-Add-am3517_evn_nor_defconfig.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc-skip-detection-of-nonremovable-cards-on-rescan.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc_card_keep_power-cleanups.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-omap3_evm_defconfig-add-WLAN-config-options.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-do-not-switch-to-1-bit-mode-if-not-required.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-sdio-don-t-reinitialize-nonremovable-powered-res.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-fix-division-by-zero-in-MMC-core.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-sdio-don-t-power-up-cards-on-system-suspend.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-revert-duplicate-insertion-of-mmc_card_keep_power-fu.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-wl12xx-Backport-wl12xx-platform-data.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0007-activate-wireless-extensions.patch
 delete mode 100644 recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/defconfig
 delete mode 100644 recipes-kernel/linux/linux-omap-psp_2.6.37.bb
 delete mode 100644 recipes-kernel/linux/linux-omap/0001-BeagleBoard-Adjust-USER-button-pin-for-xM.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/0001-beagleboard-hack-in-support-from-xM-rev-C.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/0001-board-omap3beagle-whitespace-cleanup.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/0001-omap3-allow-1GHz-mpurates.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/0001-xM-audio-fix-from-Ashok.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/0002-board-omap3beagle-allow-for-building-without-wl1271.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0010-Miracle-patch.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/beagleboard/defconfig
 delete mode 100644 recipes-kernel/linux/linux-omap/beagleboard/logo_linux_clut224.ppm
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/linus/0065-Linux-2.6.37.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0001-v4l-Share-code-between-video_usercopy-and-video_ioct.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0002-v4l-subdev-Don-t-require-core-operations.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0003-v4l-subdev-Merge-v4l2_i2c_new_subdev_cfg-and-v4l2_i2.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0004-v4l-subdev-Add-device-node-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0005-v4l-subdev-Uninline-the-v4l2_subdev_init-function.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0006-v4l-subdev-Control-ioctls-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0007-v4l-subdev-Events-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0008-media-Media-device-node-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0009-media-Media-device.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0010-media-Entities-pads-and-links.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0011-media-Entity-graph-traversal.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0012-media-Entity-use-count.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0013-media-Media-device-information-query.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0014-media-Entities-pads-and-links-enumeration.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0015-media-Links-setup.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0016-media-Pipelines-and-media-streams.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0017-v4l-Add-a-media_device-pointer-to-the-v4l2_device-st.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0018-v4l-Make-video_device-inherit-from-media_entity.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0019-v4l-Make-v4l2_subdev-inherit-from-media_entity.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0020-v4l-Move-the-media-v4l2-mediabus.h-header-to-include.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0021-v4l-Replace-enums-with-fixed-sized-fields-in-public-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0022-v4l-Rename-V4L2_MBUS_FMT_GREY8_1X8-to-V4L2_MBUS_FMT_.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0023-v4l-Group-media-bus-pixel-codes-by-types-and-sort-th.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0024-v4l-Create-v4l2-subdev-file-handle-structure.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0025-v4l-subdev-Add-a-new-file-operations-class.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0026-v4l-v4l2_subdev-pad-level-operations.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0028-v4l-v4l2_subdev-userspace-format-API.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0029-v4l-v4l2_subdev-userspace-frame-interval-API.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0030-v4l-v4l2_subdev-userspace-crop-API.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0031-v4l-subdev-Generic-ioctl-support.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0032-v4l-Add-subdev-sensor-g_skip_frames-operation.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0033-v4l-Include-linux-videodev2.h-in-media-v4l2-ctrls.h.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0034-v4l-Fix-a-use-before-set-in-the-control-framework.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0035-v4l-Add-8-bit-YUYV-on-16-bit-bus-and-SGRBG10-media-b.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0036-v4l-Add-remaining-RAW10-patterns-w-DPCM-pixel-code-v.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0037-v4l-Add-missing-12-bits-bayer-media-bus-formats.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0038-v4l-Add-12-bits-bayer-pixel-formats.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0039-ARM-OMAP3-Update-Camera-ISP-definitions-for-OMAP3630.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0040-omap3-Remove-unusued-ISP-CBUFF-resource.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0041-omap3-Add-function-to-register-omap3isp-platform-dev.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0042-omap2-Fix-camera-resources-for-multiomap.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/media/0043-OMAP3-ISP-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/new/0001-OMAP-Enable-Magic-SysRq-on-serial-console-ttyOx.patch
 delete mode 120000 recipes-kernel/linux/linux-omap/omap3-touchbook/defconfig
 delete mode 120000 recipes-kernel/linux/linux-omap/omap3evm/defconfig
 delete mode 120000 recipes-kernel/linux/linux-omap/overo/defconfig
 delete mode 120000 recipes-kernel/linux/linux-omap/usrp-e1xx/defconfig
 delete mode 100644 recipes-kernel/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0001-wl12xx-Read-MAC-address-from-NVS-file-on-HW-startup.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0002-wl1271-11n-Support-Add-Definitions.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0003-wl1271-11n-Support-ACX-Commands.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0004-wl1271-11n-Support-functionality-and-configuration-a.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0005-wl1271-set-wl-vif-only-if-add_interface-succeeded.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0006-wl12xx-Unset-bssid-filter-ssid-and-bssid-from-firmwa.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0008-drivers-media-radio-wl128x-FM-Driver-V4L2-sources.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0009-drivers-media-radio-wl128x-FM-Driver-Common-sources.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0010-drivers-media-radio-wl128x-FM-driver-RX-sources.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0012-drivers-media-radio-wl128x-Kconfig-Makefile-for-wl12.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0013-drivers-media-radio-Update-Kconfig-and-Makefile-for-.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0014-drivers-misc-ti-st-change-protocol-parse-logic.patch
 delete mode 100644 recipes-kernel/linux/linux-omap/wl1271/0015-Bluetooth-btwilink-driver.patch
 delete mode 100644 recipes-kernel/linux/linux-omap_2.6.37.bb
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-TI-WL12xx-MMC-patches-03.21.00.04.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0002-da850-Set-maximum-OPP-frequency-to-456MHz.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0003-AM18xx-WL1271-Enable-BT.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0004-PSP03.21.00.04.sdk-activate-wireless-extensions.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0005-Davinci-da850-Add-Mistral-WL12XX-config-support-to.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0006-Add-wlan-and-BT-config-switches.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0007-mmc-davinci-Eliminate-spurious-interrupts.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/0008-mmc-davinci-Poll-for-small-size-transfers.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/configs/static
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/defconfig
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/configs/static
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/defconfig
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp-2.6.37/uio_pruss.patch
 delete mode 100644 recipes-kernel/linux/linux-omapl138-psp_2.6.37.bb

diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch
deleted file mode 100644
index ff1c430..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 10fbd32a96aedd644b6bf38888a2af64cc13a35f Mon Sep 17 00:00:00 2001
-From: Matt Porter <mporter at ti.com>
-Date: Mon, 5 Dec 2011 15:29:35 -0600
-Subject: [PATCH] musb: update PIO mode help information in Kconfig
-
-* Updated the Kconfig help information for the PIO mode for MUSB
-  to make it more clear to the customer when to select this option
-  and which devices currently have issues with this option.
-* This is in accordance with the findings for CPPI4.1 DMA usage
-  for MUSB
-
-Upstream-Status: Submitted
-    * Submitted to the PSP team using the lpr list
-
-Signed-off-by: Matt Porter <mporter at ti.com>
-Signed-off-by: Chase Maupin <Chase.Maupin at ti.com>
----
- drivers/usb/musb/Kconfig |   11 +++++++----
- 1 files changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
-index ee75cbc..d56f23d 100644
---- a/drivers/usb/musb/Kconfig
-+++ b/drivers/usb/musb/Kconfig
-@@ -107,10 +107,13 @@ config MUSB_PIO_ONLY
-	  All data is copied between memory and FIFO by the CPU.
-	  DMA controllers are ignored.
-
--	  Do not select 'n' here unless DMA support for your SOC or board
--	  is unavailable (or unstable).  When DMA is enabled at compile time,
--	  you can still disable it at run time using the "use_dma=n" module
--	  parameter.
-+	  Select 'y' here if DMA support for your SOC or board
-+	  is unavailable (or unstable). On CPPI 4.1 DMA based
-+	  systems (AM335x, AM35x, and AM180x) DMA support is
-+	  considered unstable and this option should be enabled
-+	  in production. When DMA is enabled at compile time,
-+	  you can still disable it at run time using the "use_dma=n"
-+	  module parameter.
-
- config USB_UX500_DMA_HW
-	select USB_UX500_DMA
---
-1.7.0.4
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/defconfig b/recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/defconfig
deleted file mode 100644
index 83586ae..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/am3517-evm/defconfig
+++ /dev/null
@@ -1,2358 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Mon Dec  5 14:46:59 2011
-#
-CONFIG_ARM=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_INIT_ENV_ARG_LIMIT=32
-CONFIG_CROSS_COMPILE=""
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-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=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_HAVE_GENERIC_HARDIRQS is not set
-# CONFIG_SPARSE_IRQ is not set
-
-#
-# RCU Subsystem
-#
-CONFIG_TINY_RCU=y
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-# CONFIG_CGROUPS is not set
-# CONFIG_NAMESPACES is not set
-# 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 is not set
-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=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-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=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_PROFILING=y
-CONFIG_TRACEPOINTS=y
-CONFIG_OPROFILE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_KPROBES=y
-CONFIG_KRETPROBES=y
-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 is not set
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SRCVERSION_ALL=y
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
-# 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 is not set
-CONFIG_OMAP_RESET_CLOCKS=y
-CONFIG_OMAP_MUX=y
-CONFIG_OMAP_MUX_DEBUG=y
-CONFIG_OMAP_MUX_WARNINGS=y
-CONFIG_OMAP_MCBSP=y
-# CONFIG_OMAP_MBOX_FWK is not set
-CONFIG_OMAP_IOMMU=y
-# CONFIG_OMAP_IOMMU_DEBUG is not set
-# 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_TI81XX is not set
-CONFIG_ARCH_OMAP3430=y
-CONFIG_OMAP_PACKAGE_CBB=y
-
-#
-# OMAP Board Type
-#
-# CONFIG_MACH_OMAP3_BEAGLE is not set
-# 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 is not set
-# CONFIG_MACH_OMAP3EVM is not set
-CONFIG_MACH_OMAP3517EVM=y
-# CONFIG_MACH_CRANEBOARD is not set
-# CONFIG_MACH_OMAP3_PANDORA is not set
-# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
-# 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 is not set
-# 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_PM_DISABLE_VT_SWITCH=y
-# 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=y
-CONFIG_ARM_ERRATA_460075=y
-# 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=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_HZ=128
-# CONFIG_THUMB2_KERNEL is not set
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-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=999999
-# 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 is not set
-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="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200"
-# 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 is not set
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-CONFIG_VFPv3=y
-CONFIG_NEON=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-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_PM_TEST_SUSPEND is not set
-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=y
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_XFRM_MIGRATE=y
-# CONFIG_XFRM_STATISTICS is not set
-CONFIG_NET_KEY=y
-CONFIG_NET_KEY_MIGRATE=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# 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 is not set
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETLABEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_L2TP is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# 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 is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-CONFIG_DNS_RESOLVER=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_TCPPROBE is not set
-# CONFIG_NET_DROP_MONITOR is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_CAN=y
-CONFIG_CAN_RAW=y
-CONFIG_CAN_BCM=y
-
-#
-# CAN Device Drivers
-#
-CONFIG_CAN_VCAN=y
-CONFIG_CAN_DEV=y
-CONFIG_CAN_CALC_BITTIMING=y
-CONFIG_CAN_TI_HECC=y
-# CONFIG_CAN_MCP251X is not set
-# CONFIG_CAN_SJA1000 is not set
-
-#
-# CAN USB interfaces
-#
-# CONFIG_CAN_EMS_USB is not set
-# CONFIG_CAN_ESD_USB2 is not set
-# CONFIG_CAN_DEBUG_DEVICES is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-CONFIG_WIRELESS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT_SYSFS=y
-# CONFIG_LIB80211 is not set
-
-#
-# CFG80211 needs to be enabled for MAC80211
-#
-
-#
-# Some wireless drivers require a rate control algorithm
-#
-# CONFIG_WIMAX is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-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=y
-# 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 is not set
-CONFIG_MTD_OOPS=y
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# 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_PHYSMAP=y
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_ARM_INTEGRATOR 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=y
-
-#
-# 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_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# 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 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 is not set
-
-#
-# 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=32768
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD 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 is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-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 is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_SCAN_ASYNC=y
-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 is not set
-# 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 is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# 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 is not set
-# CONFIG_BLK_DEV_DM is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-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=y
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_BCM63XX_PHY is not set
-# 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 is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_ETHOC is not set
-# CONFIG_SMC911X is not set
-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 is not set
-# CONFIG_KS8851_MLL is not set
-CONFIG_NETDEV_1000=y
-CONFIG_TI_DAVINCI_EMAC=y
-CONFIG_TI_DAVINCI_MDIO=y
-CONFIG_TI_DAVINCI_CPDMA=y
-# CONFIG_STMMAC_ETH is not set
-CONFIG_NETDEV_10000=y
-CONFIG_WLAN=y
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_WL12XX_PLATFORM_DATA=y
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET=y
-# CONFIG_USB_NET_AX8817X is not set
-CONFIG_USB_NET_CDCETHER=y
-# CONFIG_USB_NET_CDC_EEM is not set
-CONFIG_USB_NET_DM9601=y
-# CONFIG_USB_NET_SMSC75XX is not set
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_NET_CX82310_ETH is not set
-# CONFIG_USB_NET_INT51X1 is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_USB_SIERRA_NET is not set
-# CONFIG_WAN is not set
-
-#
-# CAIF transport drivers
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-# 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=y
-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=y
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_KEYBOARD_GPIO_POLLED is not set
-CONFIG_KEYBOARD_TCA6416=y
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# 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_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=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-CONFIG_TOUCHSCREEN_TSC2004=y
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-# CONFIG_TOUCHSCREEN_TPS6507X is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_AD714X is not set
-# 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_UINPUT is not set
-# CONFIG_INPUT_PCF8574 is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT_ADXL34X is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# 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_TI81XX_HDMI 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 is not set
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# 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 is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-CONFIG_DEBUG_GPIO=y
-CONFIG_GPIO_SYSFS=y
-
-#
-# 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 is not set
-# CONFIG_GPIO_MAX732X is not set
-CONFIG_GPIO_PCA953X=y
-# CONFIG_GPIO_PCA953X_IRQ is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_ADP5588 is not set
-
-#
-# 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=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_PDA_POWER is not set
-# CONFIG_TEST_POWER is not set
-# 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 is not set
-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 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ASC7621 is not set
-# 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 is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_JC42 is not set
-# 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 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_EMC1403 is not set
-# CONFIG_SENSORS_EMC2103 is not set
-# 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 is not set
-# CONFIG_SENSORS_AMC6821 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP102 is not set
-# 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 is not set
-CONFIG_WATCHDOG=y
-CONFIG_WATCHDOG_NOWAYOUT=y
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_OMAP_WATCHDOG=y
-# CONFIG_MAX63XX_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB is not set
-CONFIG_MFD_SUPPORT=y
-# CONFIG_MFD_CORE is not set
-# 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 is not set
-# CONFIG_TWL4030_CORE is not set
-# 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 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-CONFIG_REGULATOR_DUMMY=y
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# 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_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-CONFIG_REGULATOR_TPS65023=y
-# CONFIG_REGULATOR_TPS6507X is not set
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_AD5398 is not set
-CONFIG_MEDIA_SUPPORT=y
-
-#
-# Multimedia core support
-#
-# CONFIG_MEDIA_CONTROLLER is not set
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L2_COMMON=y
-CONFIG_VIDEO_ALLOW_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-# CONFIG_DVB_CORE is not set
-CONFIG_VIDEO_MEDIA=y
-
-#
-# Multimedia drivers
-#
-# CONFIG_IR_CORE is not set
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=y
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=y
-CONFIG_MEDIA_TUNER_TDA8290=y
-CONFIG_MEDIA_TUNER_TDA827X=y
-CONFIG_MEDIA_TUNER_TDA18271=y
-CONFIG_MEDIA_TUNER_TDA9887=y
-CONFIG_MEDIA_TUNER_TEA5761=y
-CONFIG_MEDIA_TUNER_TEA5767=y
-CONFIG_MEDIA_TUNER_MT20XX=y
-CONFIG_MEDIA_TUNER_XC2028=y
-CONFIG_MEDIA_TUNER_XC5000=y
-CONFIG_MEDIA_TUNER_MC44S803=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEOBUF_GEN=y
-CONFIG_VIDEOBUF_DMA_CONTIG=y
-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
-
-#
-# 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 is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_WM8775 is not set
-# 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_MT9T001 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_MT9V113 is not set
-# CONFIG_VIDEO_MT9T111 is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA717X is not set
-# CONFIG_VIDEO_SAA7191 is not set
-CONFIG_VIDEO_TVP514X=y
-# 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 is not set
-
-#
-# MPEG video encoders
-#
-# CONFIG_VIDEO_CX2341X is not set
-
-#
-# 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_VPSS_SYSTEM=y
-CONFIG_VIDEO_VPFE_CAPTURE=y
-CONFIG_VIDEO_DM6446_CCDC=y
-CONFIG_VIDEO_OMAP2_VOUT=y
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SR030PC30 is not set
-# CONFIG_SOC_CAMERA is not set
-CONFIG_V4L_USB_DRIVERS=y
-CONFIG_USB_VIDEO_CLASS=y
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-CONFIG_USB_GSPCA=m
-# CONFIG_USB_M5602 is not set
-# CONFIG_USB_STV06XX is not set
-# CONFIG_USB_GL860 is not set
-# CONFIG_USB_GSPCA_BENQ is not set
-# CONFIG_USB_GSPCA_CONEX is not set
-# CONFIG_USB_GSPCA_CPIA1 is not set
-# CONFIG_USB_GSPCA_ETOMS is not set
-# CONFIG_USB_GSPCA_FINEPIX is not set
-# CONFIG_USB_GSPCA_JEILINJ is not set
-# CONFIG_USB_GSPCA_KONICA is not set
-# CONFIG_USB_GSPCA_MARS is not set
-# CONFIG_USB_GSPCA_MR97310A is not set
-# CONFIG_USB_GSPCA_OV519 is not set
-# CONFIG_USB_GSPCA_OV534 is not set
-# CONFIG_USB_GSPCA_OV534_9 is not set
-# CONFIG_USB_GSPCA_PAC207 is not set
-# CONFIG_USB_GSPCA_PAC7302 is not set
-# CONFIG_USB_GSPCA_PAC7311 is not set
-# CONFIG_USB_GSPCA_SN9C2028 is not set
-# CONFIG_USB_GSPCA_SN9C20X is not set
-# CONFIG_USB_GSPCA_SONIXB is not set
-# CONFIG_USB_GSPCA_SONIXJ is not set
-# CONFIG_USB_GSPCA_SPCA500 is not set
-# CONFIG_USB_GSPCA_SPCA501 is not set
-# CONFIG_USB_GSPCA_SPCA505 is not set
-# CONFIG_USB_GSPCA_SPCA506 is not set
-# CONFIG_USB_GSPCA_SPCA508 is not set
-# CONFIG_USB_GSPCA_SPCA561 is not set
-# CONFIG_USB_GSPCA_SPCA1528 is not set
-# CONFIG_USB_GSPCA_SQ905 is not set
-# CONFIG_USB_GSPCA_SQ905C is not set
-# CONFIG_USB_GSPCA_SQ930X is not set
-# CONFIG_USB_GSPCA_STK014 is not set
-# CONFIG_USB_GSPCA_STV0680 is not set
-# CONFIG_USB_GSPCA_SUNPLUS is not set
-# CONFIG_USB_GSPCA_T613 is not set
-# CONFIG_USB_GSPCA_TV8532 is not set
-# CONFIG_USB_GSPCA_VC032X is not set
-# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
-# CONFIG_USB_GSPCA_ZC3XX is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_HDPVR is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USB_STKWEBCAM is not set
-# CONFIG_USB_S2255 is not set
-# CONFIG_V4L_MEM2MEM_DRIVERS is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# 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 is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# 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=y
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX 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=4
-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_VENC_OUT_TYPE_SVIDEO=y
-# CONFIG_OMAP2_VENC_OUT_TYPE_COMPOSITE is not set
-# 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=1
-CONFIG_FB_OMAP2=y
-CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
-CONFIG_FB_OMAP2_NUM_FBS=1
-
-#
-# OMAP2/3 Display Device Drivers
-#
-CONFIG_PANEL_GENERIC=y
-# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
-CONFIG_PANEL_SHARP_LQ043T1DG01=y
-# CONFIG_PANEL_TAAL is not set
-# CONFIG_PANEL_TOPPOLY_TDO35S is not set
-# CONFIG_PANEL_TPO_TD043MTEA1 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-# CONFIG_LCD_L4F00242T03 is not set
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-CONFIG_LCD_PLATFORM=y
-# CONFIG_LCD_S6E63M0 is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_GENERIC=m
-# CONFIG_BACKLIGHT_ADP8860 is not set
-
-#
-# Display device support
-#
-CONFIG_DISPLAY_SUPPORT=y
-
-#
-# Display hardware drivers
-#
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-# CONFIG_SOUND_OSS_CORE is not set
-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 is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-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 is not set
-# 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 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=y
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-CONFIG_SND_USB_AUDIO=y
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_OMAP_SOC=y
-CONFIG_SND_OMAP_SOC_MCBSP=y
-CONFIG_SND_OMAP_SOC_AM3517EVM=y
-CONFIG_SND_SOC_I2C_AND_SPI=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC23=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 is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_THRUSTMASTER 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 is not set
-# 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_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_HWA_HCD is not set
-CONFIG_USB_MUSB_HDRC=y
-
-#
-# Platform Glue Layer
-#
-# CONFIG_USB_MUSB_TUSB6010_GLUE is not set
-# CONFIG_USB_MUSB_OMAP2PLUS_GLUE is not set
-CONFIG_USB_MUSB_AM35X_GLUE=y
-# CONFIG_USB_MUSB_DAVINCI is not set
-# CONFIG_USB_MUSB_DA8XX is not set
-# CONFIG_USB_MUSB_TUSB6010 is not set
-# CONFIG_USB_MUSB_OMAP2PLUS is not set
-CONFIG_USB_MUSB_AM35X=y
-# CONFIG_USB_MUSB_TI81XX is not set
-# CONFIG_USB_MUSB_BLACKFIN is not set
-# CONFIG_USB_MUSB_UX500 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=y
-# CONFIG_USB_INVENTRA_DMA is not set
-# CONFIG_USB_TI_CPPI_DMA is not set
-# CONFIG_USB_TI_CPPI41_DMA is not set
-# CONFIG_USB_TUSB_OMAP_DMA is not set
-CONFIG_USB_MUSB_DEBUG=y
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_TMC is not set
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-CONFIG_USB_TEST=y
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_YUREX is not set
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_VBUS_DRAW=2
-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 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 is not set
-# CONFIG_USB_G_DBGP is not set
-# CONFIG_USB_G_WEBCAM is not set
-
-#
-# OTG and related infrastructure
-#
-CONFIG_USB_OTG_UTILS=y
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_ISP1301_OMAP is not set
-# CONFIG_USB_ULPI is not set
-CONFIG_NOP_USB_XCEIV=y
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# 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=y
-CONFIG_MMC_OMAP_HS=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# 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 is not set
-# 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 is not set
-CONFIG_RTC_DRV_S35390A=y
-# 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 is not set
-# CONFIG_STAGING 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=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_FILE_LOCKING=y
-CONFIG_FSNOTIFY=y
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_FANOTIFY is not set
-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 is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_ECRYPT_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-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=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-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 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_CEPH_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS 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 is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# 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 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_DLM 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 is not set
-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_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-CONFIG_DEBUG_SPINLOCK=y
-CONFIG_DEBUG_MUTEXES=y
-CONFIG_BKL=y
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=y
-# CONFIG_PROVE_RCU is not set
-# CONFIG_SPARSE_RCU_POINTER is not set
-CONFIG_LOCKDEP=y
-CONFIG_LOCK_STAT=y
-# CONFIG_DEBUG_LOCKDEP is not set
-CONFIG_TRACE_IRQFLAGS=y
-CONFIG_DEBUG_SPINLOCK_SLEEP=y
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_INFO_REDUCED 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_KPROBES_SANITY_TEST 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_NOP_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_RING_BUFFER=y
-CONFIG_EVENT_TRACING=y
-CONFIG_CONTEXT_SWITCH_TRACER=y
-CONFIG_RING_BUFFER_ALLOW_SWAP=y
-CONFIG_TRACING=y
-CONFIG_TRACING_SUPPORT=y
-CONFIG_FTRACE=y
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_IRQSOFF_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_KPROBE_EVENT=y
-# CONFIG_RING_BUFFER_BENCHMARK is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST 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=y
-# CONFIG_EARLY_PRINTK is not set
-# CONFIG_DEBUG_ICEDCC 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=y
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_NETWORK is not set
-# CONFIG_SECURITY_PATH is not set
-# CONFIG_SECURITY_TOMOYO is not set
-# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_IMA is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-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 is not set
-# CONFIG_CRYPTO_NULL is not set
-CONFIG_CRYPTO_WORKQUEUE=y
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYPTO_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-# CONFIG_CRYPTO_DEV_OMAP_SHAM is not set
-# CONFIG_CRYPTO_DEV_OMAP_AES is not set
-
-#
-# OCF Configuration
-#
-CONFIG_OCF_OCF=y
-# CONFIG_OCF_RANDOMHARVEST is not set
-CONFIG_OCF_CRYPTODEV=y
-# CONFIG_OCF_CRYPTOSOFT is not set
-# CONFIG_OCF_BENCH is not set
-CONFIG_BINARY_PRINTF=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_T10DIF is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_NLATTR=y
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-Fix-matrix-suspend.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-Fix-matrix-suspend.patch
deleted file mode 100644
index 49d97da..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-Fix-matrix-suspend.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From a520a30ffd932bce334d894adce12a6ceec2be00 Mon Sep 17 00:00:00 2001
-From: Greg Guyotte <gguyotte at ti.com>
-Date: Tue, 21 Jun 2011 21:56:06 -0500
-Subject: [PATCH] Fix matrix suspend
-
-* Added new OMAP config option OMAP3_PM_DISABLE_VT_SWITCH which
-  disables the VT console switch which normally occurs during
-  suspend.  This console switch, when performed with Matrix
-  running, hangs.  The VT switch is considered unnecessary.
-* Modified OMAP3 EVM and OMAP3 Beagle defconfig files to default
-  the OMAP3_PM_DISABLE_VT_SWITCH=y, and also to default
-  MMC_UNSAFE_RESUME=y.  The latter case causes a hang during suspend
-  if the root filesystem is located on the MMC card.  This
-  fix has actually been done in another patch, but the defconfigs
-  were not updated.
-
-Signed-off-by: Greg Guyotte <gguyotte at ti.com>
-
-Fix mistake in Kconfig
-
-Did not mean to add the two lines in Kconfig under ARCH_OMAP3.
-
-Signed-off-by: Greg Guyotte <gguyotte at ti.com>
----
- arch/arm/configs/omap3_beagle_defconfig |    3 ++-
- arch/arm/configs/omap3_evm_defconfig    |    3 ++-
- arch/arm/mach-omap2/Kconfig             |   10 ++++++++++
- arch/arm/mach-omap2/pm34xx.c            |    4 ++++
- 4 files changed, 18 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/configs/omap3_beagle_defconfig b/arch/arm/configs/omap3_beagle_defconfig
-index cef7597..6e8d50c 100644
---- a/arch/arm/configs/omap3_beagle_defconfig
-+++ b/arch/arm/configs/omap3_beagle_defconfig
-@@ -97,6 +97,7 @@ CONFIG_MACH_OMAP3_BEAGLE=y
- # CONFIG_MACH_OMAP_3630SDP is not set
- # CONFIG_OMAP3_EMU is not set
- # CONFIG_OMAP3_SDRC_AC_TIMING is not set
-+CONFIG_OMAP3_PM_DISABLE_VT_SWITCH=y
- 
- #
- # Processor Features
-@@ -504,7 +505,7 @@ CONFIG_USB_ETH=y
- CONFIG_USB_ETH_RNDIS=y
- CONFIG_MMC=y
- # CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
-+CONFIG_MMC_UNSAFE_RESUME=y
- 
- #
- # MMC/SD/SDIO Card Drivers
-diff --git a/arch/arm/configs/omap3_evm_defconfig b/arch/arm/configs/omap3_evm_defconfig
-index 675ae9c..8db3574 100644
---- a/arch/arm/configs/omap3_evm_defconfig
-+++ b/arch/arm/configs/omap3_evm_defconfig
-@@ -97,6 +97,7 @@ CONFIG_MACH_OMAP3EVM=y
- # CONFIG_MACH_OMAP_3630SDP is not set
- # CONFIG_OMAP3_EMU is not set
- # CONFIG_OMAP3_SDRC_AC_TIMING is not set
-+CONFIG_OMAP3_PM_DISABLE_VT_SWITCH=y
- 
- #
- # Processor Features
-@@ -557,7 +558,7 @@ CONFIG_USB_ETH=y
- CONFIG_USB_ETH_RNDIS=y
- CONFIG_MMC=y
- # CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
-+CONFIG_MMC_UNSAFE_RESUME=y
- 
- #
- # MMC/SD/SDIO Card Drivers
-diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
-index dfa5464..43dc070 100644
---- a/arch/arm/mach-omap2/Kconfig
-+++ b/arch/arm/mach-omap2/Kconfig
-@@ -338,6 +338,16 @@ config OMAP3_EMU
- 	help
- 	  Say Y here to enable debugging hardware of omap3
- 
-+config OMAP3_PM_DISABLE_VT_SWITCH
-+        bool "OMAP3 Disable PM Console Switch"
-+        depends on ARCH_OMAP3
-+        default y
-+        help
-+          This option disables the default PM VT switch behavior for OMAP3.
-+          Some platforms hang during suspend due to a failed attempt to 
-+          perform the VT switch.  The VT switch is unnecessary on many 
-+          platforms.
-+
- config OMAP3_SDRC_AC_TIMING
- 	bool "Enable SDRC AC timing register changes"
- 	depends on ARCH_OMAP3
-diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
-index 242babc..1d23b55 100644
---- a/arch/arm/mach-omap2/pm34xx.c
-+++ b/arch/arm/mach-omap2/pm34xx.c
-@@ -1072,6 +1072,10 @@ static int __init omap3_pm_init(void)
- 
- 	printk(KERN_ERR "Power Management for TI OMAP3.\n");
- 
-+#ifdef CONFIG_OMAP3_PM_DISABLE_VT_SWITCH
-+        pm_set_vt_switch(0);
-+#endif
-+
- 	/* XXX prcm_setup_regs needs to be before enabling hw
- 	 * supervised mode for powerdomains */
- 	prcm_setup_regs();
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-OCF-support-remove-support-for-non-TI-hardware.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-OCF-support-remove-support-for-non-TI-hardware.patch
deleted file mode 100644
index bfe0b87..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-OCF-support-remove-support-for-non-TI-hardware.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From f4019d96a708b09a804f59667d5dfd2a9eaaced5 Mon Sep 17 00:00:00 2001
-From: Chase Maupin <Chase.Maupin at ti.com>
-Date: Mon, 27 Jun 2011 13:33:43 -0500
-Subject: [PATCH 1/3] OCF support: remove support for non-TI hardware
-
-* Base OCF patch was updated to not patch in support for non-TI
-  hardware.
-* Makefile and Kconfig needed updating to remove these options
-
-Upstream-Status: Inappropriate [TI SDK specific]
-
-Signed-off-by: Chase Maupin <Chase.Maupin at ti.com>
----
- crypto/ocf/Kconfig  |   77 ---------------------------------------------------
- crypto/ocf/Makefile |   11 -------
- 2 files changed, 0 insertions(+), 88 deletions(-)
-
-diff --git a/crypto/ocf/Kconfig b/crypto/ocf/Kconfig
-index b9c24ff..805cb4c 100644
---- a/crypto/ocf/Kconfig
-+++ b/crypto/ocf/Kconfig
-@@ -31,83 +31,6 @@ config OCF_CRYPTOSOFT
- 	  A software driver for the OCF framework that uses
- 	  the kernel CryptoAPI.
- 
--config OCF_SAFE
--	tristate "safenet (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  A driver for a number of the safenet Excel crypto accelerators.
--	  Currently tested and working on the 1141 and 1741.
--
--config OCF_IXP4XX
--	tristate "IXP4xx (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  XScale IXP4xx crypto accelerator driver.  Requires the
--	  Intel Access library.
--
--config OCF_IXP4XX_SHA1_MD5
--	bool "IXP4xx SHA1 and MD5 Hashing"
--	depends on OCF_IXP4XX
--	help
--	  Allows the IXP4xx crypto accelerator to perform SHA1 and MD5 hashing.
--	  Note: this is MUCH slower than using cryptosoft (software crypto engine).
--
--config OCF_HIFN
--	tristate "hifn (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for various HIFN based crypto accelerators.
--	  (7951, 7955, 7956, 7751, 7811)
--
--config OCF_HIFNHIPP
--	tristate "Hifn HIPP (HW packet crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for various HIFN (HIPP) based crypto accelerators
--	  (7855)
--
--config OCF_TALITOS
--	tristate "talitos (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for Freescale's security engine (SEC/talitos).
--
--config OCF_PASEMI
--	tristate "pasemi (HW crypto engine)"
--	depends on OCF_OCF && PPC_PASEMI
--	help
--	  OCF driver for the PA Semi PWRficient DMA Engine
--
--config OCF_EP80579
--	tristate "ep80579 (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for the Intel EP80579 Integrated Processor Product Line.
--
--config OCF_CRYPTOCTEON
--	tristate "cryptocteon (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for the Cavium OCTEON Processors.
--
--config OCF_KIRKWOOD
--	tristate "kirkwood (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for the Marvell Kirkwood (88F6xxx) Processors.
--
--config OCF_C7108
--	tristate "Micronas 7108 (HW crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for the Microna 7108 Cipher processors.
--
--config OCF_OCFNULL
--	tristate "ocfnull (fake crypto engine)"
--	depends on OCF_OCF
--	help
--	  OCF driver for measuring ipsec overheads (does no crypto)
--
- config OCF_BENCH
- 	tristate "ocf-bench (HW crypto in-kernel benchmark)"
- 	depends on OCF_OCF
-diff --git a/crypto/ocf/Makefile b/crypto/ocf/Makefile
-index fa951f4..aab3fae 100644
---- a/crypto/ocf/Makefile
-+++ b/crypto/ocf/Makefile
-@@ -37,17 +37,6 @@ obj-$(CONFIG_OCF_CRYPTODEV)   += cryptodev.o
- obj-$(CONFIG_OCF_CRYPTOSOFT)  += cryptosoft.o
- obj-$(CONFIG_OCF_BENCH)       += ocf-bench.o
- 
--$(_obj)-$(CONFIG_OCF_SAFE)    += safe$(_slash)
--$(_obj)-$(CONFIG_OCF_HIFN)    += hifn$(_slash)
--$(_obj)-$(CONFIG_OCF_IXP4XX)  += ixp4xx$(_slash)
--$(_obj)-$(CONFIG_OCF_TALITOS) += talitos$(_slash)
--$(_obj)-$(CONFIG_OCF_PASEMI)  += pasemi$(_slash)
--$(_obj)-$(CONFIG_OCF_EP80579) += ep80579$(_slash)
--$(_obj)-$(CONFIG_OCF_CRYPTOCTEON) += cryptocteon$(_slash)
--$(_obj)-$(CONFIG_OCF_KIRKWOOD) += kirkwood$(_slash)
--$(_obj)-$(CONFIG_OCF_OCFNULL) += ocfnull$(_slash)
--$(_obj)-$(CONFIG_OCF_C7108) += c7108$(_slash)
--
- ocf-objs := $(OCF_OBJS)
- 
- $(list-multi) dummy1: $(ocf-objs)
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-am37x-Adding-ABB-Support-for-1GHz-OPP.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-am37x-Adding-ABB-Support-for-1GHz-OPP.patch
deleted file mode 100644
index 12cb1de..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-am37x-Adding-ABB-Support-for-1GHz-OPP.patch
+++ /dev/null
@@ -1,319 +0,0 @@
-From 0192a1d0731d3e8959b817bbc458c21e1c51408f Mon Sep 17 00:00:00 2001
-From: Greg Guyotte <gguyotte at ti.com>
-Date: Tue, 5 Jun 2012 16:54:26 -0500
-Subject: [PATCH] am37x: Adding ABB Support for 1GHz OPP
-
-This patch adds ABB support for the AM37x 1GHz OPP.  When 1GHz
-operation occurs, the ABB LDO will be enabled, effectively
-boosting MPU voltage.  At any time that we are not operating
-at 1GHz, the ABB LDO will be bypassed.  This change is
-required for operation at 1GHz on the AM37x device.
-
-This patch only affects AM37x.  In the course of booting,
-it boosts the MPU rate to 1GHz and turns on the ABB LDO.  It
-is expected that the system will be operating at 800MHz
-prior to this time, as set by Uboot.  Also note that after
-MPU rate is changed, the loops_per_jiffy global is updated,
-which is required in order to get the proper readout from
-BogoMIPS.
-
-Upstream-Status: Not Appropriate
-    * This patch is a quick fix based on an old kernel.
-    * This will be reworked for the Linux mainline kernel.
-
-Signed-off-by: Greg Guyotte <gguyotte at ti.com>
----
- arch/arm/mach-omap2/pm.c               |   30 +++++++-
- arch/arm/mach-omap2/prm-regbits-34xx.h |   20 +++++
- arch/arm/mach-omap2/prm2xxx_3xxx.h     |    5 ++
- arch/arm/mach-omap2/voltage.c          |  123 ++++++++++++++++++++++++++++++++
- 4 files changed, 176 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
-index f7e4d1b..678877c 100644
---- a/arch/arm/mach-omap2/pm.c
-+++ b/arch/arm/mach-omap2/pm.c
-@@ -27,6 +27,8 @@
- #include "cm2xxx_3xxx.h"
- #include "pm.h"
- 
-+#define RATE_1GHZ 1000000000
-+
- static struct omap_device_pm_latency *pm_lats;
- 
- static struct device *mpu_dev;
-@@ -61,7 +63,6 @@ struct device *omap4_get_dsp_device(void)
- }
- EXPORT_SYMBOL(omap4_get_dsp_device);
- 
--#ifndef CONFIG_CPU_FREQ
- static unsigned long compute_lpj(unsigned long ref, u_int div, u_int mult)
- {
- 	unsigned long new_jiffy_l, new_jiffy_h;
-@@ -81,7 +82,6 @@ static unsigned long compute_lpj(unsigned long ref, u_int div, u_int mult)
- 
- 	return new_jiffy_h + new_jiffy_l * 100;
- }
--#endif
- 
- /* static int _init_omap_device(struct omap_hwmod *oh, void *user) */
- static int _init_omap_device(char *name, struct device **new_dev)
-@@ -289,6 +289,7 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
- 	struct clk *clk;
- 	struct opp *opp;
- 	unsigned long freq, bootup_volt;
-+	int ret;
- 
- 	if (!vdd_name || !clk_name || !dev) {
- 		printk(KERN_ERR "%s: Invalid parameters!\n", __func__);
-@@ -311,6 +312,11 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
- 
- 	freq = clk->rate;
- 	clk_put(clk);
-+	
-+	/* set up for a voltage to support 1GHz */
-+	if (cpu_is_omap3630())
-+		if (!strcmp(vdd_name, "mpu"))
-+			freq = RATE_1GHZ;
- 
- 	opp = opp_find_freq_ceil(dev, &freq);
- 	if (IS_ERR(opp)) {
-@@ -327,6 +333,26 @@ static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
- 	}
- 
- 	omap_voltage_scale_vdd(voltdm, bootup_volt);
-+
-+	/* once voltage is changed, we can scale freq to max */
-+	if (cpu_is_omap3630()) {
-+		if (!strcmp(vdd_name, "mpu")) {
-+			unsigned long cur_rate;
-+			cur_rate = clk->rate;
-+
-+			ret = clk_set_rate(clk, RATE_1GHZ);
-+			if (ret) {
-+				dev_warn(dev, "%s: Unable to set rate to %d\n",
-+					 __func__, RATE_1GHZ);
-+				return ret;
-+			}
-+			/* Update loops_per_jiffy because processor speed is 
-+			   being changed.  Necessary to keep BogoMIPS happy. */
-+			loops_per_jiffy = compute_lpj(loops_per_jiffy,
-+						      cur_rate / 1000000, 
-+						      RATE_1GHZ / 1000000);
-+		}
-+	}
- 	return 0;
- 
- exit:
-diff --git a/arch/arm/mach-omap2/prm-regbits-34xx.h b/arch/arm/mach-omap2/prm-regbits-34xx.h
-index 64c087a..2758fa3 100644
---- a/arch/arm/mach-omap2/prm-regbits-34xx.h
-+++ b/arch/arm/mach-omap2/prm-regbits-34xx.h
-@@ -89,6 +89,7 @@
- #define OMAP3430_LASTPOWERSTATEENTERED_MASK		(0x3 << 0)
- 
- /* PRM_IRQSTATUS_IVA2, PRM_IRQSTATUS_MPU shared bits */
-+#define OMAP3630_ABB_LDO_TRANXDONE_ST                   (1 << 26)
- #define OMAP3430_WKUP_ST_MASK				(1 << 0)
- 
- /* PRM_IRQENABLE_IVA2, PRM_IRQENABLE_MPU shared bits */
-@@ -216,6 +217,9 @@
- /* PRM_SYSCONFIG specific bits */
- 
- /* PRM_IRQSTATUS_MPU specific bits */
-+#define OMAP3630_VC_BYPASS_ACK_EN                       (1 << 28)
-+#define OMAP3630_VC_VP1_ACK_EN                          (1 << 27)
-+#define OMAP3630_VC_ABB_LDO_TRANXDONE_EN                (1 << 26)
- #define OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT		25
- #define OMAP3430ES2_SND_PERIPH_DPLL_ST_MASK		(1 << 25)
- #define OMAP3430_VC_TIMEOUTERR_ST_MASK			(1 << 24)
-@@ -587,6 +591,22 @@
- 
- /* PRM_VP2_STATUS specific bits */
- 
-+/* PRM_LDO_ABB_SETUP */
-+#define OMAP3630_SR2_IN_TRANSITION                     (1 << 6)
-+#define OMAP3630_SR2_STATUS_SHIFT                      3
-+#define OMAP3630_SR2_STATUS_MASK                       (0x3 << 3)
-+#define OMAP3630_OPP_CHANGE                            (1 << 2)
-+#define OMAP3630_OPP_SEL_SHIFT                         0
-+#define OMAP3630_OPP_SEL_MASK                          (0x3 << 0)
-+
-+/* PRM_LDO_ABB_CTRL */
-+#define OMAP3630_SR2_WTCNT_VALUE_SHIFT                 8
-+#define OMAP3630_SR2_WTCNT_VALUE_MASK                  (0xff << 8)
-+#define OMAP3630_SLEEP_RBB_SEL                         (1 << 3)
-+#define OMAP3630_ACTIVE_FBB_SEL                        (1 << 2)
-+#define OMAP3630_ACTIVE_RBB_SEL                        (1 << 1)
-+#define OMAP3630_SR2EN                                 (1 << 0)
-+
- /* RM_RSTST_NEON specific bits */
- 
- /* PM_WKDEP_NEON specific bits */
-diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.h b/arch/arm/mach-omap2/prm2xxx_3xxx.h
-index 613f83c..79c9ad5 100644
---- a/arch/arm/mach-omap2/prm2xxx_3xxx.h
-+++ b/arch/arm/mach-omap2/prm2xxx_3xxx.h
-@@ -171,6 +171,11 @@
- #define OMAP3_PRM_VP2_STATUS_OFFSET	0x00e4
- #define OMAP3430_PRM_VP2_STATUS		OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00e4)
- 
-+#define OMAP3_PRM_LDO_ABB_SETUP_OFFSET  0x00f0
-+#define OMAP3430_PRM_LDO_ABB_SETUP	OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00f0)
-+#define OMAP3_PRM_LDO_ABB_CTRL_OFFSET	0x00f4
-+#define OMAP3430_PRM_LDO_ABB_CTRL	OMAP34XX_PRM_REGADDR(OMAP3430_GR_MOD, 0x00f4)
-+
- #define OMAP3_PRM_CLKSEL_OFFSET	0x0040
- #define OMAP3430_PRM_CLKSEL		OMAP34XX_PRM_REGADDR(OMAP3430_CCR_MOD, 0x0040)
- #define OMAP3_PRM_CLKOUT_CTRL_OFFSET	0x0070
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index 2e015a7..32944d0 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -45,6 +45,10 @@
- #define VP_TRANXDONE_TIMEOUT	300
- #define VOLTAGE_DIR_SIZE	16
- 
-+#define ABB_TRANXDONE_TIMEOUT   100
-+#define ABB_FAST_OPP            1
-+#define ABB_NOMINAL_OPP         2
-+
- /* Voltage processor register offsets */
- struct vp_reg_offs {
- 	u8 vpconfig;
-@@ -764,6 +768,112 @@ static int vc_bypass_scale_voltage(struct omap_vdd_info *vdd,
- 	return 0;
- }
- 
-+/**
-+ * omap3630_abb_change_active_opp - handle OPP changes with Adaptive Body-Bias
-+ * @target_opp_no: ABB_FAST_OPP or ABB_NOMINAL_OPP
-+ *
-+ * Adaptive Body-Bias is a 3630-specific technique to boost voltage in high
-+ * OPPs for silicon with weak characteristics as well as lower voltage in low
-+ * OPPs for silicon with strong characteristics.
-+ *
-+ * Only Foward Body-Bias for operating at high OPPs is implemented below.
-+ * Reverse Body-Bias for saving power in active cases and sleep cases is not
-+ * yet implemented.
-+ */
-+static int omap3630_abb_change_active_opp(u32 target_opp_no)
-+{
-+       u32 sr2en_enabled;
-+       int timeout;
-+
-+       /* has SR2EN been enabled previously? */
-+       sr2en_enabled = (omap2_prm_read_mod_reg(OMAP3430_GR_MOD,
-+                               OMAP3_PRM_LDO_ABB_CTRL_OFFSET) &
-+                       OMAP3630_SR2EN);
-+
-+       /* select OPP */
-+       /* FIXME: shouldn't be hardcoded OPP here */
-+       if (target_opp_no == ABB_FAST_OPP) {
-+               /* program for fast opp - enable fbb */
-+               omap2_prm_rmw_mod_reg_bits(OMAP3630_OPP_SEL_MASK,
-+                               (ABB_FAST_OPP << OMAP3630_OPP_SEL_SHIFT),
-+                               OMAP3430_GR_MOD,
-+                               OMAP3_PRM_LDO_ABB_SETUP_OFFSET);
-+
-+               /* enable the ABB ldo if not done already */
-+               if (!sr2en_enabled)
-+                       omap2_prm_set_mod_reg_bits(OMAP3630_SR2EN,
-+                                       OMAP3430_GR_MOD,
-+                                       OMAP3_PRM_LDO_ABB_CTRL_OFFSET);
-+	       pr_debug("ABB: ABB LDO Enabled\n");
-+       } else if (sr2en_enabled) {
-+               /* program for nominal opp - bypass abb ldo */
-+               omap2_prm_rmw_mod_reg_bits(OMAP3630_OPP_SEL_MASK,
-+                               (ABB_NOMINAL_OPP << OMAP3630_OPP_SEL_SHIFT),
-+                               OMAP3430_GR_MOD,
-+                               OMAP3_PRM_LDO_ABB_SETUP_OFFSET);
-+	       pr_debug("ABB: ABB LDO Bypassed\n");
-+       } else {
-+               /* nothing to do here */
-+               return 0;
-+       }
-+
-+       /* set ACTIVE_FBB_SEL for all 3630 silicon */
-+       omap2_prm_set_mod_reg_bits(OMAP3630_ACTIVE_FBB_SEL,
-+                       OMAP3430_GR_MOD,
-+                       OMAP3_PRM_LDO_ABB_CTRL_OFFSET);
-+
-+       /* program settling time of 30us for ABB ldo transition */
-+       omap2_prm_rmw_mod_reg_bits(OMAP3630_SR2_WTCNT_VALUE_MASK,
-+                       (0x62 << OMAP3630_SR2_WTCNT_VALUE_SHIFT),
-+                       OMAP3430_GR_MOD,
-+                       OMAP3_PRM_LDO_ABB_CTRL_OFFSET);
-+
-+       /* clear ABB ldo interrupt status */
-+       omap2_prm_write_mod_reg(OMAP3630_ABB_LDO_TRANXDONE_ST,
-+                       OCP_MOD,
-+                       OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
-+
-+       /* enable ABB LDO OPP change */
-+       omap2_prm_set_mod_reg_bits(OMAP3630_OPP_CHANGE,
-+                       OMAP3430_GR_MOD,
-+                       OMAP3_PRM_LDO_ABB_SETUP_OFFSET);
-+
-+       timeout = 0;
-+
-+       /* wait until OPP change completes */
-+       while ((timeout < ABB_TRANXDONE_TIMEOUT ) &&
-+                       (!(omap2_prm_read_mod_reg(OCP_MOD,
-+                                           OMAP3_PRM_IRQSTATUS_MPU_OFFSET) &
-+                          OMAP3630_ABB_LDO_TRANXDONE_ST))) {
-+               udelay(1);
-+               timeout++;
-+       }
-+
-+       if (timeout == ABB_TRANXDONE_TIMEOUT)
-+               pr_warning("ABB: TRANXDONE timed out waiting for OPP change\n");
-+
-+       timeout = 0;
-+
-+       /* Clear all pending TRANXDONE interrupts/status */
-+       while (timeout < ABB_TRANXDONE_TIMEOUT) {
-+               omap2_prm_write_mod_reg(OMAP3630_ABB_LDO_TRANXDONE_ST,
-+                               OCP_MOD,
-+                               OMAP3_PRM_IRQSTATUS_MPU_OFFSET);
-+               if (!(omap2_prm_read_mod_reg(OCP_MOD,
-+                                       OMAP3_PRM_IRQSTATUS_MPU_OFFSET)
-+                                       & OMAP3630_ABB_LDO_TRANXDONE_ST))
-+                       break;
-+
-+               udelay(1);
-+               timeout++;
-+       }
-+
-+       if (timeout == ABB_TRANXDONE_TIMEOUT)
-+               pr_warning("ABB: TRANXDONE timed out trying to clear status\n");
-+
-+       return 0;
-+}
-+
- /* VP force update method of voltage scaling */
- static int vp_forceupdate_scale_voltage(struct omap_vdd_info *vdd,
- 		unsigned long target_volt)
-@@ -858,6 +968,19 @@ static int vp_forceupdate_scale_voltage(struct omap_vdd_info *vdd,
- 	vpconfig &= ~vdd->vp_reg.vpconfig_forceupdate;
- 	vdd->write_reg(vpconfig, mod, vdd->vp_offs.vpconfig);
- 
-+	if (cpu_is_omap3630() && !strcmp(vdd->voltdm.name, "mpu")) {
-+		if (vdd->curr_volt == OMAP3630_VDD_MPU_OPP1G_UV) {
-+			pr_debug("%s: vdd_%s: Attempting ABB enable\n",
-+				   __func__, vdd->voltdm.name);
-+			omap3630_abb_change_active_opp(ABB_FAST_OPP);
-+		}
-+		else {
-+			pr_debug("%s: vdd_%s: Attempting ABB disable\n", 
-+				   __func__, vdd->voltdm.name);
-+			omap3630_abb_change_active_opp(ABB_NOMINAL_OPP);
-+		}
-+	}
-+
- 	return 0;
- }
- 
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-linux-omap3-Add-OCF-support-to-2.6.37-kernel.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-linux-omap3-Add-OCF-support-to-2.6.37-kernel.patch
deleted file mode 100644
index 8ad7bf4..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-linux-omap3-Add-OCF-support-to-2.6.37-kernel.patch
+++ /dev/null
@@ -1,7043 +0,0 @@
-From d27b15fcf6b97acf8657ef6635e7e3ec95961f14 Mon Sep 17 00:00:00 2001
-From: Greg Turner <gregturner at ti.com>
-Date: Thu, 16 Jun 2011 09:35:15 -0500
-Subject: [PATCH] linux-omap3: Add OCF support to 2.6.37 kernel
-
-* Patch kernel with OCF (community source)
-* Mod to defconfig to build OCF statically in to kernel
-* cryptodev.ko is built as a loadable module
-* cryptodev.h header file moved to include/crypto
-
-Signed-off-by: Greg Turner <gregturner at ti.com>
----
- crypto/Kconfig             |    3 +
- crypto/Makefile            |    2 +
- crypto/ocf/ChangeLog       |  205 +++++
- crypto/ocf/Config.in       |   36 +
- crypto/ocf/Kconfig         |  119 +++
- crypto/ocf/Makefile        |  124 +++
- crypto/ocf/criov.c         |  215 ++++++
- crypto/ocf/crypto.c        | 1784 ++++++++++++++++++++++++++++++++++++++++++++
- crypto/ocf/cryptodev.c     | 1063 ++++++++++++++++++++++++++
- crypto/ocf/cryptosoft.c    | 1210 ++++++++++++++++++++++++++++++
- crypto/ocf/ocf-bench.c     |  436 +++++++++++
- crypto/ocf/ocf-compat.h    |  294 ++++++++
- crypto/ocf/random.c        |  322 ++++++++
- crypto/ocf/rndtest.c       |  300 ++++++++
- crypto/ocf/rndtest.h       |   54 ++
- crypto/ocf/uio.h           |   54 ++
- drivers/char/random.c      |   65 ++
- fs/fcntl.c                 |    1 +
- include/crypto/cryptodev.h |  479 ++++++++++++
- include/linux/miscdevice.h |    1 +
- include/linux/random.h     |   29 +
- kernel/pid.c               |    1 +
- 22 files changed, 6797 insertions(+), 0 deletions(-)
- create mode 100644 crypto/ocf/ChangeLog
- create mode 100644 crypto/ocf/Config.in
- create mode 100644 crypto/ocf/Kconfig
- create mode 100644 crypto/ocf/Makefile
- create mode 100644 crypto/ocf/criov.c
- create mode 100644 crypto/ocf/crypto.c
- create mode 100644 crypto/ocf/cryptodev.c
- create mode 100644 crypto/ocf/cryptosoft.c
- create mode 100644 crypto/ocf/ocf-bench.c
- create mode 100644 crypto/ocf/ocf-compat.h
- create mode 100644 crypto/ocf/random.c
- create mode 100644 crypto/ocf/rndtest.c
- create mode 100644 crypto/ocf/rndtest.h
- create mode 100644 crypto/ocf/uio.h
- create mode 100644 include/crypto/cryptodev.h
-
-diff --git a/crypto/Kconfig b/crypto/Kconfig
-index e4bac29..3154b22 100644
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -844,3 +844,6 @@ config CRYPTO_ANSI_CPRNG
- source "drivers/crypto/Kconfig"
- 
- endif	# if CRYPTO
-+
-+source "crypto/ocf/Kconfig"
-+
-diff --git a/crypto/Makefile b/crypto/Makefile
-index 423b7de..14ec6e9 100644
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -86,6 +86,8 @@ obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
- obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
- obj-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o
- 
-+obj-$(CONFIG_OCF_OCF) += ocf/
-+
- #
- # generic algorithms and the async_tx api
- #
-diff --git a/crypto/ocf/ChangeLog b/crypto/ocf/ChangeLog
-new file mode 100644
-index 0000000..8101340
---- /dev/null
-+++ b/crypto/ocf/ChangeLog
-@@ -0,0 +1,205 @@
-+2009-08-20 19:05  toby
-+
-+	* cryptocteon/Makefile, ep80579/Makefile:
-+	Add some makefile
-+	changes to let a linux-2.4 build from head work when doing 'make
-+	dep'.
-+
-+2009-08-12 21:42  davidm
-+
-+	* cryptodev.c:
-+	
-+	if crypto_dispatch fails,  make sure we bail immediately rather
-+	than go on to do other error checking that we should only do if
-+	crypto_dispatch worked.
-+
-+2009-08-12 21:30  davidm
-+
-+	* crypto.c:
-+	
-+	To avoid a race while we have the Q's unlcked we must stage the
-+	blocking of the driver, so,  we assume the driver to be blocked, 
-+	but if any unblocks come in while we are unlocked,  we do not block
-+	the driver.
-+	
-+	At worst this means we will try again and get another block.
-+	
-+	Without this change we can lose an unblock request and give up on
-+	the driver.
-+
-+2009-08-12 21:04  davidm
-+
-+	* crypto.c:
-+	
-+	kill_proc needs to be defined for kernels at or after 2.6.27
-+
-+2009-08-12 21:03  davidm
-+
-+	* ep80579/environment.mk:
-+	
-+	Allow OCF to be with the kernel,  or within the uClinux-dist
-+	modules dir.
-+
-+2009-08-12 20:52  davidm
-+
-+	* ocf-compat.h:
-+	
-+	if IS_ERR_VALUE is not defined,  try and get it,  if it doesn't
-+	exist, make our own.
-+
-+2009-05-27 01:52  davidm
-+
-+	* cryptodev.c:
-+	
-+	Order a crd combination of cipher/hmac just as ipsec would.  That
-+	way it's easier to test results against cryptosoft and the HW
-+	drivers that automatically fix this.
-+	
-+	cryptosoft processes algs in crd order,  thus they get different
-+	results to when compared to cryptosoft.
-+	
-+	encrypt = cipher then hmac decrypt = hmac then cipher
-+
-+2009-05-27 01:48  davidm
-+
-+	* ocf-compat.h:
-+	
-+	Make sure we have an late_initcall macro even on old systems.
-+
-+2009-05-27 01:47  davidm
-+
-+	* cryptosoft.c:
-+	
-+	make sure that cryptosoft it started after the kernel crypto, 
-+	otherwise it will not detect the kernels algs correctly.
-+
-+2009-05-27 01:41  davidm
-+
-+	* cryptocteon/: cavium_crypto.c, cryptocteon.c:
-+	
-+	aes/des/3des + md5/sha1 working with ipsec.
-+
-+2009-05-20 19:11  davidm
-+
-+	* cryptocteon/: README.txt, cavium_crypto.c, cryptocteon.c:
-+	
-+	Complete rework of the driver to setup a framework that can handle
-+	all the combinations we need properly.
-+	
-+	Currently only DES is working.	Need to knock out a DES-MD5 version
-+	so we can bench ipsec, then cleanup the AES/SHA bits.
-+
-+2009-05-14 20:53  asallawa
-+
-+	* ixp4xx/ixp4xx.c:
-+	
-+	Remove call to flush_scheduled_work(). Doesn't appear to be
-+	necessary and can cause 'scheduling while atomic' kernel errors.
-+
-+2009-05-14 01:17  asallawa
-+
-+	* crypto.c:
-+	
-+	In particular situations, the crypto kernel thread can run forever
-+	without ever calling wait_event_interruptible() which meant that it
-+	could starve the rest of the system of CPU time.  To fix this, set
-+	a maximum number of crypto operations to do consecutively before
-+	calling schedule(). Default value is 1000, which should be less
-+	than a second on most of our platforms.
-+
-+2009-05-08 20:10  davidm
-+
-+	* crypto.c:
-+	
-+	Currently we are queuing requests that fail for callback.  The
-+	callback will never happen because the request failed.	This can
-+	cause "busy loops" in the crypto support threads.
-+	
-+	Make sure we track the error status when processing a request to
-+	the driver and only return 0 if everything worked.
-+	
-+	The original code had this right,  just bad locking,  the locking
-+	fixes broke the error reporting.
-+
-+2009-03-31 20:41  davidm
-+
-+	* crypto.c:
-+	
-+	We cannot use sys_kill (not experted),	so switch to using send_sig
-+	and the appropriate task finding functions.
-+
-+2009-03-27 03:50  gerg
-+
-+	* crypto.c:
-+	
-+	From linux-2.6.29 onwards there is no kill_proc() routine.  On
-+	these newer systems call direct to the sys_kill() system call.
-+
-+2009-03-14 07:00  davidm
-+
-+	* ep80579/Makefile:
-+	
-+	merge makefile fix from head so that make clean works properly.
-+
-+2009-03-10 22:57  davidm
-+
-+	* hifn/hifn7751.c:
-+	
-+	Fix up cache line size for hifns,  not all get it right.  Patch
-+	suggested and tested by Donald Lai <dlai at hifn.com>.
-+
-+2009-03-10 21:36  davidm
-+
-+	* ep80579/Makefile:
-+	
-+	Make sure we do not break non-tolapai builds (when running clean
-+	etc)
-+
-+2009-02-07 00:32  davidm
-+
-+	* Kconfig, Makefile, cryptocteon/Makefile, cryptocteon/README.txt,
-+	cryptocteon/cavium_crypto.c, cryptocteon/cryptocteon.c:
-+	
-+	First pass slightly working (3des/aes) crypto driver for the cavium
-+	5010.
-+	
-+	Still a fair bit needed here (hmac+cipher and hash processing). 
-+	Need to revisit the faster cavium example ipsec code.
-+
-+2009-01-20 01:06  gerg
-+
-+	* cryptosoft.c:
-+	
-+	Include linux/scatterlist.h instead of asm/scatterlist.h. Otherwise
-+	we don't get the generic sg macros (only the asm specific
-+	difinitions).
-+
-+2009-01-16 20:05  davidm
-+
-+	* cryptosoft.c:
-+	
-+	clean up some debug output (sign extension fo chars)
-+
-+2008-11-20 22:50  davidm
-+
-+	* ocf-compat.h:
-+	
-+	We need to include mm.h to get page_address on some kernels. 
-+	reported by Paul Wouters <paul at xelerance.com>
-+
-+2008-11-14 06:14  davidm
-+
-+	* patches/linux-2.6.26-ocf.patch:
-+	
-+	make sure we patch into the kernel properly.  Paul Wouters
-+	<paul at xelerance.com>
-+
-+2008-09-20 02:20  davidm
-+
-+	* crypto.c, cryptodev.h:
-+	
-+	Fix up session migration so that a driver can be removed while
-+	ipsec is up and running and the tunnel will auto-migrate to a
-+	backup driver (ie., cryptosoft).
-+	
-+	Brad Vrabete <brad.vrabete at intel.com>
-diff --git a/crypto/ocf/Config.in b/crypto/ocf/Config.in
-new file mode 100644
-index 0000000..d722cba
---- /dev/null
-+++ b/crypto/ocf/Config.in
-@@ -0,0 +1,36 @@
-+#############################################################################
-+
-+mainmenu_option next_comment
-+comment 'OCF Configuration'
-+tristate 'OCF (Open Cryptograhic Framework)' CONFIG_OCF_OCF
-+dep_mbool '  enable fips RNG checks (fips check on RNG data before use)' \
-+				CONFIG_OCF_FIPS $CONFIG_OCF_OCF
-+dep_mbool '  enable harvesting entropy for /dev/random' \
-+				CONFIG_OCF_RANDOMHARVEST $CONFIG_OCF_OCF
-+dep_tristate '  cryptodev (user space support)' \
-+				CONFIG_OCF_CRYPTODEV $CONFIG_OCF_OCF
-+dep_tristate '  cryptosoft (software crypto engine)' \
-+				CONFIG_OCF_CRYPTOSOFT $CONFIG_OCF_OCF
-+dep_tristate '  safenet (HW crypto engine)' \
-+				CONFIG_OCF_SAFE $CONFIG_OCF_OCF
-+dep_tristate '  IXP4xx (HW crypto engine)' \
-+				CONFIG_OCF_IXP4XX $CONFIG_OCF_OCF
-+dep_mbool    '  Enable IXP4xx HW to perform SHA1 and MD5 hashing (very slow)' \
-+				CONFIG_OCF_IXP4XX_SHA1_MD5 $CONFIG_OCF_IXP4XX
-+dep_tristate '  hifn (HW crypto engine)' \
-+				CONFIG_OCF_HIFN $CONFIG_OCF_OCF
-+dep_tristate '  talitos (HW crypto engine)' \
-+				CONFIG_OCF_TALITOS $CONFIG_OCF_OCF
-+dep_tristate '  pasemi (HW crypto engine)' \
-+				CONFIG_OCF_PASEMI $CONFIG_OCF_OCF
-+dep_tristate '  ep80579 (HW crypto engine)' \
-+				CONFIG_OCF_EP80579 $CONFIG_OCF_OCF
-+dep_tristate '  Micronas c7108 (HW crypto engine)' \
-+				CONFIG_OCF_C7108 $CONFIG_OCF_OCF
-+dep_tristate '  ocfnull (does no crypto)' \
-+				CONFIG_OCF_OCFNULL $CONFIG_OCF_OCF
-+dep_tristate '  ocf-bench (HW crypto in-kernel benchmark)' \
-+				CONFIG_OCF_BENCH $CONFIG_OCF_OCF
-+endmenu
-+
-+#############################################################################
-diff --git a/crypto/ocf/Kconfig b/crypto/ocf/Kconfig
-new file mode 100644
-index 0000000..b9c24ff
---- /dev/null
-+++ b/crypto/ocf/Kconfig
-@@ -0,0 +1,119 @@
-+menu "OCF Configuration"
-+
-+config OCF_OCF
-+	tristate "OCF (Open Cryptograhic Framework)"
-+	help
-+	  A linux port of the OpenBSD/FreeBSD crypto framework.
-+
-+config OCF_RANDOMHARVEST
-+	bool "crypto random --- harvest entropy for /dev/random"
-+	depends on OCF_OCF
-+	help
-+	  Includes code to harvest random numbers from devices that support it.
-+
-+config OCF_FIPS
-+	bool "enable fips RNG checks"
-+	depends on OCF_OCF && OCF_RANDOMHARVEST
-+	help
-+	  Run all RNG provided data through a fips check before
-+	  adding it /dev/random's entropy pool.
-+
-+config OCF_CRYPTODEV
-+	tristate "cryptodev (user space support)"
-+	depends on OCF_OCF
-+	help
-+	  The user space API to access crypto hardware.
-+
-+config OCF_CRYPTOSOFT
-+	tristate "cryptosoft (software crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  A software driver for the OCF framework that uses
-+	  the kernel CryptoAPI.
-+
-+config OCF_SAFE
-+	tristate "safenet (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  A driver for a number of the safenet Excel crypto accelerators.
-+	  Currently tested and working on the 1141 and 1741.
-+
-+config OCF_IXP4XX
-+	tristate "IXP4xx (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  XScale IXP4xx crypto accelerator driver.  Requires the
-+	  Intel Access library.
-+
-+config OCF_IXP4XX_SHA1_MD5
-+	bool "IXP4xx SHA1 and MD5 Hashing"
-+	depends on OCF_IXP4XX
-+	help
-+	  Allows the IXP4xx crypto accelerator to perform SHA1 and MD5 hashing.
-+	  Note: this is MUCH slower than using cryptosoft (software crypto engine).
-+
-+config OCF_HIFN
-+	tristate "hifn (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for various HIFN based crypto accelerators.
-+	  (7951, 7955, 7956, 7751, 7811)
-+
-+config OCF_HIFNHIPP
-+	tristate "Hifn HIPP (HW packet crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for various HIFN (HIPP) based crypto accelerators
-+	  (7855)
-+
-+config OCF_TALITOS
-+	tristate "talitos (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for Freescale's security engine (SEC/talitos).
-+
-+config OCF_PASEMI
-+	tristate "pasemi (HW crypto engine)"
-+	depends on OCF_OCF && PPC_PASEMI
-+	help
-+	  OCF driver for the PA Semi PWRficient DMA Engine
-+
-+config OCF_EP80579
-+	tristate "ep80579 (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for the Intel EP80579 Integrated Processor Product Line.
-+
-+config OCF_CRYPTOCTEON
-+	tristate "cryptocteon (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for the Cavium OCTEON Processors.
-+
-+config OCF_KIRKWOOD
-+	tristate "kirkwood (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for the Marvell Kirkwood (88F6xxx) Processors.
-+
-+config OCF_C7108
-+	tristate "Micronas 7108 (HW crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for the Microna 7108 Cipher processors.
-+
-+config OCF_OCFNULL
-+	tristate "ocfnull (fake crypto engine)"
-+	depends on OCF_OCF
-+	help
-+	  OCF driver for measuring ipsec overheads (does no crypto)
-+
-+config OCF_BENCH
-+	tristate "ocf-bench (HW crypto in-kernel benchmark)"
-+	depends on OCF_OCF
-+	help
-+	  A very simple encryption test for the in-kernel interface
-+	  of OCF.  Also includes code to benchmark the IXP Access library
-+	  for comparison.
-+
-+endmenu
-diff --git a/crypto/ocf/Makefile b/crypto/ocf/Makefile
-new file mode 100644
-index 0000000..fa951f4
---- /dev/null
-+++ b/crypto/ocf/Makefile
-@@ -0,0 +1,124 @@
-+# for SGlinux builds
-+-include $(ROOTDIR)/modules/.config
-+
-+OCF_OBJS = crypto.o criov.o
-+
-+ifdef CONFIG_OCF_RANDOMHARVEST
-+	OCF_OBJS += random.o
-+endif
-+
-+ifdef CONFIG_OCF_FIPS
-+	OCF_OBJS += rndtest.o
-+endif
-+
-+# Add in autoconf.h to get #defines for CONFIG_xxx
-+AUTOCONF_H=$(ROOTDIR)/modules/autoconf.h
-+ifeq ($(AUTOCONF_H), $(wildcard $(AUTOCONF_H)))
-+	EXTRA_CFLAGS += -include $(AUTOCONF_H)
-+	export EXTRA_CFLAGS
-+endif
-+
-+ifndef obj
-+	obj ?= .
-+	_obj = subdir
-+	mod-subdirs := safe hifn ixp4xx talitos ocfnull
-+	export-objs += crypto.o criov.o random.o
-+	list-multi += ocf.o
-+	_slash :=
-+else
-+	_obj = obj
-+	_slash := /
-+endif
-+
-+EXTRA_CFLAGS += -I$(obj)/.
-+
-+obj-$(CONFIG_OCF_OCF)         += ocf.o
-+obj-$(CONFIG_OCF_CRYPTODEV)   += cryptodev.o
-+obj-$(CONFIG_OCF_CRYPTOSOFT)  += cryptosoft.o
-+obj-$(CONFIG_OCF_BENCH)       += ocf-bench.o
-+
-+$(_obj)-$(CONFIG_OCF_SAFE)    += safe$(_slash)
-+$(_obj)-$(CONFIG_OCF_HIFN)    += hifn$(_slash)
-+$(_obj)-$(CONFIG_OCF_IXP4XX)  += ixp4xx$(_slash)
-+$(_obj)-$(CONFIG_OCF_TALITOS) += talitos$(_slash)
-+$(_obj)-$(CONFIG_OCF_PASEMI)  += pasemi$(_slash)
-+$(_obj)-$(CONFIG_OCF_EP80579) += ep80579$(_slash)
-+$(_obj)-$(CONFIG_OCF_CRYPTOCTEON) += cryptocteon$(_slash)
-+$(_obj)-$(CONFIG_OCF_KIRKWOOD) += kirkwood$(_slash)
-+$(_obj)-$(CONFIG_OCF_OCFNULL) += ocfnull$(_slash)
-+$(_obj)-$(CONFIG_OCF_C7108) += c7108$(_slash)
-+
-+ocf-objs := $(OCF_OBJS)
-+
-+$(list-multi) dummy1: $(ocf-objs)
-+	$(LD) -r -o $@ $(ocf-objs)
-+
-+.PHONY:
-+clean:
-+	rm -f *.o *.ko .*.o.flags .*.ko.cmd .*.o.cmd .*.mod.o.cmd *.mod.c
-+	rm -f */*.o */*.ko */.*.o.cmd */.*.ko.cmd */.*.mod.o.cmd */*.mod.c */.*.o.flags
-+
-+ifdef TOPDIR
-+-include $(TOPDIR)/Rules.make
-+endif
-+
-+#
-+# release gen targets
-+#
-+
-+.PHONY: patch
-+patch:
-+	REL=`date +%Y%m%d`; \
-+		patch=ocf-linux-$$REL.patch; \
-+		patch24=ocf-linux-24-$$REL.patch; \
-+		patch26=ocf-linux-26-$$REL.patch; \
-+		( \
-+			find . -name Makefile; \
-+			find . -name Config.in; \
-+			find . -name Kconfig; \
-+			find . -name README; \
-+			find . -name '*.[ch]' | grep -v '.mod.c'; \
-+		) | while read t; do \
-+			diff -Nau /dev/null $$t | sed 's?^+++ \./?+++ linux/crypto/ocf/?'; \
-+		done > $$patch; \
-+		cat patches/linux-2.4.35-ocf.patch $$patch > $$patch24; \
-+		cat patches/linux-2.6.33-ocf.patch $$patch > $$patch26
-+
-+.PHONY: tarball
-+tarball:
-+	REL=`date +%Y%m%d`; RELDIR=/tmp/ocf-linux-$$REL; \
-+		CURDIR=`pwd`; \
-+		rm -rf /tmp/ocf-linux-$$REL*; \
-+		mkdir -p $$RELDIR/tools; \
-+		cp README* $$RELDIR; \
-+		cp patches/openss*.patch $$RELDIR; \
-+		cp patches/crypto-tools.patch $$RELDIR; \
-+		cp tools/[!C]* $$RELDIR/tools; \
-+		cd ..; \
-+		tar cvf $$RELDIR/ocf-linux.tar \
-+					--exclude=CVS \
-+					--exclude=.* \
-+					--exclude=*.o \
-+					--exclude=*.ko \
-+					--exclude=*.mod.* \
-+					--exclude=README* \
-+					--exclude=ocf-*.patch \
-+					--exclude=ocf/patches/openss*.patch \
-+					--exclude=ocf/patches/crypto-tools.patch \
-+					--exclude=ocf/tools \
-+					ocf; \
-+		gzip -9 $$RELDIR/ocf-linux.tar; \
-+		cd /tmp; \
-+		tar cvf ocf-linux-$$REL.tar ocf-linux-$$REL; \
-+		gzip -9 ocf-linux-$$REL.tar; \
-+		cd $$CURDIR/../../user; \
-+		rm -rf /tmp/crypto-tools-$$REL*; \
-+		tar cvf /tmp/crypto-tools-$$REL.tar \
-+					--exclude=CVS \
-+					--exclude=.* \
-+					--exclude=*.o \
-+					--exclude=cryptotest \
-+					--exclude=cryptokeytest \
-+					crypto-tools; \
-+		gzip -9 /tmp/crypto-tools-$$REL.tar
-+
-diff --git a/crypto/ocf/criov.c b/crypto/ocf/criov.c
-new file mode 100644
-index 0000000..5fe9040
---- /dev/null
-+++ b/crypto/ocf/criov.c
-@@ -0,0 +1,215 @@
-+/*      $OpenBSD: criov.c,v 1.9 2002/01/29 15:48:29 jason Exp $	*/
-+
-+/*
-+ * Linux port done by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ * The license and original author are listed below.
-+ *
-+ * Copyright (c) 1999 Theo de Raadt
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in the
-+ *   documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *   derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+__FBSDID("$FreeBSD: src/sys/opencrypto/criov.c,v 1.5 2006/06/04 22:15:13 pjd Exp $");
-+ */
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/uio.h>
-+#include <linux/skbuff.h>
-+#include <linux/kernel.h>
-+#include <linux/mm.h>
-+#include <asm/io.h>
-+
-+#include <uio.h>
-+#include <crypto/cryptodev.h>
-+
-+/*
-+ * This macro is only for avoiding code duplication, as we need to skip
-+ * given number of bytes in the same way in three functions below.
-+ */
-+#define	CUIO_SKIP()	do {						\
-+	KASSERT(off >= 0, ("%s: off %d < 0", __func__, off));		\
-+	KASSERT(len >= 0, ("%s: len %d < 0", __func__, len));		\
-+	while (off > 0) {						\
-+		KASSERT(iol >= 0, ("%s: empty in skip", __func__));	\
-+		if (off < iov->iov_len)					\
-+			break;						\
-+		off -= iov->iov_len;					\
-+		iol--;							\
-+		iov++;							\
-+	}								\
-+} while (0)
-+
-+void
-+cuio_copydata(struct uio* uio, int off, int len, caddr_t cp)
-+{
-+	struct iovec *iov = uio->uio_iov;
-+	int iol = uio->uio_iovcnt;
-+	unsigned count;
-+
-+	CUIO_SKIP();
-+	while (len > 0) {
-+		KASSERT(iol >= 0, ("%s: empty", __func__));
-+		count = min((int)(iov->iov_len - off), len);
-+		memcpy(cp, ((caddr_t)iov->iov_base) + off, count);
-+		len -= count;
-+		cp += count;
-+		off = 0;
-+		iol--;
-+		iov++;
-+	}
-+}
-+
-+void
-+cuio_copyback(struct uio* uio, int off, int len, caddr_t cp)
-+{
-+	struct iovec *iov = uio->uio_iov;
-+	int iol = uio->uio_iovcnt;
-+	unsigned count;
-+
-+	CUIO_SKIP();
-+	while (len > 0) {
-+		KASSERT(iol >= 0, ("%s: empty", __func__));
-+		count = min((int)(iov->iov_len - off), len);
-+		memcpy(((caddr_t)iov->iov_base) + off, cp, count);
-+		len -= count;
-+		cp += count;
-+		off = 0;
-+		iol--;
-+		iov++;
-+	}
-+}
-+
-+/*
-+ * Return a pointer to iov/offset of location in iovec list.
-+ */
-+struct iovec *
-+cuio_getptr(struct uio *uio, int loc, int *off)
-+{
-+	struct iovec *iov = uio->uio_iov;
-+	int iol = uio->uio_iovcnt;
-+
-+	while (loc >= 0) {
-+		/* Normal end of search */
-+		if (loc < iov->iov_len) {
-+	    		*off = loc;
-+	    		return (iov);
-+		}
-+
-+		loc -= iov->iov_len;
-+		if (iol == 0) {
-+			if (loc == 0) {
-+				/* Point at the end of valid data */
-+				*off = iov->iov_len;
-+				return (iov);
-+			} else
-+				return (NULL);
-+		} else {
-+			iov++, iol--;
-+		}
-+    	}
-+
-+	return (NULL);
-+}
-+
-+EXPORT_SYMBOL(cuio_copyback);
-+EXPORT_SYMBOL(cuio_copydata);
-+EXPORT_SYMBOL(cuio_getptr);
-+
-+
-+static void
-+skb_copy_bits_back(struct sk_buff *skb, int offset, caddr_t cp, int len)
-+{
-+	int i;
-+	if (offset < skb_headlen(skb)) {
-+		memcpy(skb->data + offset, cp, min_t(int, skb_headlen(skb), len));
-+		len -= skb_headlen(skb);
-+		cp += skb_headlen(skb);
-+	}
-+	offset -= skb_headlen(skb);
-+	for (i = 0; len > 0 && i < skb_shinfo(skb)->nr_frags; i++) {
-+		if (offset < skb_shinfo(skb)->frags[i].size) {
-+			memcpy(page_address(skb_shinfo(skb)->frags[i].page) +
-+					skb_shinfo(skb)->frags[i].page_offset,
-+					cp, min_t(int, skb_shinfo(skb)->frags[i].size, len));
-+			len -= skb_shinfo(skb)->frags[i].size;
-+			cp += skb_shinfo(skb)->frags[i].size;
-+		}
-+		offset -= skb_shinfo(skb)->frags[i].size;
-+	}
-+}
-+
-+void
-+crypto_copyback(int flags, caddr_t buf, int off, int size, caddr_t in)
-+{
-+
-+	if ((flags & CRYPTO_F_SKBUF) != 0)
-+		skb_copy_bits_back((struct sk_buff *)buf, off, in, size);
-+	else if ((flags & CRYPTO_F_IOV) != 0)
-+		cuio_copyback((struct uio *)buf, off, size, in);
-+	else
-+		bcopy(in, buf + off, size);
-+}
-+
-+void
-+crypto_copydata(int flags, caddr_t buf, int off, int size, caddr_t out)
-+{
-+
-+	if ((flags & CRYPTO_F_SKBUF) != 0)
-+		skb_copy_bits((struct sk_buff *)buf, off, out, size);
-+	else if ((flags & CRYPTO_F_IOV) != 0)
-+		cuio_copydata((struct uio *)buf, off, size, out);
-+	else
-+		bcopy(buf + off, out, size);
-+}
-+
-+int
-+crypto_apply(int flags, caddr_t buf, int off, int len,
-+    int (*f)(void *, void *, u_int), void *arg)
-+{
-+#if 0
-+	int error;
-+
-+	if ((flags & CRYPTO_F_SKBUF) != 0)
-+		error = XXXXXX((struct mbuf *)buf, off, len, f, arg);
-+	else if ((flags & CRYPTO_F_IOV) != 0)
-+		error = cuio_apply((struct uio *)buf, off, len, f, arg);
-+	else
-+		error = (*f)(arg, buf + off, len);
-+	return (error);
-+#else
-+	KASSERT(0, ("crypto_apply not implemented!\n"));
-+#endif
-+	return 0;
-+}
-+
-+EXPORT_SYMBOL(crypto_copyback);
-+EXPORT_SYMBOL(crypto_copydata);
-+EXPORT_SYMBOL(crypto_apply);
-+
-diff --git a/crypto/ocf/crypto.c b/crypto/ocf/crypto.c
-new file mode 100644
-index 0000000..9e60ac9
---- /dev/null
-+++ b/crypto/ocf/crypto.c
-@@ -0,0 +1,1784 @@
-+/*-
-+ * Linux port done by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ * The license and original author are listed below.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * Copyright (c) 2002-2006 Sam Leffler.  All rights reserved.
-+ *
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#if 0
-+#include <sys/cdefs.h>
-+__FBSDID("$FreeBSD: src/sys/opencrypto/crypto.c,v 1.27 2007/03/21 03:42:51 sam Exp $");
-+#endif
-+
-+/*
-+ * Cryptographic Subsystem.
-+ *
-+ * This code is derived from the Openbsd Cryptographic Framework (OCF)
-+ * that has the copyright shown below.  Very little of the original
-+ * code remains.
-+ */
-+/*-
-+ * The author of this code is Angelos D. Keromytis (angelos at cis.upenn.edu)
-+ *
-+ * This code was written by Angelos D. Keromytis in Athens, Greece, in
-+ * February 2000. Network Security Technologies Inc. (NSTI) kindly
-+ * supported the development of this code.
-+ *
-+ * Copyright (c) 2000, 2001 Angelos D. Keromytis
-+ *
-+ * Permission to use, copy, and modify this software with or without fee
-+ * is hereby granted, provided that this entire notice is included in
-+ * all source code copies of any software which is or includes a copy or
-+ * modification of this software.
-+ *
-+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
-+ * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
-+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
-+ * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
-+ * PURPOSE.
-+ *
-+__FBSDID("$FreeBSD: src/sys/opencrypto/crypto.c,v 1.16 2005/01/07 02:29:16 imp Exp $");
-+ */
-+
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/slab.h>
-+#include <linux/wait.h>
-+#include <linux/sched.h>
-+#include <linux/spinlock.h>
-+#include <linux/version.h>
-+#include <crypto/cryptodev.h>
-+
-+/*
-+ * keep track of whether or not we have been initialised, a big
-+ * issue if we are linked into the kernel and a driver gets started before
-+ * us
-+ */
-+static int crypto_initted = 0;
-+
-+/*
-+ * Crypto drivers register themselves by allocating a slot in the
-+ * crypto_drivers table with crypto_get_driverid() and then registering
-+ * each algorithm they support with crypto_register() and crypto_kregister().
-+ */
-+
-+/*
-+ * lock on driver table
-+ * we track its state as spin_is_locked does not do anything on non-SMP boxes
-+ */
-+static spinlock_t	crypto_drivers_lock;
-+static int			crypto_drivers_locked;		/* for non-SMP boxes */
-+
-+#define	CRYPTO_DRIVER_LOCK() \
-+			({ \
-+				spin_lock_irqsave(&crypto_drivers_lock, d_flags); \
-+			 	crypto_drivers_locked = 1; \
-+				dprintk("%s,%d: DRIVER_LOCK()\n", __FILE__, __LINE__); \
-+			 })
-+#define	CRYPTO_DRIVER_UNLOCK() \
-+			({ \
-+			 	dprintk("%s,%d: DRIVER_UNLOCK()\n", __FILE__, __LINE__); \
-+			 	crypto_drivers_locked = 0; \
-+				spin_unlock_irqrestore(&crypto_drivers_lock, d_flags); \
-+			 })
-+#define	CRYPTO_DRIVER_ASSERT() \
-+			({ \
-+			 	if (!crypto_drivers_locked) { \
-+					dprintk("%s,%d: DRIVER_ASSERT!\n", __FILE__, __LINE__); \
-+			 	} \
-+			 })
-+
-+/*
-+ * Crypto device/driver capabilities structure.
-+ *
-+ * Synchronization:
-+ * (d) - protected by CRYPTO_DRIVER_LOCK()
-+ * (q) - protected by CRYPTO_Q_LOCK()
-+ * Not tagged fields are read-only.
-+ */
-+struct cryptocap {
-+	device_t	cc_dev;			/* (d) device/driver */
-+	u_int32_t	cc_sessions;		/* (d) # of sessions */
-+	u_int32_t	cc_koperations;		/* (d) # os asym operations */
-+	/*
-+	 * Largest possible operator length (in bits) for each type of
-+	 * encryption algorithm. XXX not used
-+	 */
-+	u_int16_t	cc_max_op_len[CRYPTO_ALGORITHM_MAX + 1];
-+	u_int8_t	cc_alg[CRYPTO_ALGORITHM_MAX + 1];
-+	u_int8_t	cc_kalg[CRK_ALGORITHM_MAX + 1];
-+
-+	int		cc_flags;		/* (d) flags */
-+#define CRYPTOCAP_F_CLEANUP	0x80000000	/* needs resource cleanup */
-+	int		cc_qblocked;		/* (q) symmetric q blocked */
-+	int		cc_kqblocked;		/* (q) asymmetric q blocked */
-+
-+	int		cc_unqblocked;		/* (q) symmetric q blocked */
-+	int		cc_unkqblocked;		/* (q) asymmetric q blocked */
-+};
-+static struct cryptocap *crypto_drivers = NULL;
-+static int crypto_drivers_num = 0;
-+
-+/*
-+ * There are two queues for crypto requests; one for symmetric (e.g.
-+ * cipher) operations and one for asymmetric (e.g. MOD)operations.
-+ * A single mutex is used to lock access to both queues.  We could
-+ * have one per-queue but having one simplifies handling of block/unblock
-+ * operations.
-+ */
-+static	int crp_sleep = 0;
-+static LIST_HEAD(crp_q);		/* request queues */
-+static LIST_HEAD(crp_kq);
-+
-+static spinlock_t crypto_q_lock;
-+
-+int crypto_all_qblocked = 0;  /* protect with Q_LOCK */
-+module_param(crypto_all_qblocked, int, 0444);
-+MODULE_PARM_DESC(crypto_all_qblocked, "Are all crypto queues blocked");
-+
-+int crypto_all_kqblocked = 0; /* protect with Q_LOCK */
-+module_param(crypto_all_kqblocked, int, 0444);
-+MODULE_PARM_DESC(crypto_all_kqblocked, "Are all asym crypto queues blocked");
-+
-+#define	CRYPTO_Q_LOCK() \
-+			({ \
-+				spin_lock_irqsave(&crypto_q_lock, q_flags); \
-+			 	dprintk("%s,%d: Q_LOCK()\n", __FILE__, __LINE__); \
-+			 })
-+#define	CRYPTO_Q_UNLOCK() \
-+			({ \
-+			 	dprintk("%s,%d: Q_UNLOCK()\n", __FILE__, __LINE__); \
-+				spin_unlock_irqrestore(&crypto_q_lock, q_flags); \
-+			 })
-+
-+/*
-+ * There are two queues for processing completed crypto requests; one
-+ * for the symmetric and one for the asymmetric ops.  We only need one
-+ * but have two to avoid type futzing (cryptop vs. cryptkop).  A single
-+ * mutex is used to lock access to both queues.  Note that this lock
-+ * must be separate from the lock on request queues to insure driver
-+ * callbacks don't generate lock order reversals.
-+ */
-+static LIST_HEAD(crp_ret_q);		/* callback queues */
-+static LIST_HEAD(crp_ret_kq);
-+
-+static spinlock_t crypto_ret_q_lock;
-+#define	CRYPTO_RETQ_LOCK() \
-+			({ \
-+				spin_lock_irqsave(&crypto_ret_q_lock, r_flags); \
-+				dprintk("%s,%d: RETQ_LOCK\n", __FILE__, __LINE__); \
-+			 })
-+#define	CRYPTO_RETQ_UNLOCK() \
-+			({ \
-+			 	dprintk("%s,%d: RETQ_UNLOCK\n", __FILE__, __LINE__); \
-+				spin_unlock_irqrestore(&crypto_ret_q_lock, r_flags); \
-+			 })
-+#define	CRYPTO_RETQ_EMPTY()	(list_empty(&crp_ret_q) && list_empty(&crp_ret_kq))
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-+static kmem_cache_t *cryptop_zone;
-+static kmem_cache_t *cryptodesc_zone;
-+#else
-+static struct kmem_cache *cryptop_zone;
-+static struct kmem_cache *cryptodesc_zone;
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-+#include <linux/sched.h>
-+#define	kill_proc(p,s,v)	send_sig(s,find_task_by_vpid(p),0)
-+#endif
-+
-+#define debug crypto_debug
-+int crypto_debug = 0;
-+module_param(crypto_debug, int, 0644);
-+MODULE_PARM_DESC(crypto_debug, "Enable debug");
-+EXPORT_SYMBOL(crypto_debug);
-+
-+/*
-+ * Maximum number of outstanding crypto requests before we start
-+ * failing requests.  We need this to prevent DOS when too many
-+ * requests are arriving for us to keep up.  Otherwise we will
-+ * run the system out of memory.  Since crypto is slow,  we are
-+ * usually the bottleneck that needs to say, enough is enough.
-+ *
-+ * We cannot print errors when this condition occurs,  we are already too
-+ * slow,  printing anything will just kill us
-+ */
-+
-+static int crypto_q_cnt = 0;
-+module_param(crypto_q_cnt, int, 0444);
-+MODULE_PARM_DESC(crypto_q_cnt,
-+		"Current number of outstanding crypto requests");
-+
-+static int crypto_q_max = 1000;
-+module_param(crypto_q_max, int, 0644);
-+MODULE_PARM_DESC(crypto_q_max,
-+		"Maximum number of outstanding crypto requests");
-+
-+#define bootverbose crypto_verbose
-+static int crypto_verbose = 0;
-+module_param(crypto_verbose, int, 0644);
-+MODULE_PARM_DESC(crypto_verbose,
-+		"Enable verbose crypto startup");
-+
-+int	crypto_usercrypto = 1;	/* userland may do crypto reqs */
-+module_param(crypto_usercrypto, int, 0644);
-+MODULE_PARM_DESC(crypto_usercrypto,
-+	   "Enable/disable user-mode access to crypto support");
-+
-+int	crypto_userasymcrypto = 1;	/* userland may do asym crypto reqs */
-+module_param(crypto_userasymcrypto, int, 0644);
-+MODULE_PARM_DESC(crypto_userasymcrypto,
-+	   "Enable/disable user-mode access to asymmetric crypto support");
-+
-+int	crypto_devallowsoft = 0;	/* only use hardware crypto */
-+module_param(crypto_devallowsoft, int, 0644);
-+MODULE_PARM_DESC(crypto_devallowsoft,
-+	   "Enable/disable use of software crypto support");
-+
-+/*
-+ * This parameter controls the maximum number of crypto operations to 
-+ * do consecutively in the crypto kernel thread before scheduling to allow 
-+ * other processes to run. Without it, it is possible to get into a 
-+ * situation where the crypto thread never allows any other processes to run.
-+ * Default to 1000 which should be less than one second.
-+ */
-+static int crypto_max_loopcount = 1000;
-+module_param(crypto_max_loopcount, int, 0644);
-+MODULE_PARM_DESC(crypto_max_loopcount,
-+	   "Maximum number of crypto ops to do before yielding to other processes");
-+
-+static pid_t	cryptoproc = (pid_t) -1;
-+static struct	completion cryptoproc_exited;
-+static DECLARE_WAIT_QUEUE_HEAD(cryptoproc_wait);
-+static pid_t	cryptoretproc = (pid_t) -1;
-+static struct	completion cryptoretproc_exited;
-+static DECLARE_WAIT_QUEUE_HEAD(cryptoretproc_wait);
-+
-+static	int crypto_proc(void *arg);
-+static	int crypto_ret_proc(void *arg);
-+static	int crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint);
-+static	int crypto_kinvoke(struct cryptkop *krp, int flags);
-+static	void crypto_exit(void);
-+static  int crypto_init(void);
-+
-+static	struct cryptostats cryptostats;
-+
-+static struct cryptocap *
-+crypto_checkdriver(u_int32_t hid)
-+{
-+	if (crypto_drivers == NULL)
-+		return NULL;
-+	return (hid >= crypto_drivers_num ? NULL : &crypto_drivers[hid]);
-+}
-+
-+/*
-+ * Compare a driver's list of supported algorithms against another
-+ * list; return non-zero if all algorithms are supported.
-+ */
-+static int
-+driver_suitable(const struct cryptocap *cap, const struct cryptoini *cri)
-+{
-+	const struct cryptoini *cr;
-+
-+	/* See if all the algorithms are supported. */
-+	for (cr = cri; cr; cr = cr->cri_next)
-+		if (cap->cc_alg[cr->cri_alg] == 0)
-+			return 0;
-+	return 1;
-+}
-+
-+/*
-+ * Select a driver for a new session that supports the specified
-+ * algorithms and, optionally, is constrained according to the flags.
-+ * The algorithm we use here is pretty stupid; just use the
-+ * first driver that supports all the algorithms we need. If there
-+ * are multiple drivers we choose the driver with the fewest active
-+ * sessions.  We prefer hardware-backed drivers to software ones.
-+ *
-+ * XXX We need more smarts here (in real life too, but that's
-+ * XXX another story altogether).
-+ */
-+static struct cryptocap *
-+crypto_select_driver(const struct cryptoini *cri, int flags)
-+{
-+	struct cryptocap *cap, *best;
-+	int match, hid;
-+
-+	CRYPTO_DRIVER_ASSERT();
-+
-+	/*
-+	 * Look first for hardware crypto devices if permitted.
-+	 */
-+	if (flags & CRYPTOCAP_F_HARDWARE)
-+		match = CRYPTOCAP_F_HARDWARE;
-+	else
-+		match = CRYPTOCAP_F_SOFTWARE;
-+	best = NULL;
-+again:
-+	for (hid = 0; hid < crypto_drivers_num; hid++) {
-+		cap = &crypto_drivers[hid];
-+		/*
-+		 * If it's not initialized, is in the process of
-+		 * going away, or is not appropriate (hardware
-+		 * or software based on match), then skip.
-+		 */
-+		if (cap->cc_dev == NULL ||
-+		    (cap->cc_flags & CRYPTOCAP_F_CLEANUP) ||
-+		    (cap->cc_flags & match) == 0)
-+			continue;
-+
-+		/* verify all the algorithms are supported. */
-+		if (driver_suitable(cap, cri)) {
-+			if (best == NULL ||
-+			    cap->cc_sessions < best->cc_sessions)
-+				best = cap;
-+		}
-+	}
-+	if (best != NULL)
-+		return best;
-+	if (match == CRYPTOCAP_F_HARDWARE && (flags & CRYPTOCAP_F_SOFTWARE)) {
-+		/* sort of an Algol 68-style for loop */
-+		match = CRYPTOCAP_F_SOFTWARE;
-+		goto again;
-+	}
-+	return best;
-+}
-+
-+/*
-+ * Create a new session.  The crid argument specifies a crypto
-+ * driver to use or constraints on a driver to select (hardware
-+ * only, software only, either).  Whatever driver is selected
-+ * must be capable of the requested crypto algorithms.
-+ */
-+int
-+crypto_newsession(u_int64_t *sid, struct cryptoini *cri, int crid)
-+{
-+	struct cryptocap *cap;
-+	u_int32_t hid, lid;
-+	int err;
-+	unsigned long d_flags;
-+
-+	CRYPTO_DRIVER_LOCK();
-+	if ((crid & (CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE)) == 0) {
-+		/*
-+		 * Use specified driver; verify it is capable.
-+		 */
-+		cap = crypto_checkdriver(crid);
-+		if (cap != NULL && !driver_suitable(cap, cri))
-+			cap = NULL;
-+	} else {
-+		/*
-+		 * No requested driver; select based on crid flags.
-+		 */
-+		cap = crypto_select_driver(cri, crid);
-+		/*
-+		 * if NULL then can't do everything in one session.
-+		 * XXX Fix this. We need to inject a "virtual" session
-+		 * XXX layer right about here.
-+		 */
-+	}
-+	if (cap != NULL) {
-+		/* Call the driver initialization routine. */
-+		hid = cap - crypto_drivers;
-+		lid = hid;		/* Pass the driver ID. */
-+		cap->cc_sessions++;
-+		CRYPTO_DRIVER_UNLOCK();
-+		err = CRYPTODEV_NEWSESSION(cap->cc_dev, &lid, cri);
-+		CRYPTO_DRIVER_LOCK();
-+		if (err == 0) {
-+			(*sid) = (cap->cc_flags & 0xff000000)
-+			       | (hid & 0x00ffffff);
-+			(*sid) <<= 32;
-+			(*sid) |= (lid & 0xffffffff);
-+		} else
-+			cap->cc_sessions--;
-+	} else
-+		err = EINVAL;
-+	CRYPTO_DRIVER_UNLOCK();
-+	return err;
-+}
-+
-+static void
-+crypto_remove(struct cryptocap *cap)
-+{
-+	CRYPTO_DRIVER_ASSERT();
-+	if (cap->cc_sessions == 0 && cap->cc_koperations == 0)
-+		bzero(cap, sizeof(*cap));
-+}
-+
-+/*
-+ * Delete an existing session (or a reserved session on an unregistered
-+ * driver).
-+ */
-+int
-+crypto_freesession(u_int64_t sid)
-+{
-+	struct cryptocap *cap;
-+	u_int32_t hid;
-+	int err = 0;
-+	unsigned long d_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	CRYPTO_DRIVER_LOCK();
-+
-+	if (crypto_drivers == NULL) {
-+		err = EINVAL;
-+		goto done;
-+	}
-+
-+	/* Determine two IDs. */
-+	hid = CRYPTO_SESID2HID(sid);
-+
-+	if (hid >= crypto_drivers_num) {
-+		dprintk("%s - INVALID DRIVER NUM %d\n", __FUNCTION__, hid);
-+		err = ENOENT;
-+		goto done;
-+	}
-+	cap = &crypto_drivers[hid];
-+
-+	if (cap->cc_dev) {
-+		CRYPTO_DRIVER_UNLOCK();
-+		/* Call the driver cleanup routine, if available, unlocked. */
-+		err = CRYPTODEV_FREESESSION(cap->cc_dev, sid);
-+		CRYPTO_DRIVER_LOCK();
-+	}
-+
-+	if (cap->cc_sessions)
-+		cap->cc_sessions--;
-+
-+	if (cap->cc_flags & CRYPTOCAP_F_CLEANUP)
-+		crypto_remove(cap);
-+
-+done:
-+	CRYPTO_DRIVER_UNLOCK();
-+	return err;
-+}
-+
-+/*
-+ * Return an unused driver id.  Used by drivers prior to registering
-+ * support for the algorithms they handle.
-+ */
-+int32_t
-+crypto_get_driverid(device_t dev, int flags)
-+{
-+	struct cryptocap *newdrv;
-+	int i;
-+	unsigned long d_flags;
-+
-+	if ((flags & (CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE)) == 0) {
-+		printf("%s: no flags specified when registering driver\n",
-+		    device_get_nameunit(dev));
-+		return -1;
-+	}
-+
-+	CRYPTO_DRIVER_LOCK();
-+
-+	for (i = 0; i < crypto_drivers_num; i++) {
-+		if (crypto_drivers[i].cc_dev == NULL &&
-+		    (crypto_drivers[i].cc_flags & CRYPTOCAP_F_CLEANUP) == 0) {
-+			break;
-+		}
-+	}
-+
-+	/* Out of entries, allocate some more. */
-+	if (i == crypto_drivers_num) {
-+		/* Be careful about wrap-around. */
-+		if (2 * crypto_drivers_num <= crypto_drivers_num) {
-+			CRYPTO_DRIVER_UNLOCK();
-+			printk("crypto: driver count wraparound!\n");
-+			return -1;
-+		}
-+
-+		newdrv = kmalloc(2 * crypto_drivers_num * sizeof(struct cryptocap),
-+				GFP_KERNEL);
-+		if (newdrv == NULL) {
-+			CRYPTO_DRIVER_UNLOCK();
-+			printk("crypto: no space to expand driver table!\n");
-+			return -1;
-+		}
-+
-+		memcpy(newdrv, crypto_drivers,
-+				crypto_drivers_num * sizeof(struct cryptocap));
-+		memset(&newdrv[crypto_drivers_num], 0,
-+				crypto_drivers_num * sizeof(struct cryptocap));
-+
-+		crypto_drivers_num *= 2;
-+
-+		kfree(crypto_drivers);
-+		crypto_drivers = newdrv;
-+	}
-+
-+	/* NB: state is zero'd on free */
-+	crypto_drivers[i].cc_sessions = 1;	/* Mark */
-+	crypto_drivers[i].cc_dev = dev;
-+	crypto_drivers[i].cc_flags = flags;
-+	if (bootverbose)
-+		printf("crypto: assign %s driver id %u, flags %u\n",
-+		    device_get_nameunit(dev), i, flags);
-+
-+	CRYPTO_DRIVER_UNLOCK();
-+
-+	return i;
-+}
-+
-+/*
-+ * Lookup a driver by name.  We match against the full device
-+ * name and unit, and against just the name.  The latter gives
-+ * us a simple widlcarding by device name.  On success return the
-+ * driver/hardware identifier; otherwise return -1.
-+ */
-+int
-+crypto_find_driver(const char *match)
-+{
-+	int i, len = strlen(match);
-+	unsigned long d_flags;
-+
-+	CRYPTO_DRIVER_LOCK();
-+	for (i = 0; i < crypto_drivers_num; i++) {
-+		device_t dev = crypto_drivers[i].cc_dev;
-+		if (dev == NULL ||
-+		    (crypto_drivers[i].cc_flags & CRYPTOCAP_F_CLEANUP))
-+			continue;
-+		if (strncmp(match, device_get_nameunit(dev), len) == 0 ||
-+		    strncmp(match, device_get_name(dev), len) == 0)
-+			break;
-+	}
-+	CRYPTO_DRIVER_UNLOCK();
-+	return i < crypto_drivers_num ? i : -1;
-+}
-+
-+/*
-+ * Return the device_t for the specified driver or NULL
-+ * if the driver identifier is invalid.
-+ */
-+device_t
-+crypto_find_device_byhid(int hid)
-+{
-+	struct cryptocap *cap = crypto_checkdriver(hid);
-+	return cap != NULL ? cap->cc_dev : NULL;
-+}
-+
-+/*
-+ * Return the device/driver capabilities.
-+ */
-+int
-+crypto_getcaps(int hid)
-+{
-+	struct cryptocap *cap = crypto_checkdriver(hid);
-+	return cap != NULL ? cap->cc_flags : 0;
-+}
-+
-+/*
-+ * Register support for a key-related algorithm.  This routine
-+ * is called once for each algorithm supported a driver.
-+ */
-+int
-+crypto_kregister(u_int32_t driverid, int kalg, u_int32_t flags)
-+{
-+	struct cryptocap *cap;
-+	int err;
-+	unsigned long d_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	CRYPTO_DRIVER_LOCK();
-+
-+	cap = crypto_checkdriver(driverid);
-+	if (cap != NULL &&
-+	    (CRK_ALGORITM_MIN <= kalg && kalg <= CRK_ALGORITHM_MAX)) {
-+		/*
-+		 * XXX Do some performance testing to determine placing.
-+		 * XXX We probably need an auxiliary data structure that
-+		 * XXX describes relative performances.
-+		 */
-+
-+		cap->cc_kalg[kalg] = flags | CRYPTO_ALG_FLAG_SUPPORTED;
-+		if (bootverbose)
-+			printf("crypto: %s registers key alg %u flags %u\n"
-+				, device_get_nameunit(cap->cc_dev)
-+				, kalg
-+				, flags
-+			);
-+		err = 0;
-+	} else
-+		err = EINVAL;
-+
-+	CRYPTO_DRIVER_UNLOCK();
-+	return err;
-+}
-+
-+/*
-+ * Register support for a non-key-related algorithm.  This routine
-+ * is called once for each such algorithm supported by a driver.
-+ */
-+int
-+crypto_register(u_int32_t driverid, int alg, u_int16_t maxoplen,
-+    u_int32_t flags)
-+{
-+	struct cryptocap *cap;
-+	int err;
-+	unsigned long d_flags;
-+
-+	dprintk("%s(id=0x%x, alg=%d, maxoplen=%d, flags=0x%x)\n", __FUNCTION__,
-+			driverid, alg, maxoplen, flags);
-+
-+	CRYPTO_DRIVER_LOCK();
-+
-+	cap = crypto_checkdriver(driverid);
-+	/* NB: algorithms are in the range [1..max] */
-+	if (cap != NULL &&
-+	    (CRYPTO_ALGORITHM_MIN <= alg && alg <= CRYPTO_ALGORITHM_MAX)) {
-+		/*
-+		 * XXX Do some performance testing to determine placing.
-+		 * XXX We probably need an auxiliary data structure that
-+		 * XXX describes relative performances.
-+		 */
-+
-+		cap->cc_alg[alg] = flags | CRYPTO_ALG_FLAG_SUPPORTED;
-+		cap->cc_max_op_len[alg] = maxoplen;
-+		if (bootverbose)
-+			printf("crypto: %s registers alg %u flags %u maxoplen %u\n"
-+				, device_get_nameunit(cap->cc_dev)
-+				, alg
-+				, flags
-+				, maxoplen
-+			);
-+		cap->cc_sessions = 0;		/* Unmark */
-+		err = 0;
-+	} else
-+		err = EINVAL;
-+
-+	CRYPTO_DRIVER_UNLOCK();
-+	return err;
-+}
-+
-+static void
-+driver_finis(struct cryptocap *cap)
-+{
-+	u_int32_t ses, kops;
-+
-+	CRYPTO_DRIVER_ASSERT();
-+
-+	ses = cap->cc_sessions;
-+	kops = cap->cc_koperations;
-+	bzero(cap, sizeof(*cap));
-+	if (ses != 0 || kops != 0) {
-+		/*
-+		 * If there are pending sessions,
-+		 * just mark as invalid.
-+		 */
-+		cap->cc_flags |= CRYPTOCAP_F_CLEANUP;
-+		cap->cc_sessions = ses;
-+		cap->cc_koperations = kops;
-+	}
-+}
-+
-+/*
-+ * Unregister a crypto driver. If there are pending sessions using it,
-+ * leave enough information around so that subsequent calls using those
-+ * sessions will correctly detect the driver has been unregistered and
-+ * reroute requests.
-+ */
-+int
-+crypto_unregister(u_int32_t driverid, int alg)
-+{
-+	struct cryptocap *cap;
-+	int i, err;
-+	unsigned long d_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	CRYPTO_DRIVER_LOCK();
-+
-+	cap = crypto_checkdriver(driverid);
-+	if (cap != NULL &&
-+	    (CRYPTO_ALGORITHM_MIN <= alg && alg <= CRYPTO_ALGORITHM_MAX) &&
-+	    cap->cc_alg[alg] != 0) {
-+		cap->cc_alg[alg] = 0;
-+		cap->cc_max_op_len[alg] = 0;
-+
-+		/* Was this the last algorithm ? */
-+		for (i = 1; i <= CRYPTO_ALGORITHM_MAX; i++)
-+			if (cap->cc_alg[i] != 0)
-+				break;
-+
-+		if (i == CRYPTO_ALGORITHM_MAX + 1)
-+			driver_finis(cap);
-+		err = 0;
-+	} else
-+		err = EINVAL;
-+	CRYPTO_DRIVER_UNLOCK();
-+	return err;
-+}
-+
-+/*
-+ * Unregister all algorithms associated with a crypto driver.
-+ * If there are pending sessions using it, leave enough information
-+ * around so that subsequent calls using those sessions will
-+ * correctly detect the driver has been unregistered and reroute
-+ * requests.
-+ */
-+int
-+crypto_unregister_all(u_int32_t driverid)
-+{
-+	struct cryptocap *cap;
-+	int err;
-+	unsigned long d_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	CRYPTO_DRIVER_LOCK();
-+	cap = crypto_checkdriver(driverid);
-+	if (cap != NULL) {
-+		driver_finis(cap);
-+		err = 0;
-+	} else
-+		err = EINVAL;
-+	CRYPTO_DRIVER_UNLOCK();
-+
-+	return err;
-+}
-+
-+/*
-+ * Clear blockage on a driver.  The what parameter indicates whether
-+ * the driver is now ready for cryptop's and/or cryptokop's.
-+ */
-+int
-+crypto_unblock(u_int32_t driverid, int what)
-+{
-+	struct cryptocap *cap;
-+	int err;
-+	unsigned long q_flags;
-+
-+	CRYPTO_Q_LOCK();
-+	cap = crypto_checkdriver(driverid);
-+	if (cap != NULL) {
-+		if (what & CRYPTO_SYMQ) {
-+			cap->cc_qblocked = 0;
-+			cap->cc_unqblocked = 0;
-+			crypto_all_qblocked = 0;
-+		}
-+		if (what & CRYPTO_ASYMQ) {
-+			cap->cc_kqblocked = 0;
-+			cap->cc_unkqblocked = 0;
-+			crypto_all_kqblocked = 0;
-+		}
-+		if (crp_sleep)
-+			wake_up_interruptible(&cryptoproc_wait);
-+		err = 0;
-+	} else
-+		err = EINVAL;
-+	CRYPTO_Q_UNLOCK(); //DAVIDM should this be a driver lock
-+
-+	return err;
-+}
-+
-+/*
-+ * Add a crypto request to a queue, to be processed by the kernel thread.
-+ */
-+int
-+crypto_dispatch(struct cryptop *crp)
-+{
-+	struct cryptocap *cap;
-+	int result = -1;
-+	unsigned long q_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+
-+	cryptostats.cs_ops++;
-+
-+	CRYPTO_Q_LOCK();
-+	if (crypto_q_cnt >= crypto_q_max) {
-+		CRYPTO_Q_UNLOCK();
-+		cryptostats.cs_drops++;
-+		return ENOMEM;
-+	}
-+	crypto_q_cnt++;
-+
-+	/* make sure we are starting a fresh run on this crp. */
-+	crp->crp_flags &= ~CRYPTO_F_DONE;
-+	crp->crp_etype = 0;
-+
-+	/*
-+	 * Caller marked the request to be processed immediately; dispatch
-+	 * it directly to the driver unless the driver is currently blocked.
-+	 */
-+	if ((crp->crp_flags & CRYPTO_F_BATCH) == 0) {
-+		int hid = CRYPTO_SESID2HID(crp->crp_sid);
-+		cap = crypto_checkdriver(hid);
-+		/* Driver cannot disappear when there is an active session. */
-+		KASSERT(cap != NULL, ("%s: Driver disappeared.", __func__));
-+		if (!cap->cc_qblocked) {
-+			crypto_all_qblocked = 0;
-+			crypto_drivers[hid].cc_unqblocked = 1;
-+			CRYPTO_Q_UNLOCK();
-+			result = crypto_invoke(cap, crp, 0);
-+			CRYPTO_Q_LOCK();
-+			if (result == ERESTART)
-+				if (crypto_drivers[hid].cc_unqblocked)
-+					crypto_drivers[hid].cc_qblocked = 1;
-+			crypto_drivers[hid].cc_unqblocked = 0;
-+		}
-+	}
-+	if (result == ERESTART) {
-+		/*
-+		 * The driver ran out of resources, mark the
-+		 * driver ``blocked'' for cryptop's and put
-+		 * the request back in the queue.  It would
-+		 * best to put the request back where we got
-+		 * it but that's hard so for now we put it
-+		 * at the front.  This should be ok; putting
-+		 * it at the end does not work.
-+		 */
-+		list_add(&crp->crp_next, &crp_q);
-+		cryptostats.cs_blocks++;
-+		result = 0;
-+	} else if (result == -1) {
-+		TAILQ_INSERT_TAIL(&crp_q, crp, crp_next);
-+		result = 0;
-+	}
-+	if (crp_sleep)
-+		wake_up_interruptible(&cryptoproc_wait);
-+	CRYPTO_Q_UNLOCK();
-+	return result;
-+}
-+
-+/*
-+ * Add an asymetric crypto request to a queue,
-+ * to be processed by the kernel thread.
-+ */
-+int
-+crypto_kdispatch(struct cryptkop *krp)
-+{
-+	int error;
-+	unsigned long q_flags;
-+
-+	cryptostats.cs_kops++;
-+
-+	error = crypto_kinvoke(krp, krp->krp_crid);
-+	if (error == ERESTART) {
-+		CRYPTO_Q_LOCK();
-+		TAILQ_INSERT_TAIL(&crp_kq, krp, krp_next);
-+		if (crp_sleep)
-+			wake_up_interruptible(&cryptoproc_wait);
-+		CRYPTO_Q_UNLOCK();
-+		error = 0;
-+	}
-+	return error;
-+}
-+
-+/*
-+ * Verify a driver is suitable for the specified operation.
-+ */
-+static __inline int
-+kdriver_suitable(const struct cryptocap *cap, const struct cryptkop *krp)
-+{
-+	return (cap->cc_kalg[krp->krp_op] & CRYPTO_ALG_FLAG_SUPPORTED) != 0;
-+}
-+
-+/*
-+ * Select a driver for an asym operation.  The driver must
-+ * support the necessary algorithm.  The caller can constrain
-+ * which device is selected with the flags parameter.  The
-+ * algorithm we use here is pretty stupid; just use the first
-+ * driver that supports the algorithms we need. If there are
-+ * multiple suitable drivers we choose the driver with the
-+ * fewest active operations.  We prefer hardware-backed
-+ * drivers to software ones when either may be used.
-+ */
-+static struct cryptocap *
-+crypto_select_kdriver(const struct cryptkop *krp, int flags)
-+{
-+	struct cryptocap *cap, *best, *blocked;
-+	int match, hid;
-+
-+	CRYPTO_DRIVER_ASSERT();
-+
-+	/*
-+	 * Look first for hardware crypto devices if permitted.
-+	 */
-+	if (flags & CRYPTOCAP_F_HARDWARE)
-+		match = CRYPTOCAP_F_HARDWARE;
-+	else
-+		match = CRYPTOCAP_F_SOFTWARE;
-+	best = NULL;
-+	blocked = NULL;
-+again:
-+	for (hid = 0; hid < crypto_drivers_num; hid++) {
-+		cap = &crypto_drivers[hid];
-+		/*
-+		 * If it's not initialized, is in the process of
-+		 * going away, or is not appropriate (hardware
-+		 * or software based on match), then skip.
-+		 */
-+		if (cap->cc_dev == NULL ||
-+		    (cap->cc_flags & CRYPTOCAP_F_CLEANUP) ||
-+		    (cap->cc_flags & match) == 0)
-+			continue;
-+
-+		/* verify all the algorithms are supported. */
-+		if (kdriver_suitable(cap, krp)) {
-+			if (best == NULL ||
-+			    cap->cc_koperations < best->cc_koperations)
-+				best = cap;
-+		}
-+	}
-+	if (best != NULL)
-+		return best;
-+	if (match == CRYPTOCAP_F_HARDWARE && (flags & CRYPTOCAP_F_SOFTWARE)) {
-+		/* sort of an Algol 68-style for loop */
-+		match = CRYPTOCAP_F_SOFTWARE;
-+		goto again;
-+	}
-+	return best;
-+}
-+
-+/*
-+ * Dispatch an assymetric crypto request.
-+ */
-+static int
-+crypto_kinvoke(struct cryptkop *krp, int crid)
-+{
-+	struct cryptocap *cap = NULL;
-+	int error;
-+	unsigned long d_flags;
-+
-+	KASSERT(krp != NULL, ("%s: krp == NULL", __func__));
-+	KASSERT(krp->krp_callback != NULL,
-+	    ("%s: krp->crp_callback == NULL", __func__));
-+
-+	CRYPTO_DRIVER_LOCK();
-+	if ((crid & (CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE)) == 0) {
-+		cap = crypto_checkdriver(crid);
-+		if (cap != NULL) {
-+			/*
-+			 * Driver present, it must support the necessary
-+			 * algorithm and, if s/w drivers are excluded,
-+			 * it must be registered as hardware-backed.
-+			 */
-+			if (!kdriver_suitable(cap, krp) ||
-+			    (!crypto_devallowsoft &&
-+			     (cap->cc_flags & CRYPTOCAP_F_HARDWARE) == 0))
-+				cap = NULL;
-+		}
-+	} else {
-+		/*
-+		 * No requested driver; select based on crid flags.
-+		 */
-+		if (!crypto_devallowsoft)	/* NB: disallow s/w drivers */
-+			crid &= ~CRYPTOCAP_F_SOFTWARE;
-+		cap = crypto_select_kdriver(krp, crid);
-+	}
-+	if (cap != NULL && !cap->cc_kqblocked) {
-+		krp->krp_hid = cap - crypto_drivers;
-+		cap->cc_koperations++;
-+		CRYPTO_DRIVER_UNLOCK();
-+		error = CRYPTODEV_KPROCESS(cap->cc_dev, krp, 0);
-+		CRYPTO_DRIVER_LOCK();
-+		if (error == ERESTART) {
-+			cap->cc_koperations--;
-+			CRYPTO_DRIVER_UNLOCK();
-+			return (error);
-+		}
-+		/* return the actual device used */
-+		krp->krp_crid = krp->krp_hid;
-+	} else {
-+		/*
-+		 * NB: cap is !NULL if device is blocked; in
-+		 *     that case return ERESTART so the operation
-+		 *     is resubmitted if possible.
-+		 */
-+		error = (cap == NULL) ? ENODEV : ERESTART;
-+	}
-+	CRYPTO_DRIVER_UNLOCK();
-+
-+	if (error) {
-+		krp->krp_status = error;
-+		crypto_kdone(krp);
-+	}
-+	return 0;
-+}
-+
-+
-+/*
-+ * Dispatch a crypto request to the appropriate crypto devices.
-+ */
-+static int
-+crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint)
-+{
-+	KASSERT(crp != NULL, ("%s: crp == NULL", __func__));
-+	KASSERT(crp->crp_callback != NULL,
-+	    ("%s: crp->crp_callback == NULL", __func__));
-+	KASSERT(crp->crp_desc != NULL, ("%s: crp->crp_desc == NULL", __func__));
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+
-+#ifdef CRYPTO_TIMING
-+	if (crypto_timing)
-+		crypto_tstat(&cryptostats.cs_invoke, &crp->crp_tstamp);
-+#endif
-+	if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) {
-+		struct cryptodesc *crd;
-+		u_int64_t nid;
-+
-+		/*
-+		 * Driver has unregistered; migrate the session and return
-+		 * an error to the caller so they'll resubmit the op.
-+		 *
-+		 * XXX: What if there are more already queued requests for this
-+		 *      session?
-+		 */
-+		crypto_freesession(crp->crp_sid);
-+
-+		for (crd = crp->crp_desc; crd->crd_next; crd = crd->crd_next)
-+			crd->CRD_INI.cri_next = &(crd->crd_next->CRD_INI);
-+
-+		/* XXX propagate flags from initial session? */
-+		if (crypto_newsession(&nid, &(crp->crp_desc->CRD_INI),
-+		    CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE) == 0)
-+			crp->crp_sid = nid;
-+
-+		crp->crp_etype = EAGAIN;
-+		crypto_done(crp);
-+		return 0;
-+	} else {
-+		/*
-+		 * Invoke the driver to process the request.
-+		 */
-+		return CRYPTODEV_PROCESS(cap->cc_dev, crp, hint);
-+	}
-+}
-+
-+/*
-+ * Release a set of crypto descriptors.
-+ */
-+void
-+crypto_freereq(struct cryptop *crp)
-+{
-+	struct cryptodesc *crd;
-+
-+	if (crp == NULL)
-+		return;
-+
-+#ifdef DIAGNOSTIC
-+	{
-+		struct cryptop *crp2;
-+		unsigned long q_flags;
-+
-+		CRYPTO_Q_LOCK();
-+		TAILQ_FOREACH(crp2, &crp_q, crp_next) {
-+			KASSERT(crp2 != crp,
-+			    ("Freeing cryptop from the crypto queue (%p).",
-+			    crp));
-+		}
-+		CRYPTO_Q_UNLOCK();
-+		CRYPTO_RETQ_LOCK();
-+		TAILQ_FOREACH(crp2, &crp_ret_q, crp_next) {
-+			KASSERT(crp2 != crp,
-+			    ("Freeing cryptop from the return queue (%p).",
-+			    crp));
-+		}
-+		CRYPTO_RETQ_UNLOCK();
-+	}
-+#endif
-+
-+	while ((crd = crp->crp_desc) != NULL) {
-+		crp->crp_desc = crd->crd_next;
-+		kmem_cache_free(cryptodesc_zone, crd);
-+	}
-+	kmem_cache_free(cryptop_zone, crp);
-+}
-+
-+/*
-+ * Acquire a set of crypto descriptors.
-+ */
-+struct cryptop *
-+crypto_getreq(int num)
-+{
-+	struct cryptodesc *crd;
-+	struct cryptop *crp;
-+
-+	crp = kmem_cache_alloc(cryptop_zone, SLAB_ATOMIC);
-+	if (crp != NULL) {
-+		memset(crp, 0, sizeof(*crp));
-+		INIT_LIST_HEAD(&crp->crp_next);
-+		init_waitqueue_head(&crp->crp_waitq);
-+		while (num--) {
-+			crd = kmem_cache_alloc(cryptodesc_zone, SLAB_ATOMIC);
-+			if (crd == NULL) {
-+				crypto_freereq(crp);
-+				return NULL;
-+			}
-+			memset(crd, 0, sizeof(*crd));
-+			crd->crd_next = crp->crp_desc;
-+			crp->crp_desc = crd;
-+		}
-+	}
-+	return crp;
-+}
-+
-+/*
-+ * Invoke the callback on behalf of the driver.
-+ */
-+void
-+crypto_done(struct cryptop *crp)
-+{
-+	unsigned long q_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if ((crp->crp_flags & CRYPTO_F_DONE) == 0) {
-+		crp->crp_flags |= CRYPTO_F_DONE;
-+		CRYPTO_Q_LOCK();
-+		crypto_q_cnt--;
-+		CRYPTO_Q_UNLOCK();
-+	} else
-+		printk("crypto: crypto_done op already done, flags 0x%x",
-+				crp->crp_flags);
-+	if (crp->crp_etype != 0)
-+		cryptostats.cs_errs++;
-+	/*
-+	 * CBIMM means unconditionally do the callback immediately;
-+	 * CBIFSYNC means do the callback immediately only if the
-+	 * operation was done synchronously.  Both are used to avoid
-+	 * doing extraneous context switches; the latter is mostly
-+	 * used with the software crypto driver.
-+	 */
-+	if ((crp->crp_flags & CRYPTO_F_CBIMM) ||
-+	    ((crp->crp_flags & CRYPTO_F_CBIFSYNC) &&
-+	     (CRYPTO_SESID2CAPS(crp->crp_sid) & CRYPTOCAP_F_SYNC))) {
-+		/*
-+		 * Do the callback directly.  This is ok when the
-+		 * callback routine does very little (e.g. the
-+		 * /dev/crypto callback method just does a wakeup).
-+		 */
-+		crp->crp_callback(crp);
-+	} else {
-+		unsigned long r_flags;
-+		/*
-+		 * Normal case; queue the callback for the thread.
-+		 */
-+		CRYPTO_RETQ_LOCK();
-+		if (CRYPTO_RETQ_EMPTY())
-+			wake_up_interruptible(&cryptoretproc_wait);/* shared wait channel */
-+		TAILQ_INSERT_TAIL(&crp_ret_q, crp, crp_next);
-+		CRYPTO_RETQ_UNLOCK();
-+	}
-+}
-+
-+/*
-+ * Invoke the callback on behalf of the driver.
-+ */
-+void
-+crypto_kdone(struct cryptkop *krp)
-+{
-+	struct cryptocap *cap;
-+	unsigned long d_flags;
-+
-+	if ((krp->krp_flags & CRYPTO_KF_DONE) != 0)
-+		printk("crypto: crypto_kdone op already done, flags 0x%x",
-+				krp->krp_flags);
-+	krp->krp_flags |= CRYPTO_KF_DONE;
-+	if (krp->krp_status != 0)
-+		cryptostats.cs_kerrs++;
-+
-+	CRYPTO_DRIVER_LOCK();
-+	/* XXX: What if driver is loaded in the meantime? */
-+	if (krp->krp_hid < crypto_drivers_num) {
-+		cap = &crypto_drivers[krp->krp_hid];
-+		cap->cc_koperations--;
-+		KASSERT(cap->cc_koperations >= 0, ("cc_koperations < 0"));
-+		if (cap->cc_flags & CRYPTOCAP_F_CLEANUP)
-+			crypto_remove(cap);
-+	}
-+	CRYPTO_DRIVER_UNLOCK();
-+
-+	/*
-+	 * CBIMM means unconditionally do the callback immediately;
-+	 * This is used to avoid doing extraneous context switches
-+	 */
-+	if ((krp->krp_flags & CRYPTO_KF_CBIMM)) {
-+		/*
-+		 * Do the callback directly.  This is ok when the
-+		 * callback routine does very little (e.g. the
-+		 * /dev/crypto callback method just does a wakeup).
-+		 */
-+		krp->krp_callback(krp);
-+	} else {
-+		unsigned long r_flags;
-+		/*
-+		 * Normal case; queue the callback for the thread.
-+		 */
-+		CRYPTO_RETQ_LOCK();
-+		if (CRYPTO_RETQ_EMPTY())
-+			wake_up_interruptible(&cryptoretproc_wait);/* shared wait channel */
-+		TAILQ_INSERT_TAIL(&crp_ret_kq, krp, krp_next);
-+		CRYPTO_RETQ_UNLOCK();
-+	}
-+}
-+
-+int
-+crypto_getfeat(int *featp)
-+{
-+	int hid, kalg, feat = 0;
-+	unsigned long d_flags;
-+
-+	CRYPTO_DRIVER_LOCK();
-+	for (hid = 0; hid < crypto_drivers_num; hid++) {
-+		const struct cryptocap *cap = &crypto_drivers[hid];
-+
-+		if ((cap->cc_flags & CRYPTOCAP_F_SOFTWARE) &&
-+		    !crypto_devallowsoft) {
-+			continue;
-+		}
-+		for (kalg = 0; kalg < CRK_ALGORITHM_MAX; kalg++)
-+			if (cap->cc_kalg[kalg] & CRYPTO_ALG_FLAG_SUPPORTED)
-+				feat |=  1 << kalg;
-+	}
-+	CRYPTO_DRIVER_UNLOCK();
-+	*featp = feat;
-+	return (0);
-+}
-+
-+/*
-+ * Crypto thread, dispatches crypto requests.
-+ */
-+static int
-+crypto_proc(void *arg)
-+{
-+	struct cryptop *crp, *submit;
-+	struct cryptkop *krp, *krpp;
-+	struct cryptocap *cap;
-+	u_int32_t hid;
-+	int result, hint;
-+	unsigned long q_flags;
-+	int loopcount = 0;
-+
-+	ocf_daemonize("crypto");
-+
-+	CRYPTO_Q_LOCK();
-+	for (;;) {
-+		/*
-+		 * we need to make sure we don't get into a busy loop with nothing
-+		 * to do,  the two crypto_all_*blocked vars help us find out when
-+		 * we are all full and can do nothing on any driver or Q.  If so we
-+		 * wait for an unblock.
-+		 */
-+		crypto_all_qblocked  = !list_empty(&crp_q);
-+
-+		/*
-+		 * Find the first element in the queue that can be
-+		 * processed and look-ahead to see if multiple ops
-+		 * are ready for the same driver.
-+		 */
-+		submit = NULL;
-+		hint = 0;
-+		list_for_each_entry(crp, &crp_q, crp_next) {
-+			hid = CRYPTO_SESID2HID(crp->crp_sid);
-+			cap = crypto_checkdriver(hid);
-+			/*
-+			 * Driver cannot disappear when there is an active
-+			 * session.
-+			 */
-+			KASSERT(cap != NULL, ("%s:%u Driver disappeared.",
-+			    __func__, __LINE__));
-+			if (cap == NULL || cap->cc_dev == NULL) {
-+				/* Op needs to be migrated, process it. */
-+				if (submit == NULL)
-+					submit = crp;
-+				break;
-+			}
-+			if (!cap->cc_qblocked) {
-+				if (submit != NULL) {
-+					/*
-+					 * We stop on finding another op,
-+					 * regardless whether its for the same
-+					 * driver or not.  We could keep
-+					 * searching the queue but it might be
-+					 * better to just use a per-driver
-+					 * queue instead.
-+					 */
-+					if (CRYPTO_SESID2HID(submit->crp_sid) == hid)
-+						hint = CRYPTO_HINT_MORE;
-+					break;
-+				} else {
-+					submit = crp;
-+					if ((submit->crp_flags & CRYPTO_F_BATCH) == 0)
-+						break;
-+					/* keep scanning for more are q'd */
-+				}
-+			}
-+		}
-+		if (submit != NULL) {
-+			hid = CRYPTO_SESID2HID(submit->crp_sid);
-+			crypto_all_qblocked = 0;
-+			list_del(&submit->crp_next);
-+			crypto_drivers[hid].cc_unqblocked = 1;
-+			cap = crypto_checkdriver(hid);
-+			CRYPTO_Q_UNLOCK();
-+			KASSERT(cap != NULL, ("%s:%u Driver disappeared.",
-+			    __func__, __LINE__));
-+			result = crypto_invoke(cap, submit, hint);
-+			CRYPTO_Q_LOCK();
-+			if (result == ERESTART) {
-+				/*
-+				 * The driver ran out of resources, mark the
-+				 * driver ``blocked'' for cryptop's and put
-+				 * the request back in the queue.  It would
-+				 * best to put the request back where we got
-+				 * it but that's hard so for now we put it
-+				 * at the front.  This should be ok; putting
-+				 * it at the end does not work.
-+				 */
-+				/* XXX validate sid again? */
-+				list_add(&submit->crp_next, &crp_q);
-+				cryptostats.cs_blocks++;
-+				if (crypto_drivers[hid].cc_unqblocked)
-+					crypto_drivers[hid].cc_qblocked=0;
-+				crypto_drivers[hid].cc_unqblocked=0;
-+			}
-+			crypto_drivers[hid].cc_unqblocked = 0;
-+		}
-+
-+		crypto_all_kqblocked = !list_empty(&crp_kq);
-+
-+		/* As above, but for key ops */
-+		krp = NULL;
-+		list_for_each_entry(krpp, &crp_kq, krp_next) {
-+			cap = crypto_checkdriver(krpp->krp_hid);
-+			if (cap == NULL || cap->cc_dev == NULL) {
-+				/*
-+				 * Operation needs to be migrated, invalidate
-+				 * the assigned device so it will reselect a
-+				 * new one below.  Propagate the original
-+				 * crid selection flags if supplied.
-+				 */
-+				krp->krp_hid = krp->krp_crid &
-+				    (CRYPTOCAP_F_SOFTWARE|CRYPTOCAP_F_HARDWARE);
-+				if (krp->krp_hid == 0)
-+					krp->krp_hid =
-+				    CRYPTOCAP_F_SOFTWARE|CRYPTOCAP_F_HARDWARE;
-+				break;
-+			}
-+			if (!cap->cc_kqblocked) {
-+				krp = krpp;
-+				break;
-+			}
-+		}
-+		if (krp != NULL) {
-+			crypto_all_kqblocked = 0;
-+			list_del(&krp->krp_next);
-+			crypto_drivers[krp->krp_hid].cc_kqblocked = 1;
-+			CRYPTO_Q_UNLOCK();
-+			result = crypto_kinvoke(krp, krp->krp_hid);
-+			CRYPTO_Q_LOCK();
-+			if (result == ERESTART) {
-+				/*
-+				 * The driver ran out of resources, mark the
-+				 * driver ``blocked'' for cryptkop's and put
-+				 * the request back in the queue.  It would
-+				 * best to put the request back where we got
-+				 * it but that's hard so for now we put it
-+				 * at the front.  This should be ok; putting
-+				 * it at the end does not work.
-+				 */
-+				/* XXX validate sid again? */
-+				list_add(&krp->krp_next, &crp_kq);
-+				cryptostats.cs_kblocks++;
-+			} else
-+				crypto_drivers[krp->krp_hid].cc_kqblocked = 0;
-+		}
-+
-+		if (submit == NULL && krp == NULL) {
-+			/*
-+			 * Nothing more to be processed.  Sleep until we're
-+			 * woken because there are more ops to process.
-+			 * This happens either by submission or by a driver
-+			 * becoming unblocked and notifying us through
-+			 * crypto_unblock.  Note that when we wakeup we
-+			 * start processing each queue again from the
-+			 * front. It's not clear that it's important to
-+			 * preserve this ordering since ops may finish
-+			 * out of order if dispatched to different devices
-+			 * and some become blocked while others do not.
-+			 */
-+			dprintk("%s - sleeping (qe=%d qb=%d kqe=%d kqb=%d)\n",
-+					__FUNCTION__,
-+					list_empty(&crp_q), crypto_all_qblocked,
-+					list_empty(&crp_kq), crypto_all_kqblocked);
-+			loopcount = 0;
-+			CRYPTO_Q_UNLOCK();
-+			crp_sleep = 1;
-+			wait_event_interruptible(cryptoproc_wait,
-+					!(list_empty(&crp_q) || crypto_all_qblocked) ||
-+					!(list_empty(&crp_kq) || crypto_all_kqblocked) ||
-+					cryptoproc == (pid_t) -1);
-+			crp_sleep = 0;
-+			if (signal_pending (current)) {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+				spin_lock_irq(&current->sigmask_lock);
-+#endif
-+				flush_signals(current);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+				spin_unlock_irq(&current->sigmask_lock);
-+#endif
-+			}
-+			CRYPTO_Q_LOCK();
-+			dprintk("%s - awake\n", __FUNCTION__);
-+			if (cryptoproc == (pid_t) -1)
-+				break;
-+			cryptostats.cs_intrs++;
-+		} else if (loopcount > crypto_max_loopcount) {
-+			/*
-+			 * Give other processes a chance to run if we've 
-+			 * been using the CPU exclusively for a while.
-+			 */
-+			loopcount = 0;
-+			schedule();
-+		}
-+		loopcount++;
-+	}
-+	CRYPTO_Q_UNLOCK();
-+	complete_and_exit(&cryptoproc_exited, 0);
-+}
-+
-+/*
-+ * Crypto returns thread, does callbacks for processed crypto requests.
-+ * Callbacks are done here, rather than in the crypto drivers, because
-+ * callbacks typically are expensive and would slow interrupt handling.
-+ */
-+static int
-+crypto_ret_proc(void *arg)
-+{
-+	struct cryptop *crpt;
-+	struct cryptkop *krpt;
-+	unsigned long  r_flags;
-+
-+	ocf_daemonize("crypto_ret");
-+
-+	CRYPTO_RETQ_LOCK();
-+	for (;;) {
-+		/* Harvest return q's for completed ops */
-+		crpt = NULL;
-+		if (!list_empty(&crp_ret_q))
-+			crpt = list_entry(crp_ret_q.next, typeof(*crpt), crp_next);
-+		if (crpt != NULL)
-+			list_del(&crpt->crp_next);
-+
-+		krpt = NULL;
-+		if (!list_empty(&crp_ret_kq))
-+			krpt = list_entry(crp_ret_kq.next, typeof(*krpt), krp_next);
-+		if (krpt != NULL)
-+			list_del(&krpt->krp_next);
-+
-+		if (crpt != NULL || krpt != NULL) {
-+			CRYPTO_RETQ_UNLOCK();
-+			/*
-+			 * Run callbacks unlocked.
-+			 */
-+			if (crpt != NULL)
-+				crpt->crp_callback(crpt);
-+			if (krpt != NULL)
-+				krpt->krp_callback(krpt);
-+			CRYPTO_RETQ_LOCK();
-+		} else {
-+			/*
-+			 * Nothing more to be processed.  Sleep until we're
-+			 * woken because there are more returns to process.
-+			 */
-+			dprintk("%s - sleeping\n", __FUNCTION__);
-+			CRYPTO_RETQ_UNLOCK();
-+			wait_event_interruptible(cryptoretproc_wait,
-+					cryptoretproc == (pid_t) -1 ||
-+					!list_empty(&crp_ret_q) ||
-+					!list_empty(&crp_ret_kq));
-+			if (signal_pending (current)) {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+				spin_lock_irq(&current->sigmask_lock);
-+#endif
-+				flush_signals(current);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+				spin_unlock_irq(&current->sigmask_lock);
-+#endif
-+			}
-+			CRYPTO_RETQ_LOCK();
-+			dprintk("%s - awake\n", __FUNCTION__);
-+			if (cryptoretproc == (pid_t) -1) {
-+				dprintk("%s - EXITING!\n", __FUNCTION__);
-+				break;
-+			}
-+			cryptostats.cs_rets++;
-+		}
-+	}
-+	CRYPTO_RETQ_UNLOCK();
-+	complete_and_exit(&cryptoretproc_exited, 0);
-+}
-+
-+
-+#if 0 /* should put this into /proc or something */
-+static void
-+db_show_drivers(void)
-+{
-+	int hid;
-+
-+	db_printf("%12s %4s %4s %8s %2s %2s\n"
-+		, "Device"
-+		, "Ses"
-+		, "Kops"
-+		, "Flags"
-+		, "QB"
-+		, "KB"
-+	);
-+	for (hid = 0; hid < crypto_drivers_num; hid++) {
-+		const struct cryptocap *cap = &crypto_drivers[hid];
-+		if (cap->cc_dev == NULL)
-+			continue;
-+		db_printf("%-12s %4u %4u %08x %2u %2u\n"
-+		    , device_get_nameunit(cap->cc_dev)
-+		    , cap->cc_sessions
-+		    , cap->cc_koperations
-+		    , cap->cc_flags
-+		    , cap->cc_qblocked
-+		    , cap->cc_kqblocked
-+		);
-+	}
-+}
-+
-+DB_SHOW_COMMAND(crypto, db_show_crypto)
-+{
-+	struct cryptop *crp;
-+
-+	db_show_drivers();
-+	db_printf("\n");
-+
-+	db_printf("%4s %8s %4s %4s %4s %4s %8s %8s\n",
-+	    "HID", "Caps", "Ilen", "Olen", "Etype", "Flags",
-+	    "Desc", "Callback");
-+	TAILQ_FOREACH(crp, &crp_q, crp_next) {
-+		db_printf("%4u %08x %4u %4u %4u %04x %8p %8p\n"
-+		    , (int) CRYPTO_SESID2HID(crp->crp_sid)
-+		    , (int) CRYPTO_SESID2CAPS(crp->crp_sid)
-+		    , crp->crp_ilen, crp->crp_olen
-+		    , crp->crp_etype
-+		    , crp->crp_flags
-+		    , crp->crp_desc
-+		    , crp->crp_callback
-+		);
-+	}
-+	if (!TAILQ_EMPTY(&crp_ret_q)) {
-+		db_printf("\n%4s %4s %4s %8s\n",
-+		    "HID", "Etype", "Flags", "Callback");
-+		TAILQ_FOREACH(crp, &crp_ret_q, crp_next) {
-+			db_printf("%4u %4u %04x %8p\n"
-+			    , (int) CRYPTO_SESID2HID(crp->crp_sid)
-+			    , crp->crp_etype
-+			    , crp->crp_flags
-+			    , crp->crp_callback
-+			);
-+		}
-+	}
-+}
-+
-+DB_SHOW_COMMAND(kcrypto, db_show_kcrypto)
-+{
-+	struct cryptkop *krp;
-+
-+	db_show_drivers();
-+	db_printf("\n");
-+
-+	db_printf("%4s %5s %4s %4s %8s %4s %8s\n",
-+	    "Op", "Status", "#IP", "#OP", "CRID", "HID", "Callback");
-+	TAILQ_FOREACH(krp, &crp_kq, krp_next) {
-+		db_printf("%4u %5u %4u %4u %08x %4u %8p\n"
-+		    , krp->krp_op
-+		    , krp->krp_status
-+		    , krp->krp_iparams, krp->krp_oparams
-+		    , krp->krp_crid, krp->krp_hid
-+		    , krp->krp_callback
-+		);
-+	}
-+	if (!TAILQ_EMPTY(&crp_ret_q)) {
-+		db_printf("%4s %5s %8s %4s %8s\n",
-+		    "Op", "Status", "CRID", "HID", "Callback");
-+		TAILQ_FOREACH(krp, &crp_ret_kq, krp_next) {
-+			db_printf("%4u %5u %08x %4u %8p\n"
-+			    , krp->krp_op
-+			    , krp->krp_status
-+			    , krp->krp_crid, krp->krp_hid
-+			    , krp->krp_callback
-+			);
-+		}
-+	}
-+}
-+#endif
-+
-+
-+static int
-+crypto_init(void)
-+{
-+	int error;
-+
-+	dprintk("%s(%p)\n", __FUNCTION__, (void *) crypto_init);
-+
-+	if (crypto_initted)
-+		return 0;
-+	crypto_initted = 1;
-+
-+	spin_lock_init(&crypto_drivers_lock);
-+	spin_lock_init(&crypto_q_lock);
-+	spin_lock_init(&crypto_ret_q_lock);
-+
-+	cryptop_zone = kmem_cache_create("cryptop", sizeof(struct cryptop),
-+				       0, SLAB_HWCACHE_ALIGN, NULL
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+				       , NULL
-+#endif
-+					);
-+
-+	cryptodesc_zone = kmem_cache_create("cryptodesc", sizeof(struct cryptodesc),
-+				       0, SLAB_HWCACHE_ALIGN, NULL
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+				       , NULL
-+#endif
-+					);
-+
-+	if (cryptodesc_zone == NULL || cryptop_zone == NULL) {
-+		printk("crypto: crypto_init cannot setup crypto zones\n");
-+		error = ENOMEM;
-+		goto bad;
-+	}
-+
-+	crypto_drivers_num = CRYPTO_DRIVERS_INITIAL;
-+	crypto_drivers = kmalloc(crypto_drivers_num * sizeof(struct cryptocap),
-+			GFP_KERNEL);
-+	if (crypto_drivers == NULL) {
-+		printk("crypto: crypto_init cannot setup crypto drivers\n");
-+		error = ENOMEM;
-+		goto bad;
-+	}
-+
-+	memset(crypto_drivers, 0, crypto_drivers_num * sizeof(struct cryptocap));
-+
-+	init_completion(&cryptoproc_exited);
-+	init_completion(&cryptoretproc_exited);
-+
-+	cryptoproc = 0; /* to avoid race condition where proc runs first */
-+	cryptoproc = kernel_thread(crypto_proc, NULL, CLONE_FS|CLONE_FILES);
-+	if (cryptoproc < 0) {
-+		error = cryptoproc;
-+		printk("crypto: crypto_init cannot start crypto thread; error %d",
-+			error);
-+		goto bad;
-+	}
-+
-+	cryptoretproc = 0; /* to avoid race condition where proc runs first */
-+	cryptoretproc = kernel_thread(crypto_ret_proc, NULL, CLONE_FS|CLONE_FILES);
-+	if (cryptoretproc < 0) {
-+		error = cryptoretproc;
-+		printk("crypto: crypto_init cannot start cryptoret thread; error %d",
-+				error);
-+		goto bad;
-+	}
-+
-+	return 0;
-+bad:
-+	crypto_exit();
-+	return error;
-+}
-+
-+
-+static void
-+crypto_exit(void)
-+{
-+	pid_t p;
-+	unsigned long d_flags;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+
-+	/*
-+	 * Terminate any crypto threads.
-+	 */
-+
-+	CRYPTO_DRIVER_LOCK();
-+	p = cryptoproc;
-+	cryptoproc = (pid_t) -1;
-+	kill_proc(p, SIGTERM, 1);
-+	wake_up_interruptible(&cryptoproc_wait);
-+	CRYPTO_DRIVER_UNLOCK();
-+
-+	wait_for_completion(&cryptoproc_exited);
-+
-+	CRYPTO_DRIVER_LOCK();
-+	p = cryptoretproc;
-+	cryptoretproc = (pid_t) -1;
-+	kill_proc(p, SIGTERM, 1);
-+	wake_up_interruptible(&cryptoretproc_wait);
-+	CRYPTO_DRIVER_UNLOCK();
-+
-+	wait_for_completion(&cryptoretproc_exited);
-+
-+	/* XXX flush queues??? */
-+
-+	/* 
-+	 * Reclaim dynamically allocated resources.
-+	 */
-+	if (crypto_drivers != NULL)
-+		kfree(crypto_drivers);
-+
-+	if (cryptodesc_zone != NULL)
-+		kmem_cache_destroy(cryptodesc_zone);
-+	if (cryptop_zone != NULL)
-+		kmem_cache_destroy(cryptop_zone);
-+}
-+
-+
-+EXPORT_SYMBOL(crypto_newsession);
-+EXPORT_SYMBOL(crypto_freesession);
-+EXPORT_SYMBOL(crypto_get_driverid);
-+EXPORT_SYMBOL(crypto_kregister);
-+EXPORT_SYMBOL(crypto_register);
-+EXPORT_SYMBOL(crypto_unregister);
-+EXPORT_SYMBOL(crypto_unregister_all);
-+EXPORT_SYMBOL(crypto_unblock);
-+EXPORT_SYMBOL(crypto_dispatch);
-+EXPORT_SYMBOL(crypto_kdispatch);
-+EXPORT_SYMBOL(crypto_freereq);
-+EXPORT_SYMBOL(crypto_getreq);
-+EXPORT_SYMBOL(crypto_done);
-+EXPORT_SYMBOL(crypto_kdone);
-+EXPORT_SYMBOL(crypto_getfeat);
-+EXPORT_SYMBOL(crypto_userasymcrypto);
-+EXPORT_SYMBOL(crypto_getcaps);
-+EXPORT_SYMBOL(crypto_find_driver);
-+EXPORT_SYMBOL(crypto_find_device_byhid);
-+
-+module_init(crypto_init);
-+module_exit(crypto_exit);
-+
-+MODULE_LICENSE("BSD");
-+MODULE_AUTHOR("David McCullough <david_mccullough at mcafee.com>");
-+MODULE_DESCRIPTION("OCF (OpenBSD Cryptographic Framework)");
-diff --git a/crypto/ocf/cryptodev.c b/crypto/ocf/cryptodev.c
-new file mode 100644
-index 0000000..badf802
---- /dev/null
-+++ b/crypto/ocf/cryptodev.c
-@@ -0,0 +1,1063 @@
-+/*	$OpenBSD: cryptodev.c,v 1.52 2002/06/19 07:22:46 deraadt Exp $	*/
-+
-+/*-
-+ * Linux port done by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ * The license and original author are listed below.
-+ *
-+ * Copyright (c) 2001 Theo de Raadt
-+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in the
-+ *   documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *   derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * Effort sponsored in part by the Defense Advanced Research Projects
-+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
-+ * Materiel Command, USAF, under agreement number F30602-01-2-0537.
-+ *
-+__FBSDID("$FreeBSD: src/sys/opencrypto/cryptodev.c,v 1.34 2007/05/09 19:37:02 gnn Exp $");
-+ */
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/types.h>
-+#include <linux/time.h>
-+#include <linux/delay.h>
-+#include <linux/list.h>
-+#include <linux/init.h>
-+#include <linux/sched.h>
-+#include <linux/unistd.h>
-+#include <linux/module.h>
-+#include <linux/wait.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/dcache.h>
-+#include <linux/file.h>
-+#include <linux/mount.h>
-+#include <linux/miscdevice.h>
-+#include <linux/version.h>
-+#include <asm/uaccess.h>
-+
-+#include <crypto/cryptodev.h>
-+#include <uio.h>
-+
-+extern asmlinkage long sys_dup(unsigned int fildes);
-+
-+#define debug cryptodev_debug
-+int cryptodev_debug = 0;
-+module_param(cryptodev_debug, int, 0644);
-+MODULE_PARM_DESC(cryptodev_debug, "Enable cryptodev debug");
-+
-+struct csession_info {
-+	u_int16_t	blocksize;
-+	u_int16_t	minkey, maxkey;
-+
-+	u_int16_t	keysize;
-+	/* u_int16_t	hashsize;  */
-+	u_int16_t	authsize;
-+	u_int16_t	authkey;
-+	/* u_int16_t	ctxsize; */
-+};
-+
-+struct csession {
-+	struct list_head	list;
-+	u_int64_t	sid;
-+	u_int32_t	ses;
-+
-+	wait_queue_head_t waitq;
-+
-+	u_int32_t	cipher;
-+
-+	u_int32_t	mac;
-+
-+	caddr_t		key;
-+	int		keylen;
-+	u_char		tmp_iv[EALG_MAX_BLOCK_LEN];
-+
-+	caddr_t		mackey;
-+	int		mackeylen;
-+
-+	struct csession_info info;
-+
-+	struct iovec	iovec;
-+	struct uio	uio;
-+	int		error;
-+};
-+
-+struct fcrypt {
-+	struct list_head	csessions;
-+	int		sesn;
-+};
-+
-+static struct csession *csefind(struct fcrypt *, u_int);
-+static int csedelete(struct fcrypt *, struct csession *);
-+static struct csession *cseadd(struct fcrypt *, struct csession *);
-+static struct csession *csecreate(struct fcrypt *, u_int64_t,
-+		struct cryptoini *crie, struct cryptoini *cria, struct csession_info *);
-+static int csefree(struct csession *);
-+
-+static	int cryptodev_op(struct csession *, struct crypt_op *);
-+static	int cryptodev_key(struct crypt_kop *);
-+static	int cryptodev_find(struct crypt_find_op *);
-+
-+static int cryptodev_cb(void *);
-+static int cryptodev_open(struct inode *inode, struct file *filp);
-+
-+/*
-+ * Check a crypto identifier to see if it requested
-+ * a valid crid and it's capabilities match.
-+ */
-+static int
-+checkcrid(int crid)
-+{
-+	int hid = crid & ~(CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_HARDWARE);
-+	int typ = crid & (CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_HARDWARE);
-+	int caps = 0;
-+	
-+	/* if the user hasn't selected a driver, then just call newsession */
-+	if (hid == 0 && typ != 0)
-+		return 0;
-+
-+	caps = crypto_getcaps(hid);
-+
-+	/* didn't find anything with capabilities */
-+	if (caps == 0) {
-+		dprintk("%s: hid=%x typ=%x not matched\n", __FUNCTION__, hid, typ);
-+		return EINVAL;
-+	}
-+	
-+	/* the user didn't specify SW or HW, so the driver is ok */
-+	if (typ == 0)
-+		return 0;
-+
-+	/* if the type specified didn't match */
-+	if (typ != (caps & (CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_HARDWARE))) {
-+		dprintk("%s: hid=%x typ=%x caps=%x not matched\n", __FUNCTION__,
-+				hid, typ, caps);
-+		return EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+static int
-+cryptodev_op(struct csession *cse, struct crypt_op *cop)
-+{
-+	struct cryptop *crp = NULL;
-+	struct cryptodesc *crde = NULL, *crda = NULL;
-+	int error = 0;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if (cop->len > CRYPTO_MAX_DATA_LEN) {
-+		dprintk("%s: %d > %d\n", __FUNCTION__, cop->len, CRYPTO_MAX_DATA_LEN);
-+		return (E2BIG);
-+	}
-+
-+	if (cse->info.blocksize && (cop->len % cse->info.blocksize) != 0) {
-+		dprintk("%s: blocksize=%d len=%d\n", __FUNCTION__, cse->info.blocksize,
-+				cop->len);
-+		return (EINVAL);
-+	}
-+
-+	cse->uio.uio_iov = &cse->iovec;
-+	cse->uio.uio_iovcnt = 1;
-+	cse->uio.uio_offset = 0;
-+#if 0
-+	cse->uio.uio_resid = cop->len;
-+	cse->uio.uio_segflg = UIO_SYSSPACE;
-+	cse->uio.uio_rw = UIO_WRITE;
-+	cse->uio.uio_td = td;
-+#endif
-+	cse->uio.uio_iov[0].iov_len = cop->len;
-+	if (cse->info.authsize)
-+		cse->uio.uio_iov[0].iov_len += cse->info.authsize;
-+	cse->uio.uio_iov[0].iov_base = kmalloc(cse->uio.uio_iov[0].iov_len,
-+			GFP_KERNEL);
-+
-+	if (cse->uio.uio_iov[0].iov_base == NULL) {
-+		dprintk("%s: iov_base kmalloc(%d) failed\n", __FUNCTION__,
-+				(int)cse->uio.uio_iov[0].iov_len);
-+		return (ENOMEM);
-+	}
-+
-+	crp = crypto_getreq((cse->info.blocksize != 0) + (cse->info.authsize != 0));
-+	if (crp == NULL) {
-+		dprintk("%s: ENOMEM\n", __FUNCTION__);
-+		error = ENOMEM;
-+		goto bail;
-+	}
-+
-+	if (cse->info.authsize && cse->info.blocksize) {
-+		if (cop->op == COP_ENCRYPT) {
-+			crde = crp->crp_desc;
-+			crda = crde->crd_next;
-+		} else {
-+			crda = crp->crp_desc;
-+			crde = crda->crd_next;
-+		}
-+	} else if (cse->info.authsize) {
-+		crda = crp->crp_desc;
-+	} else if (cse->info.blocksize) {
-+		crde = crp->crp_desc;
-+	} else {
-+		dprintk("%s: bad request\n", __FUNCTION__);
-+		error = EINVAL;
-+		goto bail;
-+	}
-+
-+	if ((error = copy_from_user(cse->uio.uio_iov[0].iov_base, cop->src,
-+					cop->len))) {
-+		dprintk("%s: bad copy\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+	if (crda) {
-+		crda->crd_skip = 0;
-+		crda->crd_len = cop->len;
-+		crda->crd_inject = cop->len;
-+
-+		crda->crd_alg = cse->mac;
-+		crda->crd_key = cse->mackey;
-+		crda->crd_klen = cse->mackeylen * 8;
-+	}
-+
-+	if (crde) {
-+		if (cop->op == COP_ENCRYPT)
-+			crde->crd_flags |= CRD_F_ENCRYPT;
-+		else
-+			crde->crd_flags &= ~CRD_F_ENCRYPT;
-+		crde->crd_len = cop->len;
-+		crde->crd_inject = 0;
-+
-+		crde->crd_alg = cse->cipher;
-+		crde->crd_key = cse->key;
-+		crde->crd_klen = cse->keylen * 8;
-+	}
-+
-+	crp->crp_ilen = cse->uio.uio_iov[0].iov_len;
-+	crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_CBIMM
-+		       | (cop->flags & COP_F_BATCH);
-+	crp->crp_buf = (caddr_t)&cse->uio;
-+	crp->crp_callback = (int (*) (struct cryptop *)) cryptodev_cb;
-+	crp->crp_sid = cse->sid;
-+	crp->crp_opaque = (void *)cse;
-+
-+	if (cop->iv) {
-+		if (crde == NULL) {
-+			error = EINVAL;
-+			dprintk("%s no crde\n", __FUNCTION__);
-+			goto bail;
-+		}
-+		if (cse->cipher == CRYPTO_ARC4) { /* XXX use flag? */
-+			error = EINVAL;
-+			dprintk("%s arc4 with IV\n", __FUNCTION__);
-+			goto bail;
-+		}
-+		if ((error = copy_from_user(cse->tmp_iv, cop->iv,
-+						cse->info.blocksize))) {
-+			dprintk("%s bad iv copy\n", __FUNCTION__);
-+			goto bail;
-+		}
-+		memcpy(crde->crd_iv, cse->tmp_iv, cse->info.blocksize);
-+		crde->crd_flags |= CRD_F_IV_EXPLICIT | CRD_F_IV_PRESENT;
-+		crde->crd_skip = 0;
-+	} else if (cse->cipher == CRYPTO_ARC4) { /* XXX use flag? */
-+		crde->crd_skip = 0;
-+	} else if (crde) {
-+		crde->crd_flags |= CRD_F_IV_PRESENT;
-+		crde->crd_skip = cse->info.blocksize;
-+		crde->crd_len -= cse->info.blocksize;
-+	}
-+
-+	if (cop->mac && crda == NULL) {
-+		error = EINVAL;
-+		dprintk("%s no crda\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+	/*
-+	 * Let the dispatch run unlocked, then, interlock against the
-+	 * callback before checking if the operation completed and going
-+	 * to sleep.  This insures drivers don't inherit our lock which
-+	 * results in a lock order reversal between crypto_dispatch forced
-+	 * entry and the crypto_done callback into us.
-+	 */
-+	error = crypto_dispatch(crp);
-+	if (error) {
-+		dprintk("%s error in crypto_dispatch\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+	dprintk("%s about to WAIT\n", __FUNCTION__);
-+	/*
-+	 * we really need to wait for driver to complete to maintain
-+	 * state,  luckily interrupts will be remembered
-+	 */
-+	do {
-+		error = wait_event_interruptible(crp->crp_waitq,
-+				((crp->crp_flags & CRYPTO_F_DONE) != 0));
-+		/*
-+		 * we can't break out of this loop or we will leave behind
-+		 * a huge mess,  however,  staying here means if your driver
-+		 * is broken user applications can hang and not be killed.
-+		 * The solution,  fix your driver :-)
-+		 */
-+		if (error) {
-+			schedule();
-+			error = 0;
-+		}
-+	} while ((crp->crp_flags & CRYPTO_F_DONE) == 0);
-+	dprintk("%s finished WAITING error=%d\n", __FUNCTION__, error);
-+
-+	if (crp->crp_etype != 0) {
-+		error = crp->crp_etype;
-+		dprintk("%s error in crp processing\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+	if (cse->error) {
-+		error = cse->error;
-+		dprintk("%s error in cse processing\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+	if (cop->dst && (error = copy_to_user(cop->dst,
-+					cse->uio.uio_iov[0].iov_base, cop->len))) {
-+		dprintk("%s bad dst copy\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+	if (cop->mac &&
-+			(error=copy_to_user(cop->mac,
-+				(caddr_t)cse->uio.uio_iov[0].iov_base + cop->len,
-+				cse->info.authsize))) {
-+		dprintk("%s bad mac copy\n", __FUNCTION__);
-+		goto bail;
-+	}
-+
-+bail:
-+	if (crp)
-+		crypto_freereq(crp);
-+	if (cse->uio.uio_iov[0].iov_base)
-+		kfree(cse->uio.uio_iov[0].iov_base);
-+
-+	return (error);
-+}
-+
-+static int
-+cryptodev_cb(void *op)
-+{
-+	struct cryptop *crp = (struct cryptop *) op;
-+	struct csession *cse = (struct csession *)crp->crp_opaque;
-+	int error;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	error = crp->crp_etype;
-+	if (error == EAGAIN) {
-+		crp->crp_flags &= ~CRYPTO_F_DONE;
-+#ifdef NOTYET
-+		/*
-+		 * DAVIDM I am fairly sure that we should turn this into a batch
-+		 * request to stop bad karma/lockup, revisit
-+		 */
-+		crp->crp_flags |= CRYPTO_F_BATCH;
-+#endif
-+		return crypto_dispatch(crp);
-+	}
-+	if (error != 0 || (crp->crp_flags & CRYPTO_F_DONE)) {
-+		cse->error = error;
-+		wake_up_interruptible(&crp->crp_waitq);
-+	}
-+	return (0);
-+}
-+
-+static int
-+cryptodevkey_cb(void *op)
-+{
-+	struct cryptkop *krp = (struct cryptkop *) op;
-+	dprintk("%s()\n", __FUNCTION__);
-+	wake_up_interruptible(&krp->krp_waitq);
-+	return (0);
-+}
-+
-+static int
-+cryptodev_key(struct crypt_kop *kop)
-+{
-+	struct cryptkop *krp = NULL;
-+	int error = EINVAL;
-+	int in, out, size, i;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if (kop->crk_iparams + kop->crk_oparams > CRK_MAXPARAM) {
-+		dprintk("%s params too big\n", __FUNCTION__);
-+		return (EFBIG);
-+	}
-+
-+	in = kop->crk_iparams;
-+	out = kop->crk_oparams;
-+	switch (kop->crk_op) {
-+	case CRK_MOD_EXP:
-+		if (in == 3 && out == 1)
-+			break;
-+		return (EINVAL);
-+	case CRK_MOD_EXP_CRT:
-+		if (in == 6 && out == 1)
-+			break;
-+		return (EINVAL);
-+	case CRK_DSA_SIGN:
-+		if (in == 5 && out == 2)
-+			break;
-+		return (EINVAL);
-+	case CRK_DSA_VERIFY:
-+		if (in == 7 && out == 0)
-+			break;
-+		return (EINVAL);
-+	case CRK_DH_COMPUTE_KEY:
-+		if (in == 3 && out == 1)
-+			break;
-+		return (EINVAL);
-+	default:
-+		return (EINVAL);
-+	}
-+
-+	krp = (struct cryptkop *)kmalloc(sizeof *krp, GFP_KERNEL);
-+	if (!krp)
-+		return (ENOMEM);
-+	bzero(krp, sizeof *krp);
-+	krp->krp_op = kop->crk_op;
-+	krp->krp_status = kop->crk_status;
-+	krp->krp_iparams = kop->crk_iparams;
-+	krp->krp_oparams = kop->crk_oparams;
-+	krp->krp_crid = kop->crk_crid;
-+	krp->krp_status = 0;
-+	krp->krp_flags = CRYPTO_KF_CBIMM;
-+	krp->krp_callback = (int (*) (struct cryptkop *)) cryptodevkey_cb;
-+	init_waitqueue_head(&krp->krp_waitq);
-+
-+	for (i = 0; i < CRK_MAXPARAM; i++)
-+		krp->krp_param[i].crp_nbits = kop->crk_param[i].crp_nbits;
-+	for (i = 0; i < krp->krp_iparams + krp->krp_oparams; i++) {
-+		size = (krp->krp_param[i].crp_nbits + 7) / 8;
-+		if (size == 0)
-+			continue;
-+		krp->krp_param[i].crp_p = (caddr_t) kmalloc(size, GFP_KERNEL);
-+		if (i >= krp->krp_iparams)
-+			continue;
-+		error = copy_from_user(krp->krp_param[i].crp_p,
-+				kop->crk_param[i].crp_p, size);
-+		if (error)
-+			goto fail;
-+	}
-+
-+	error = crypto_kdispatch(krp);
-+	if (error)
-+		goto fail;
-+
-+	do {
-+		error = wait_event_interruptible(krp->krp_waitq,
-+				((krp->krp_flags & CRYPTO_KF_DONE) != 0));
-+		/*
-+		 * we can't break out of this loop or we will leave behind
-+		 * a huge mess,  however,  staying here means if your driver
-+		 * is broken user applications can hang and not be killed.
-+		 * The solution,  fix your driver :-)
-+		 */
-+		if (error) {
-+			schedule();
-+			error = 0;
-+		}
-+	} while ((krp->krp_flags & CRYPTO_KF_DONE) == 0);
-+
-+	dprintk("%s finished WAITING error=%d\n", __FUNCTION__, error);
-+	
-+	kop->crk_crid = krp->krp_crid;		/* device that did the work */
-+	if (krp->krp_status != 0) {
-+		error = krp->krp_status;
-+		goto fail;
-+	}
-+
-+	for (i = krp->krp_iparams; i < krp->krp_iparams + krp->krp_oparams; i++) {
-+		size = (krp->krp_param[i].crp_nbits + 7) / 8;
-+		if (size == 0)
-+			continue;
-+		error = copy_to_user(kop->crk_param[i].crp_p, krp->krp_param[i].crp_p,
-+				size);
-+		if (error)
-+			goto fail;
-+	}
-+
-+fail:
-+	if (krp) {
-+		kop->crk_status = krp->krp_status;
-+		for (i = 0; i < CRK_MAXPARAM; i++) {
-+			if (krp->krp_param[i].crp_p)
-+				kfree(krp->krp_param[i].crp_p);
-+		}
-+		kfree(krp);
-+	}
-+	return (error);
-+}
-+
-+static int
-+cryptodev_find(struct crypt_find_op *find)
-+{
-+	device_t dev;
-+
-+	if (find->crid != -1) {
-+		dev = crypto_find_device_byhid(find->crid);
-+		if (dev == NULL)
-+			return (ENOENT);
-+		strlcpy(find->name, device_get_nameunit(dev),
-+		    sizeof(find->name));
-+	} else {
-+		find->crid = crypto_find_driver(find->name);
-+		if (find->crid == -1)
-+			return (ENOENT);
-+	}
-+	return (0);
-+}
-+
-+static struct csession *
-+csefind(struct fcrypt *fcr, u_int ses)
-+{
-+	struct csession *cse;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	list_for_each_entry(cse, &fcr->csessions, list)
-+		if (cse->ses == ses)
-+			return (cse);
-+	return (NULL);
-+}
-+
-+static int
-+csedelete(struct fcrypt *fcr, struct csession *cse_del)
-+{
-+	struct csession *cse;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	list_for_each_entry(cse, &fcr->csessions, list) {
-+		if (cse == cse_del) {
-+			list_del(&cse->list);
-+			return (1);
-+		}
-+	}
-+	return (0);
-+}
-+	
-+static struct csession *
-+cseadd(struct fcrypt *fcr, struct csession *cse)
-+{
-+	dprintk("%s()\n", __FUNCTION__);
-+	list_add_tail(&cse->list, &fcr->csessions);
-+	cse->ses = fcr->sesn++;
-+	return (cse);
-+}
-+
-+static struct csession *
-+csecreate(struct fcrypt *fcr, u_int64_t sid, struct cryptoini *crie,
-+	struct cryptoini *cria, struct csession_info *info)
-+{
-+	struct csession *cse;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	cse = (struct csession *) kmalloc(sizeof(struct csession), GFP_KERNEL);
-+	if (cse == NULL)
-+		return NULL;
-+	memset(cse, 0, sizeof(struct csession));
-+
-+	INIT_LIST_HEAD(&cse->list);
-+	init_waitqueue_head(&cse->waitq);
-+
-+	cse->key = crie->cri_key;
-+	cse->keylen = crie->cri_klen/8;
-+	cse->mackey = cria->cri_key;
-+	cse->mackeylen = cria->cri_klen/8;
-+	cse->sid = sid;
-+	cse->cipher = crie->cri_alg;
-+	cse->mac = cria->cri_alg;
-+	cse->info = *info;
-+	cseadd(fcr, cse);
-+	return (cse);
-+}
-+
-+static int
-+csefree(struct csession *cse)
-+{
-+	int error;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	error = crypto_freesession(cse->sid);
-+	if (cse->key)
-+		kfree(cse->key);
-+	if (cse->mackey)
-+		kfree(cse->mackey);
-+	kfree(cse);
-+	return(error);
-+}
-+
-+static int
-+cryptodev_ioctl(
-+	struct inode *inode,
-+	struct file *filp,
-+	unsigned int cmd,
-+	unsigned long arg)
-+{
-+	struct cryptoini cria, crie;
-+	struct fcrypt *fcr = filp->private_data;
-+	struct csession *cse;
-+	struct csession_info info;
-+	struct session2_op sop;
-+	struct crypt_op cop;
-+	struct crypt_kop kop;
-+	struct crypt_find_op fop;
-+	u_int64_t sid;
-+	u_int32_t ses = 0;
-+	int feat, fd, error = 0, crid;
-+	mm_segment_t fs;
-+
-+	dprintk("%s(cmd=%x arg=%lx)\n", __FUNCTION__, cmd, arg);
-+
-+	switch (cmd) {
-+
-+	case CRIOGET: {
-+		dprintk("%s(CRIOGET)\n", __FUNCTION__);
-+		fs = get_fs();
-+		set_fs(get_ds());
-+		for (fd = 0; fd < files_fdtable(current->files)->max_fds; fd++)
-+			if (files_fdtable(current->files)->fd[fd] == filp)
-+				break;
-+		fd = sys_dup(fd);
-+		set_fs(fs);
-+		put_user(fd, (int *) arg);
-+		return IS_ERR_VALUE(fd) ? fd : 0;
-+		}
-+
-+#define	CIOCGSESSSTR	(cmd == CIOCGSESSION ? "CIOCGSESSION" : "CIOCGSESSION2")
-+	case CIOCGSESSION:
-+	case CIOCGSESSION2:
-+		dprintk("%s(%s)\n", __FUNCTION__, CIOCGSESSSTR);
-+		memset(&crie, 0, sizeof(crie));
-+		memset(&cria, 0, sizeof(cria));
-+		memset(&info, 0, sizeof(info));
-+		memset(&sop, 0, sizeof(sop));
-+
-+		if (copy_from_user(&sop, (void*)arg, (cmd == CIOCGSESSION) ?
-+					sizeof(struct session_op) : sizeof(sop))) {
-+			dprintk("%s(%s) - bad copy\n", __FUNCTION__, CIOCGSESSSTR);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+
-+		switch (sop.cipher) {
-+		case 0:
-+			dprintk("%s(%s) - no cipher\n", __FUNCTION__, CIOCGSESSSTR);
-+			break;
-+		case CRYPTO_NULL_CBC:
-+			info.blocksize = NULL_BLOCK_LEN;
-+			info.minkey = NULL_MIN_KEY_LEN;
-+			info.maxkey = NULL_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_DES_CBC:
-+			info.blocksize = DES_BLOCK_LEN;
-+			info.minkey = DES_MIN_KEY_LEN;
-+			info.maxkey = DES_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_3DES_CBC:
-+			info.blocksize = DES3_BLOCK_LEN;
-+			info.minkey = DES3_MIN_KEY_LEN;
-+			info.maxkey = DES3_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_BLF_CBC:
-+			info.blocksize = BLOWFISH_BLOCK_LEN;
-+			info.minkey = BLOWFISH_MIN_KEY_LEN;
-+			info.maxkey = BLOWFISH_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_CAST_CBC:
-+			info.blocksize = CAST128_BLOCK_LEN;
-+			info.minkey = CAST128_MIN_KEY_LEN;
-+			info.maxkey = CAST128_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_SKIPJACK_CBC:
-+			info.blocksize = SKIPJACK_BLOCK_LEN;
-+			info.minkey = SKIPJACK_MIN_KEY_LEN;
-+			info.maxkey = SKIPJACK_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_AES_CBC:
-+			info.blocksize = AES_BLOCK_LEN;
-+			info.minkey = AES_MIN_KEY_LEN;
-+			info.maxkey = AES_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_ARC4:
-+			info.blocksize = ARC4_BLOCK_LEN;
-+			info.minkey = ARC4_MIN_KEY_LEN;
-+			info.maxkey = ARC4_MAX_KEY_LEN;
-+			break;
-+		case CRYPTO_CAMELLIA_CBC:
-+			info.blocksize = CAMELLIA_BLOCK_LEN;
-+			info.minkey = CAMELLIA_MIN_KEY_LEN;
-+			info.maxkey = CAMELLIA_MAX_KEY_LEN;
-+			break;
-+		default:
-+			dprintk("%s(%s) - bad cipher\n", __FUNCTION__, CIOCGSESSSTR);
-+			error = EINVAL;
-+			goto bail;
-+		}
-+
-+		switch (sop.mac) {
-+		case 0:
-+			dprintk("%s(%s) - no mac\n", __FUNCTION__, CIOCGSESSSTR);
-+			break;
-+		case CRYPTO_NULL_HMAC:
-+			info.authsize = NULL_HASH_LEN;
-+			break;
-+		case CRYPTO_MD5:
-+			info.authsize = MD5_HASH_LEN;
-+			break;
-+		case CRYPTO_SHA1:
-+			info.authsize = SHA1_HASH_LEN;
-+			break;
-+		case CRYPTO_SHA2_256:
-+			info.authsize = SHA2_256_HASH_LEN;
-+			break;
-+		case CRYPTO_SHA2_384:
-+			info.authsize = SHA2_384_HASH_LEN;
-+  			break;
-+		case CRYPTO_SHA2_512:
-+			info.authsize = SHA2_512_HASH_LEN;
-+			break;
-+		case CRYPTO_RIPEMD160:
-+			info.authsize = RIPEMD160_HASH_LEN;
-+			break;
-+		case CRYPTO_MD5_HMAC:
-+			info.authsize = MD5_HASH_LEN;
-+			info.authkey = 16;
-+			break;
-+		case CRYPTO_SHA1_HMAC:
-+			info.authsize = SHA1_HASH_LEN;
-+			info.authkey = 20;
-+			break;
-+		case CRYPTO_SHA2_256_HMAC:
-+			info.authsize = SHA2_256_HASH_LEN;
-+			info.authkey = 32;
-+			break;
-+		case CRYPTO_SHA2_384_HMAC:
-+			info.authsize = SHA2_384_HASH_LEN;
-+			info.authkey = 48;
-+  			break;
-+		case CRYPTO_SHA2_512_HMAC:
-+			info.authsize = SHA2_512_HASH_LEN;
-+			info.authkey = 64;
-+			break;
-+		case CRYPTO_RIPEMD160_HMAC:
-+			info.authsize = RIPEMD160_HASH_LEN;
-+			info.authkey = 20;
-+			break;
-+		default:
-+			dprintk("%s(%s) - bad mac\n", __FUNCTION__, CIOCGSESSSTR);
-+			error = EINVAL;
-+			goto bail;
-+		}
-+
-+		if (info.blocksize) {
-+			crie.cri_alg = sop.cipher;
-+			crie.cri_klen = sop.keylen * 8;
-+			if ((info.maxkey && sop.keylen > info.maxkey) ||
-+				   	sop.keylen < info.minkey) {
-+				dprintk("%s(%s) - bad key\n", __FUNCTION__, CIOCGSESSSTR);
-+				error = EINVAL;
-+				goto bail;
-+			}
-+
-+			crie.cri_key = (u_int8_t *) kmalloc(crie.cri_klen/8+1, GFP_KERNEL);
-+			if (copy_from_user(crie.cri_key, sop.key,
-+							crie.cri_klen/8)) {
-+				dprintk("%s(%s) - bad copy\n", __FUNCTION__, CIOCGSESSSTR);
-+				error = EFAULT;
-+				goto bail;
-+			}
-+			if (info.authsize)
-+				crie.cri_next = &cria;
-+		}
-+
-+		if (info.authsize) {
-+			cria.cri_alg = sop.mac;
-+			cria.cri_klen = sop.mackeylen * 8;
-+			if (info.authkey && sop.mackeylen != info.authkey) {
-+				dprintk("%s(%s) - mackeylen %d != %d\n", __FUNCTION__,
-+						CIOCGSESSSTR, sop.mackeylen, info.authkey);
-+				error = EINVAL;
-+				goto bail;
-+			}
-+
-+			if (cria.cri_klen) {
-+				cria.cri_key = (u_int8_t *) kmalloc(cria.cri_klen/8,GFP_KERNEL);
-+				if (copy_from_user(cria.cri_key, sop.mackey,
-+								cria.cri_klen / 8)) {
-+					dprintk("%s(%s) - bad copy\n", __FUNCTION__, CIOCGSESSSTR);
-+					error = EFAULT;
-+					goto bail;
-+				}
-+			}
-+		}
-+
-+		/* NB: CIOGSESSION2 has the crid */
-+		if (cmd == CIOCGSESSION2) {
-+			crid = sop.crid;
-+			error = checkcrid(crid);
-+			if (error) {
-+				dprintk("%s(%s) - checkcrid %x\n", __FUNCTION__,
-+						CIOCGSESSSTR, error);
-+				goto bail;
-+			}
-+		} else {
-+			/* allow either HW or SW to be used */
-+			crid = CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE;
-+		}
-+		error = crypto_newsession(&sid, (info.blocksize ? &crie : &cria), crid);
-+		if (error) {
-+			dprintk("%s(%s) - newsession %d\n",__FUNCTION__,CIOCGSESSSTR,error);
-+			goto bail;
-+		}
-+
-+		cse = csecreate(fcr, sid, &crie, &cria, &info);
-+		if (cse == NULL) {
-+			crypto_freesession(sid);
-+			error = EINVAL;
-+			dprintk("%s(%s) - csecreate failed\n", __FUNCTION__, CIOCGSESSSTR);
-+			goto bail;
-+		}
-+		sop.ses = cse->ses;
-+
-+		if (cmd == CIOCGSESSION2) {
-+			/* return hardware/driver id */
-+			sop.crid = CRYPTO_SESID2HID(cse->sid);
-+		}
-+
-+		if (copy_to_user((void*)arg, &sop, (cmd == CIOCGSESSION) ?
-+					sizeof(struct session_op) : sizeof(sop))) {
-+			dprintk("%s(%s) - bad copy\n", __FUNCTION__, CIOCGSESSSTR);
-+			error = EFAULT;
-+		}
-+bail:
-+		if (error) {
-+			dprintk("%s(%s) - bail %d\n", __FUNCTION__, CIOCGSESSSTR, error);
-+			if (crie.cri_key)
-+				kfree(crie.cri_key);
-+			if (cria.cri_key)
-+				kfree(cria.cri_key);
-+		}
-+		break;
-+	case CIOCFSESSION:
-+		dprintk("%s(CIOCFSESSION)\n", __FUNCTION__);
-+		get_user(ses, (uint32_t*)arg);
-+		cse = csefind(fcr, ses);
-+		if (cse == NULL) {
-+			error = EINVAL;
-+			dprintk("%s(CIOCFSESSION) - Fail %d\n", __FUNCTION__, error);
-+			break;
-+		}
-+		csedelete(fcr, cse);
-+		error = csefree(cse);
-+		break;
-+	case CIOCCRYPT:
-+		dprintk("%s(CIOCCRYPT)\n", __FUNCTION__);
-+		if(copy_from_user(&cop, (void*)arg, sizeof(cop))) {
-+			dprintk("%s(CIOCCRYPT) - bad copy\n", __FUNCTION__);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+		cse = csefind(fcr, cop.ses);
-+		if (cse == NULL) {
-+			error = EINVAL;
-+			dprintk("%s(CIOCCRYPT) - Fail %d\n", __FUNCTION__, error);
-+			break;
-+		}
-+		error = cryptodev_op(cse, &cop);
-+		if(copy_to_user((void*)arg, &cop, sizeof(cop))) {
-+			dprintk("%s(CIOCCRYPT) - bad return copy\n", __FUNCTION__);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+		break;
-+	case CIOCKEY:
-+	case CIOCKEY2:
-+		dprintk("%s(CIOCKEY)\n", __FUNCTION__);
-+		if (!crypto_userasymcrypto)
-+			return (EPERM);		/* XXX compat? */
-+		if(copy_from_user(&kop, (void*)arg, sizeof(kop))) {
-+			dprintk("%s(CIOCKEY) - bad copy\n", __FUNCTION__);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+		if (cmd == CIOCKEY) {
-+			/* NB: crypto core enforces s/w driver use */
-+			kop.crk_crid =
-+			    CRYPTOCAP_F_HARDWARE | CRYPTOCAP_F_SOFTWARE;
-+		}
-+		error = cryptodev_key(&kop);
-+		if(copy_to_user((void*)arg, &kop, sizeof(kop))) {
-+			dprintk("%s(CIOCGKEY) - bad return copy\n", __FUNCTION__);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+		break;
-+	case CIOCASYMFEAT:
-+		dprintk("%s(CIOCASYMFEAT)\n", __FUNCTION__);
-+		if (!crypto_userasymcrypto) {
-+			/*
-+			 * NB: if user asym crypto operations are
-+			 * not permitted return "no algorithms"
-+			 * so well-behaved applications will just
-+			 * fallback to doing them in software.
-+			 */
-+			feat = 0;
-+		} else
-+			error = crypto_getfeat(&feat);
-+		if (!error) {
-+		  error = copy_to_user((void*)arg, &feat, sizeof(feat));
-+		}
-+		break;
-+	case CIOCFINDDEV:
-+		if (copy_from_user(&fop, (void*)arg, sizeof(fop))) {
-+			dprintk("%s(CIOCFINDDEV) - bad copy\n", __FUNCTION__);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+		error = cryptodev_find(&fop);
-+		if (copy_to_user((void*)arg, &fop, sizeof(fop))) {
-+			dprintk("%s(CIOCFINDDEV) - bad return copy\n", __FUNCTION__);
-+			error = EFAULT;
-+			goto bail;
-+		}
-+		break;
-+	default:
-+		dprintk("%s(unknown ioctl 0x%x)\n", __FUNCTION__, cmd);
-+		error = EINVAL;
-+		break;
-+	}
-+	return(-error);
-+}
-+
-+#ifdef HAVE_UNLOCKED_IOCTL
-+static long
-+cryptodev_unlocked_ioctl(
-+	struct file *filp,
-+	unsigned int cmd,
-+	unsigned long arg)
-+{
-+	return cryptodev_ioctl(NULL, filp, cmd, arg);
-+}
-+#endif
-+
-+static int
-+cryptodev_open(struct inode *inode, struct file *filp)
-+{
-+	struct fcrypt *fcr;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	//if (filp->private_data) {
-+	//	printk("cryptodev: Private data already exists !\n");
-+	//	return(0);
-+	//}
-+
-+	fcr = kmalloc(sizeof(*fcr), GFP_KERNEL);
-+	if (!fcr) {
-+		dprintk("%s() - malloc failed\n", __FUNCTION__);
-+		return(-ENOMEM);
-+	}
-+	memset(fcr, 0, sizeof(*fcr));
-+
-+	INIT_LIST_HEAD(&fcr->csessions);
-+	filp->private_data = fcr;
-+	return(0);
-+}
-+
-+static int
-+cryptodev_release(struct inode *inode, struct file *filp)
-+{
-+	struct fcrypt *fcr = filp->private_data;
-+	struct csession *cse, *tmp;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if (!filp) {
-+		printk("cryptodev: No private data on release\n");
-+		return(0);
-+	}
-+
-+	list_for_each_entry_safe(cse, tmp, &fcr->csessions, list) {
-+		list_del(&cse->list);
-+		(void)csefree(cse);
-+	}
-+	filp->private_data = NULL;
-+	kfree(fcr);
-+	return(0);
-+}
-+
-+static struct file_operations cryptodev_fops = {
-+	.owner = THIS_MODULE,
-+	.open = cryptodev_open,
-+	.release = cryptodev_release,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
-+	.ioctl = cryptodev_ioctl,
-+#endif
-+#ifdef HAVE_UNLOCKED_IOCTL
-+	.unlocked_ioctl = cryptodev_unlocked_ioctl,
-+#endif
-+};
-+
-+static struct miscdevice cryptodev = {
-+	.minor = CRYPTODEV_MINOR,
-+	.name = "crypto",
-+	.fops = &cryptodev_fops,
-+};
-+
-+static int __init
-+cryptodev_init(void)
-+{
-+	int rc;
-+
-+	dprintk("%s(%p)\n", __FUNCTION__, cryptodev_init);
-+	rc = misc_register(&cryptodev);
-+	if (rc) {
-+		printk(KERN_ERR "cryptodev: registration of /dev/crypto failed\n");
-+		return(rc);
-+	}
-+
-+	return(0);
-+}
-+
-+static void __exit
-+cryptodev_exit(void)
-+{
-+	dprintk("%s()\n", __FUNCTION__);
-+	misc_deregister(&cryptodev);
-+}
-+
-+module_init(cryptodev_init);
-+module_exit(cryptodev_exit);
-+
-+MODULE_LICENSE("BSD");
-+MODULE_AUTHOR("David McCullough <david_mccullough at mcafee.com>");
-+MODULE_DESCRIPTION("Cryptodev (user interface to OCF)");
-diff --git a/crypto/ocf/cryptosoft.c b/crypto/ocf/cryptosoft.c
-new file mode 100644
-index 0000000..52e1570
---- /dev/null
-+++ b/crypto/ocf/cryptosoft.c
-@@ -0,0 +1,1210 @@
-+/*
-+ * An OCF module that uses the linux kernel cryptoapi, based on the
-+ * original cryptosoft for BSD by Angelos D. Keromytis (angelos at cis.upenn.edu)
-+ * but is mostly unrecognisable,
-+ *
-+ * Written by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2004-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ *
-+ * LICENSE TERMS
-+ *
-+ * The free distribution and use of this software in both source and binary
-+ * form is allowed (with or without changes) provided that:
-+ *
-+ *   1. distributions of this source code include the above copyright
-+ *      notice, this list of conditions and the following disclaimer;
-+ *
-+ *   2. distributions in binary form include the above copyright
-+ *      notice, this list of conditions and the following disclaimer
-+ *      in the documentation and/or other associated materials;
-+ *
-+ *   3. the copyright holder's name is not used to endorse products
-+ *      built using this software without specific written permission.
-+ *
-+ * ALTERNATIVELY, provided that this notice is retained in full, this product
-+ * may be distributed under the terms of the GNU General Public License (GPL),
-+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
-+ *
-+ * DISCLAIMER
-+ *
-+ * This software is provided 'as is' with no explicit or implied warranties
-+ * in respect of its properties, including, but not limited to, correctness
-+ * and/or fitness for purpose.
-+ * ---------------------------------------------------------------------------
-+ */
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/wait.h>
-+#include <linux/crypto.h>
-+#include <linux/mm.h>
-+#include <linux/skbuff.h>
-+#include <linux/random.h>
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
-+#include <linux/scatterlist.h>
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
-+#include <crypto/hash.h>
-+#endif
-+
-+#include <cryptodev.h>
-+#include <uio.h>
-+
-+struct {
-+	softc_device_decl	sc_dev;
-+} swcr_softc;
-+
-+#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
-+
-+#define SW_TYPE_CIPHER		0x01
-+#define SW_TYPE_HMAC		0x02
-+#define SW_TYPE_HASH		0x04
-+#define SW_TYPE_COMP		0x08
-+#define SW_TYPE_BLKCIPHER	0x10
-+#define SW_TYPE_ALG_MASK	0x1f
-+
-+#define SW_TYPE_ASYNC		0x8000
-+
-+/* We change some of the above if we have an async interface */
-+
-+#define SW_TYPE_ALG_AMASK	(SW_TYPE_ALG_MASK | SW_TYPE_ASYNC)
-+
-+#define SW_TYPE_ABLKCIPHER	(SW_TYPE_BLKCIPHER | SW_TYPE_ASYNC)
-+#define SW_TYPE_AHASH		(SW_TYPE_HASH | SW_TYPE_ASYNC)
-+#define SW_TYPE_AHMAC		(SW_TYPE_HMAC | SW_TYPE_ASYNC)
-+
-+#define SCATTERLIST_MAX 16
-+
-+struct swcr_data {
-+	int					sw_type;
-+	int					sw_alg;
-+	struct crypto_tfm	*sw_tfm;
-+	union {
-+		struct {
-+			char *sw_key;
-+			int  sw_klen;
-+			int  sw_mlen;
-+		} hmac;
-+		void *sw_comp_buf;
-+	} u;
-+	struct swcr_data	*sw_next;
-+};
-+
-+struct swcr_req {
-+	struct swcr_data	*sw_head;
-+	struct swcr_data	*sw;
-+	struct cryptop		*crp;
-+	struct cryptodesc	*crd;
-+	struct scatterlist	 sg[SCATTERLIST_MAX];
-+	unsigned char		 iv[EALG_MAX_BLOCK_LEN];
-+	char				 result[HASH_MAX_LEN];
-+	void				*crypto_req;
-+};
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-+static kmem_cache_t *swcr_req_cache;
-+#else
-+static struct kmem_cache *swcr_req_cache;
-+#endif
-+
-+#ifndef CRYPTO_TFM_MODE_CBC
-+/*
-+ * As of linux-2.6.21 this is no longer defined, and presumably no longer
-+ * needed to be passed into the crypto core code.
-+ */
-+#define	CRYPTO_TFM_MODE_CBC	0
-+#define	CRYPTO_TFM_MODE_ECB	0
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+	/*
-+	 * Linux 2.6.19 introduced a new Crypto API, setup macro's to convert new
-+	 * API into old API.
-+	 */
-+
-+	/* Symmetric/Block Cipher */
-+	struct blkcipher_desc
-+	{
-+		struct crypto_tfm *tfm;
-+		void *info;
-+	};
-+	#define ecb(X)								#X , CRYPTO_TFM_MODE_ECB
-+	#define cbc(X)								#X , CRYPTO_TFM_MODE_CBC
-+	#define crypto_has_blkcipher(X, Y, Z)		crypto_alg_available(X, 0)
-+	#define crypto_blkcipher_cast(X)			X
-+	#define crypto_blkcipher_tfm(X)				X
-+	#define crypto_alloc_blkcipher(X, Y, Z)		crypto_alloc_tfm(X, mode)
-+	#define crypto_blkcipher_ivsize(X)			crypto_tfm_alg_ivsize(X)
-+	#define crypto_blkcipher_blocksize(X)		crypto_tfm_alg_blocksize(X)
-+	#define crypto_blkcipher_setkey(X, Y, Z)	crypto_cipher_setkey(X, Y, Z)
-+	#define crypto_blkcipher_encrypt_iv(W, X, Y, Z)	\
-+				crypto_cipher_encrypt_iv((W)->tfm, X, Y, Z, (u8 *)((W)->info))
-+	#define crypto_blkcipher_decrypt_iv(W, X, Y, Z)	\
-+				crypto_cipher_decrypt_iv((W)->tfm, X, Y, Z, (u8 *)((W)->info))
-+	#define crypto_blkcipher_set_flags(x, y)	/* nop */
-+
-+	/* Hash/HMAC/Digest */
-+	struct hash_desc
-+	{
-+		struct crypto_tfm *tfm;
-+	};
-+	#define hmac(X)							#X , 0
-+	#define crypto_has_hash(X, Y, Z)		crypto_alg_available(X, 0)
-+	#define crypto_hash_cast(X)				X
-+	#define crypto_hash_tfm(X)				X
-+	#define crypto_alloc_hash(X, Y, Z)		crypto_alloc_tfm(X, mode)
-+	#define crypto_hash_digestsize(X)		crypto_tfm_alg_digestsize(X)
-+	#define crypto_hash_digest(W, X, Y, Z)	\
-+				crypto_digest_digest((W)->tfm, X, sg_num, Z)
-+
-+	/* Asymmetric Cipher */
-+	#define crypto_has_cipher(X, Y, Z)		crypto_alg_available(X, 0)
-+
-+	/* Compression */
-+	#define crypto_has_comp(X, Y, Z)		crypto_alg_available(X, 0)
-+	#define crypto_comp_tfm(X)				X
-+	#define crypto_comp_cast(X)				X
-+	#define crypto_alloc_comp(X, Y, Z)		crypto_alloc_tfm(X, mode)
-+	#define plain(X)	#X , 0
-+#else
-+	#define ecb(X)	"ecb(" #X ")" , 0
-+	#define cbc(X)	"cbc(" #X ")" , 0
-+	#define hmac(X)	"hmac(" #X ")" , 0
-+	#define plain(X)	#X , 0
-+#endif /* if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
-+/* no ablkcipher in older kernels */
-+#define crypto_alloc_ablkcipher(a,b,c)		(NULL)
-+#define crypto_ablkcipher_tfm(x)			((struct crypto_tfm *)(x))
-+#define crypto_ablkcipher_set_flags(a, b)	/* nop */
-+#define crypto_ablkcipher_setkey(x, y, z)	(-EINVAL)
-+#define	crypto_has_ablkcipher(a,b,c)		(0)
-+#else
-+#define	HAVE_ABLKCIPHER
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
-+/* no ahash in older kernels */
-+#define crypto_ahash_tfm(x)					((struct crypto_tfm *)(x))
-+#define	crypto_alloc_ahash(a,b,c)			(NULL)
-+#define	crypto_ahash_digestsize(x)			0
-+#else
-+#define	HAVE_AHASH
-+#endif
-+
-+struct crypto_details {
-+	char *alg_name;
-+	int mode;
-+	int sw_type;
-+};
-+
-+static struct crypto_details crypto_details[] = {
-+	[CRYPTO_DES_CBC]         = { cbc(des),          SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_3DES_CBC]        = { cbc(des3_ede),     SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_BLF_CBC]         = { cbc(blowfish),     SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_CAST_CBC]        = { cbc(cast5),        SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_SKIPJACK_CBC]    = { cbc(skipjack),     SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_MD5_HMAC]        = { hmac(md5),         SW_TYPE_HMAC, },
-+	[CRYPTO_SHA1_HMAC]       = { hmac(sha1),        SW_TYPE_HMAC, },
-+	[CRYPTO_RIPEMD160_HMAC]  = { hmac(ripemd160),   SW_TYPE_HMAC, },
-+	[CRYPTO_MD5_KPDK]        = { plain(md5-kpdk),   SW_TYPE_HASH, },
-+	[CRYPTO_SHA1_KPDK]       = { plain(sha1-kpdk),  SW_TYPE_HASH, },
-+	[CRYPTO_AES_CBC]         = { cbc(aes),          SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_ARC4]            = { ecb(arc4),         SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_MD5]             = { plain(md5),        SW_TYPE_HASH, },
-+	[CRYPTO_SHA1]            = { plain(sha1),       SW_TYPE_HASH, },
-+	[CRYPTO_NULL_HMAC]       = { hmac(digest_null), SW_TYPE_HMAC, },
-+	[CRYPTO_NULL_CBC]        = { cbc(cipher_null),  SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_DEFLATE_COMP]    = { plain(deflate),    SW_TYPE_COMP, },
-+	[CRYPTO_SHA2_256_HMAC]   = { hmac(sha256),      SW_TYPE_HMAC, },
-+	[CRYPTO_SHA2_384_HMAC]   = { hmac(sha384),      SW_TYPE_HMAC, },
-+	[CRYPTO_SHA2_512_HMAC]   = { hmac(sha512),      SW_TYPE_HMAC, },
-+	[CRYPTO_CAMELLIA_CBC]    = { cbc(camellia),     SW_TYPE_BLKCIPHER, },
-+	[CRYPTO_SHA2_256]        = { plain(sha256),     SW_TYPE_HASH, },
-+	[CRYPTO_SHA2_384]        = { plain(sha384),     SW_TYPE_HASH, },
-+	[CRYPTO_SHA2_512]        = { plain(sha512),     SW_TYPE_HASH, },
-+	[CRYPTO_RIPEMD160]       = { plain(ripemd160),  SW_TYPE_HASH, },
-+};
-+
-+int32_t swcr_id = -1;
-+module_param(swcr_id, int, 0444);
-+MODULE_PARM_DESC(swcr_id, "Read-Only OCF ID for cryptosoft driver");
-+
-+int swcr_fail_if_compression_grows = 1;
-+module_param(swcr_fail_if_compression_grows, int, 0644);
-+MODULE_PARM_DESC(swcr_fail_if_compression_grows,
-+                "Treat compression that results in more data as a failure");
-+
-+int swcr_no_ahash = 0;
-+module_param(swcr_no_ahash, int, 0644);
-+MODULE_PARM_DESC(swcr_no_ahash,
-+                "Do not use async hash/hmac even if available");
-+
-+int swcr_no_ablk = 0;
-+module_param(swcr_no_ablk, int, 0644);
-+MODULE_PARM_DESC(swcr_no_ablk,
-+                "Do not use async blk ciphers even if available");
-+
-+static struct swcr_data **swcr_sessions = NULL;
-+static u_int32_t swcr_sesnum = 0;
-+
-+static	int swcr_process(device_t, struct cryptop *, int);
-+static	int swcr_newsession(device_t, u_int32_t *, struct cryptoini *);
-+static	int swcr_freesession(device_t, u_int64_t);
-+
-+static device_method_t swcr_methods = {
-+	/* crypto device methods */
-+	DEVMETHOD(cryptodev_newsession,	swcr_newsession),
-+	DEVMETHOD(cryptodev_freesession,swcr_freesession),
-+	DEVMETHOD(cryptodev_process,	swcr_process),
-+};
-+
-+#define debug swcr_debug
-+int swcr_debug = 0;
-+module_param(swcr_debug, int, 0644);
-+MODULE_PARM_DESC(swcr_debug, "Enable debug");
-+
-+static void swcr_process_req(struct swcr_req *req);
-+
-+/*
-+ * Generate a new software session.
-+ */
-+static int
-+swcr_newsession(device_t dev, u_int32_t *sid, struct cryptoini *cri)
-+{
-+	struct swcr_data **swd;
-+	u_int32_t i;
-+	int error;
-+	char *algo;
-+	int mode;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if (sid == NULL || cri == NULL) {
-+		dprintk("%s,%d - EINVAL\n", __FILE__, __LINE__);
-+		return EINVAL;
-+	}
-+
-+	if (swcr_sessions) {
-+		for (i = 1; i < swcr_sesnum; i++)
-+			if (swcr_sessions[i] == NULL)
-+				break;
-+	} else
-+		i = 1;		/* NB: to silence compiler warning */
-+
-+	if (swcr_sessions == NULL || i == swcr_sesnum) {
-+		if (swcr_sessions == NULL) {
-+			i = 1; /* We leave swcr_sessions[0] empty */
-+			swcr_sesnum = CRYPTO_SW_SESSIONS;
-+		} else
-+			swcr_sesnum *= 2;
-+
-+		swd = kmalloc(swcr_sesnum * sizeof(struct swcr_data *), SLAB_ATOMIC);
-+		if (swd == NULL) {
-+			/* Reset session number */
-+			if (swcr_sesnum == CRYPTO_SW_SESSIONS)
-+				swcr_sesnum = 0;
-+			else
-+				swcr_sesnum /= 2;
-+			dprintk("%s,%d: ENOBUFS\n", __FILE__, __LINE__);
-+			return ENOBUFS;
-+		}
-+		memset(swd, 0, swcr_sesnum * sizeof(struct swcr_data *));
-+
-+		/* Copy existing sessions */
-+		if (swcr_sessions) {
-+			memcpy(swd, swcr_sessions,
-+			    (swcr_sesnum / 2) * sizeof(struct swcr_data *));
-+			kfree(swcr_sessions);
-+		}
-+
-+		swcr_sessions = swd;
-+	}
-+
-+	swd = &swcr_sessions[i];
-+	*sid = i;
-+
-+	while (cri) {
-+		*swd = (struct swcr_data *) kmalloc(sizeof(struct swcr_data),
-+				SLAB_ATOMIC);
-+		if (*swd == NULL) {
-+			swcr_freesession(NULL, i);
-+			dprintk("%s,%d: ENOBUFS\n", __FILE__, __LINE__);
-+			return ENOBUFS;
-+		}
-+		memset(*swd, 0, sizeof(struct swcr_data));
-+
-+		if (cri->cri_alg < 0 ||
-+				cri->cri_alg>=sizeof(crypto_details)/sizeof(crypto_details[0])){
-+			printk("cryptosoft: Unknown algorithm 0x%x\n", cri->cri_alg);
-+			swcr_freesession(NULL, i);
-+			return EINVAL;
-+		}
-+
-+		algo = crypto_details[cri->cri_alg].alg_name;
-+		if (!algo || !*algo) {
-+			printk("cryptosoft: Unsupported algorithm 0x%x\n", cri->cri_alg);
-+			swcr_freesession(NULL, i);
-+			return EINVAL;
-+		}
-+
-+		mode = crypto_details[cri->cri_alg].mode;
-+		(*swd)->sw_type = crypto_details[cri->cri_alg].sw_type;
-+		(*swd)->sw_alg = cri->cri_alg;
-+
-+		/* Algorithm specific configuration */
-+		switch (cri->cri_alg) {
-+		case CRYPTO_NULL_CBC:
-+			cri->cri_klen = 0; /* make it work with crypto API */
-+			break;
-+		default:
-+			break;
-+		}
-+
-+		if ((*swd)->sw_type & SW_TYPE_BLKCIPHER) {
-+			dprintk("%s crypto_alloc_*blkcipher(%s, 0x%x)\n", __FUNCTION__,
-+					algo, mode);
-+
-+			/* try async first */
-+			(*swd)->sw_tfm = swcr_no_ablk ? NULL :
-+					crypto_ablkcipher_tfm(crypto_alloc_ablkcipher(algo, 0, 0));
-+			if ((*swd)->sw_tfm) {
-+				dprintk("%s %s cipher is async\n", __FUNCTION__, algo);
-+				(*swd)->sw_type |= SW_TYPE_ASYNC;
-+			} else {
-+				dprintk("%s %s cipher is sync\n", __FUNCTION__, algo);
-+				(*swd)->sw_tfm = crypto_blkcipher_tfm(
-+						crypto_alloc_blkcipher(algo, 0, CRYPTO_ALG_ASYNC));
-+			}
-+			if (!(*swd)->sw_tfm) {
-+				dprintk("cryptosoft: crypto_alloc_blkcipher failed(%s, 0x%x)\n",
-+						algo,mode);
-+				swcr_freesession(NULL, i);
-+				return EINVAL;
-+			}
-+
-+			if (debug) {
-+				dprintk("%s key:cri->cri_klen=%d,(cri->cri_klen + 7)/8=%d",
-+						__FUNCTION__, cri->cri_klen, (cri->cri_klen + 7) / 8);
-+				for (i = 0; i < (cri->cri_klen + 7) / 8; i++)
-+					dprintk("%s0x%x", (i % 8) ? " " : "\n    ",
-+							cri->cri_key[i] & 0xff);
-+				dprintk("\n");
-+			}
-+			if ((*swd)->sw_type & SW_TYPE_ASYNC) {
-+				/* OCF doesn't enforce keys */
-+				crypto_ablkcipher_set_flags(
-+						__crypto_ablkcipher_cast((*swd)->sw_tfm),
-+							CRYPTO_TFM_REQ_WEAK_KEY);
-+				error = crypto_ablkcipher_setkey(
-+							__crypto_ablkcipher_cast((*swd)->sw_tfm),
-+								cri->cri_key, (cri->cri_klen + 7) / 8);
-+			} else {
-+				/* OCF doesn't enforce keys */
-+				crypto_blkcipher_set_flags(
-+						crypto_blkcipher_cast((*swd)->sw_tfm),
-+							CRYPTO_TFM_REQ_WEAK_KEY);
-+				error = crypto_blkcipher_setkey(
-+							crypto_blkcipher_cast((*swd)->sw_tfm),
-+								cri->cri_key, (cri->cri_klen + 7) / 8);
-+			}
-+			if (error) {
-+				printk("cryptosoft: setkey failed %d (crt_flags=0x%x)\n", error,
-+						(*swd)->sw_tfm->crt_flags);
-+				swcr_freesession(NULL, i);
-+				return error;
-+			}
-+		} else if ((*swd)->sw_type & (SW_TYPE_HMAC | SW_TYPE_HASH)) {
-+			dprintk("%s crypto_alloc_*hash(%s, 0x%x)\n", __FUNCTION__,
-+					algo, mode);
-+
-+			/* try async first */
-+			(*swd)->sw_tfm = swcr_no_ahash ? NULL :
-+					crypto_ahash_tfm(crypto_alloc_ahash(algo, 0, 0));
-+			if ((*swd)->sw_tfm) {
-+				dprintk("%s %s hash is async\n", __FUNCTION__, algo);
-+				(*swd)->sw_type |= SW_TYPE_ASYNC;
-+			} else {
-+				dprintk("%s %s hash is sync\n", __FUNCTION__, algo);
-+				(*swd)->sw_tfm = crypto_hash_tfm(
-+						crypto_alloc_hash(algo, 0, CRYPTO_ALG_ASYNC));
-+			}
-+
-+			if (!(*swd)->sw_tfm) {
-+				dprintk("cryptosoft: crypto_alloc_hash failed(%s,0x%x)\n",
-+						algo, mode);
-+				swcr_freesession(NULL, i);
-+				return EINVAL;
-+			}
-+
-+			(*swd)->u.hmac.sw_klen = (cri->cri_klen + 7) / 8;
-+			(*swd)->u.hmac.sw_key = (char *)kmalloc((*swd)->u.hmac.sw_klen,
-+					SLAB_ATOMIC);
-+			if ((*swd)->u.hmac.sw_key == NULL) {
-+				swcr_freesession(NULL, i);
-+				dprintk("%s,%d: ENOBUFS\n", __FILE__, __LINE__);
-+				return ENOBUFS;
-+			}
-+			memcpy((*swd)->u.hmac.sw_key, cri->cri_key, (*swd)->u.hmac.sw_klen);
-+			if (cri->cri_mlen) {
-+				(*swd)->u.hmac.sw_mlen = cri->cri_mlen;
-+			} else if ((*swd)->sw_type & SW_TYPE_ASYNC) {
-+				(*swd)->u.hmac.sw_mlen = crypto_ahash_digestsize(
-+						__crypto_ahash_cast((*swd)->sw_tfm));
-+			} else  {
-+				(*swd)->u.hmac.sw_mlen = crypto_hash_digestsize(
-+						crypto_hash_cast((*swd)->sw_tfm));
-+			}
-+		} else if ((*swd)->sw_type & SW_TYPE_COMP) {
-+			(*swd)->sw_tfm = crypto_comp_tfm(
-+					crypto_alloc_comp(algo, 0, CRYPTO_ALG_ASYNC));
-+			if (!(*swd)->sw_tfm) {
-+				dprintk("cryptosoft: crypto_alloc_comp failed(%s,0x%x)\n",
-+						algo, mode);
-+				swcr_freesession(NULL, i);
-+				return EINVAL;
-+			}
-+			(*swd)->u.sw_comp_buf = kmalloc(CRYPTO_MAX_DATA_LEN, SLAB_ATOMIC);
-+			if ((*swd)->u.sw_comp_buf == NULL) {
-+				swcr_freesession(NULL, i);
-+				dprintk("%s,%d: ENOBUFS\n", __FILE__, __LINE__);
-+				return ENOBUFS;
-+			}
-+		} else {
-+			printk("cryptosoft: Unhandled sw_type %d\n", (*swd)->sw_type);
-+			swcr_freesession(NULL, i);
-+			return EINVAL;
-+		}
-+
-+		cri = cri->cri_next;
-+		swd = &((*swd)->sw_next);
-+	}
-+	return 0;
-+}
-+
-+/*
-+ * Free a session.
-+ */
-+static int
-+swcr_freesession(device_t dev, u_int64_t tid)
-+{
-+	struct swcr_data *swd;
-+	u_int32_t sid = CRYPTO_SESID2LID(tid);
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if (sid > swcr_sesnum || swcr_sessions == NULL ||
-+			swcr_sessions[sid] == NULL) {
-+		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+		return(EINVAL);
-+	}
-+
-+	/* Silently accept and return */
-+	if (sid == 0)
-+		return(0);
-+
-+	while ((swd = swcr_sessions[sid]) != NULL) {
-+		swcr_sessions[sid] = swd->sw_next;
-+		if (swd->sw_tfm) {
-+			switch (swd->sw_type & SW_TYPE_ALG_AMASK) {
-+#ifdef HAVE_AHASH
-+			case SW_TYPE_AHMAC:
-+			case SW_TYPE_AHASH:
-+				crypto_free_ahash(__crypto_ahash_cast(swd->sw_tfm));
-+				break;
-+#endif
-+#ifdef HAVE_ABLKCIPHER
-+			case SW_TYPE_ABLKCIPHER:
-+				crypto_free_ablkcipher(__crypto_ablkcipher_cast(swd->sw_tfm));
-+				break;
-+#endif
-+			case SW_TYPE_BLKCIPHER:
-+				crypto_free_blkcipher(crypto_blkcipher_cast(swd->sw_tfm));
-+				break;
-+			case SW_TYPE_HMAC:
-+			case SW_TYPE_HASH:
-+				crypto_free_hash(crypto_hash_cast(swd->sw_tfm));
-+				break;
-+			case SW_TYPE_COMP:
-+				crypto_free_comp(crypto_comp_cast(swd->sw_tfm));
-+			default:
-+				crypto_free_tfm(swd->sw_tfm);
-+				break;
-+			}
-+			swd->sw_tfm = NULL;
-+		}
-+		if (swd->sw_type & SW_TYPE_COMP) {
-+			if (swd->u.sw_comp_buf)
-+				kfree(swd->u.sw_comp_buf);
-+		} else {
-+			if (swd->u.hmac.sw_key)
-+				kfree(swd->u.hmac.sw_key);
-+		}
-+		kfree(swd);
-+	}
-+	return 0;
-+}
-+
-+#if defined(HAVE_ABLKCIPHER) || defined(HAVE_AHASH)
-+/* older kernels had no async interface */
-+
-+static void swcr_process_callback(struct crypto_async_request *creq, int err)
-+{
-+	struct swcr_req *req = creq->data;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	if (err) {
-+		if (err == -EINPROGRESS)
-+			return;
-+		dprintk("%s() fail %d\n", __FUNCTION__, -err);
-+		req->crp->crp_etype = -err;
-+		goto done;
-+	}
-+
-+	switch (req->sw->sw_type & SW_TYPE_ALG_AMASK) {
-+	case SW_TYPE_AHMAC:
-+	case SW_TYPE_AHASH:
-+		crypto_copyback(req->crp->crp_flags, req->crp->crp_buf,
-+				req->crd->crd_inject, req->sw->u.hmac.sw_mlen, req->result);
-+		ahash_request_free(req->crypto_req);
-+		break;
-+	case SW_TYPE_ABLKCIPHER:
-+		ablkcipher_request_free(req->crypto_req);
-+		break;
-+	default:
-+		req->crp->crp_etype = EINVAL;
-+		goto done;
-+	}
-+
-+	req->crd = req->crd->crd_next;
-+	if (req->crd) {
-+		swcr_process_req(req);
-+		return;
-+	}
-+
-+done:
-+	dprintk("%s crypto_done %p\n", __FUNCTION__, req);
-+	crypto_done(req->crp);
-+	kmem_cache_free(swcr_req_cache, req);
-+}
-+#endif /* defined(HAVE_ABLKCIPHER) || defined(HAVE_AHASH) */
-+
-+
-+static void swcr_process_req(struct swcr_req *req)
-+{
-+	struct swcr_data *sw;
-+	struct cryptop *crp = req->crp;
-+	struct cryptodesc *crd = req->crd;
-+	struct sk_buff *skb = (struct sk_buff *) crp->crp_buf;
-+	struct uio *uiop = (struct uio *) crp->crp_buf;
-+	int sg_num, sg_len, skip;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+
-+	/*
-+	 * Find the crypto context.
-+	 *
-+	 * XXX Note that the logic here prevents us from having
-+	 * XXX the same algorithm multiple times in a session
-+	 * XXX (or rather, we can but it won't give us the right
-+	 * XXX results). To do that, we'd need some way of differentiating
-+	 * XXX between the various instances of an algorithm (so we can
-+	 * XXX locate the correct crypto context).
-+	 */
-+	for (sw = req->sw_head; sw && sw->sw_alg != crd->crd_alg; sw = sw->sw_next)
-+		;
-+
-+	/* No such context ? */
-+	if (sw == NULL) {
-+		crp->crp_etype = EINVAL;
-+		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+		goto done;
-+	}
-+
-+	req->sw = sw;
-+	skip = crd->crd_skip;
-+
-+	/*
-+	 * setup the SG list skip from the start of the buffer
-+	 */
-+	memset(req->sg, 0, sizeof(req->sg));
-+	sg_init_table(req->sg, SCATTERLIST_MAX);
-+	if (crp->crp_flags & CRYPTO_F_SKBUF) {
-+		int i, len;
-+
-+		sg_num = 0;
-+		sg_len = 0;
-+
-+		if (skip < skb_headlen(skb)) {
-+			len = skb_headlen(skb) - skip;
-+			if (len + sg_len > crd->crd_len)
-+				len = crd->crd_len - sg_len;
-+			sg_set_page(&req->sg[sg_num],
-+				virt_to_page(skb->data + skip), len,
-+				offset_in_page(skb->data + skip));
-+			sg_len += len;
-+			sg_num++;
-+			skip = 0;
-+		} else
-+			skip -= skb_headlen(skb);
-+
-+		for (i = 0; sg_len < crd->crd_len &&
-+					i < skb_shinfo(skb)->nr_frags &&
-+					sg_num < SCATTERLIST_MAX; i++) {
-+			if (skip < skb_shinfo(skb)->frags[i].size) {
-+				len = skb_shinfo(skb)->frags[i].size - skip;
-+				if (len + sg_len > crd->crd_len)
-+					len = crd->crd_len - sg_len;
-+				sg_set_page(&req->sg[sg_num],
-+					skb_shinfo(skb)->frags[i].page,
-+					len,
-+					skb_shinfo(skb)->frags[i].page_offset + skip);
-+				sg_len += len;
-+				sg_num++;
-+				skip = 0;
-+			} else
-+				skip -= skb_shinfo(skb)->frags[i].size;
-+		}
-+	} else if (crp->crp_flags & CRYPTO_F_IOV) {
-+		int len;
-+
-+		sg_len = 0;
-+		for (sg_num = 0; sg_len < crd->crd_len &&
-+				sg_num < uiop->uio_iovcnt &&
-+				sg_num < SCATTERLIST_MAX; sg_num++) {
-+			if (skip <= uiop->uio_iov[sg_num].iov_len) {
-+				len = uiop->uio_iov[sg_num].iov_len - skip;
-+				if (len + sg_len > crd->crd_len)
-+					len = crd->crd_len - sg_len;
-+				sg_set_page(&req->sg[sg_num],
-+					virt_to_page(uiop->uio_iov[sg_num].iov_base+skip),
-+					len,
-+					offset_in_page(uiop->uio_iov[sg_num].iov_base+skip));
-+				sg_len += len;
-+				skip = 0;
-+			} else 
-+				skip -= uiop->uio_iov[sg_num].iov_len;
-+		}
-+	} else {
-+		sg_len = (crp->crp_ilen - skip);
-+		if (sg_len > crd->crd_len)
-+			sg_len = crd->crd_len;
-+		sg_set_page(&req->sg[0], virt_to_page(crp->crp_buf + skip),
-+			sg_len, offset_in_page(crp->crp_buf + skip));
-+		sg_num = 1;
-+	}
-+
-+	switch (sw->sw_type & SW_TYPE_ALG_AMASK) {
-+
-+#ifdef HAVE_AHASH
-+	case SW_TYPE_AHMAC:
-+	case SW_TYPE_AHASH:
-+		{
-+		int ret;
-+
-+		/* check we have room for the result */
-+		if (crp->crp_ilen - crd->crd_inject < sw->u.hmac.sw_mlen) {
-+			dprintk("cryptosoft: EINVAL crp_ilen=%d, len=%d, inject=%d "
-+					"digestsize=%d\n", crp->crp_ilen, crd->crd_skip + sg_len,
-+					crd->crd_inject, sw->u.hmac.sw_mlen);
-+			crp->crp_etype = EINVAL;
-+			goto done;
-+		}
-+
-+		req->crypto_req =
-+				ahash_request_alloc(__crypto_ahash_cast(sw->sw_tfm),GFP_KERNEL);
-+		if (!req->crypto_req) {
-+			crp->crp_etype = ENOMEM;
-+			dprintk("%s,%d: ENOMEM ahash_request_alloc", __FILE__, __LINE__);
-+			goto done;
-+		}
-+
-+		ahash_request_set_callback(req->crypto_req,
-+				CRYPTO_TFM_REQ_MAY_BACKLOG, swcr_process_callback, req);
-+
-+		memset(req->result, 0, sizeof(req->result));
-+
-+		if (sw->sw_type & SW_TYPE_AHMAC)
-+			crypto_ahash_setkey(__crypto_ahash_cast(sw->sw_tfm),
-+					sw->u.hmac.sw_key, sw->u.hmac.sw_klen);
-+		ahash_request_set_crypt(req->crypto_req, req->sg, req->result, sg_len);
-+		ret = crypto_ahash_digest(req->crypto_req);
-+		switch (ret) {
-+		case -EINPROGRESS:
-+		case -EBUSY:
-+			return;
-+		default:
-+		case 0:
-+			dprintk("hash OP %s %d\n", ret ? "failed" : "success", ret);
-+			crp->crp_etype = ret;
-+			ahash_request_free(req->crypto_req);
-+			goto done;
-+		}
-+		} break;
-+#endif /* HAVE_AHASH */
-+
-+#ifdef HAVE_ABLKCIPHER
-+	case SW_TYPE_ABLKCIPHER: {
-+		int ret;
-+		unsigned char *ivp = req->iv;
-+		int ivsize = 
-+			crypto_ablkcipher_ivsize(__crypto_ablkcipher_cast(sw->sw_tfm));
-+
-+		if (sg_len < crypto_ablkcipher_blocksize(
-+				__crypto_ablkcipher_cast(sw->sw_tfm))) {
-+			crp->crp_etype = EINVAL;
-+			dprintk("%s,%d: EINVAL len %d < %d\n", __FILE__, __LINE__,
-+					sg_len, crypto_ablkcipher_blocksize(
-+						__crypto_ablkcipher_cast(sw->sw_tfm)));
-+			goto done;
-+		}
-+
-+		if (ivsize > sizeof(req->iv)) {
-+			crp->crp_etype = EINVAL;
-+			dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+			goto done;
-+		}
-+
-+		req->crypto_req = ablkcipher_request_alloc(
-+				__crypto_ablkcipher_cast(sw->sw_tfm), GFP_KERNEL);
-+		if (!req->crypto_req) {
-+			crp->crp_etype = ENOMEM;
-+			dprintk("%s,%d: ENOMEM ablkcipher_request_alloc",
-+					__FILE__, __LINE__);
-+			goto done;
-+		}
-+
-+		ablkcipher_request_set_callback(req->crypto_req,
-+				CRYPTO_TFM_REQ_MAY_BACKLOG, swcr_process_callback, req);
-+
-+		if (crd->crd_flags & CRD_F_KEY_EXPLICIT) {
-+			int i, error;
-+
-+			if (debug) {
-+				dprintk("%s key:", __FUNCTION__);
-+				for (i = 0; i < (crd->crd_klen + 7) / 8; i++)
-+					dprintk("%s0x%x", (i % 8) ? " " : "\n    ",
-+							crd->crd_key[i] & 0xff);
-+				dprintk("\n");
-+			}
-+			/* OCF doesn't enforce keys */
-+			crypto_ablkcipher_set_flags(__crypto_ablkcipher_cast(sw->sw_tfm),
-+					CRYPTO_TFM_REQ_WEAK_KEY);
-+			error = crypto_ablkcipher_setkey(
-+						__crypto_ablkcipher_cast(sw->sw_tfm), crd->crd_key,
-+						(crd->crd_klen + 7) / 8);
-+			if (error) {
-+				dprintk("cryptosoft: setkey failed %d (crt_flags=0x%x)\n",
-+						error, sw->sw_tfm->crt_flags);
-+				crp->crp_etype = -error;
-+			}
-+		}
-+
-+		if (crd->crd_flags & CRD_F_ENCRYPT) { /* encrypt */
-+
-+			if (crd->crd_flags & CRD_F_IV_EXPLICIT)
-+				ivp = crd->crd_iv;
-+			else
-+				get_random_bytes(ivp, ivsize);
-+			/*
-+			 * do we have to copy the IV back to the buffer ?
-+			 */
-+			if ((crd->crd_flags & CRD_F_IV_PRESENT) == 0) {
-+				crypto_copyback(crp->crp_flags, crp->crp_buf,
-+						crd->crd_inject, ivsize, (caddr_t)ivp);
-+			}
-+			ablkcipher_request_set_crypt(req->crypto_req, req->sg, req->sg,
-+					sg_len, ivp);
-+			ret = crypto_ablkcipher_encrypt(req->crypto_req);
-+
-+		} else { /*decrypt */
-+
-+			if (crd->crd_flags & CRD_F_IV_EXPLICIT)
-+				ivp = crd->crd_iv;
-+			else
-+				crypto_copydata(crp->crp_flags, crp->crp_buf,
-+						crd->crd_inject, ivsize, (caddr_t)ivp);
-+			ablkcipher_request_set_crypt(req->crypto_req, req->sg, req->sg,
-+					sg_len, ivp);
-+			ret = crypto_ablkcipher_decrypt(req->crypto_req);
-+		}
-+
-+		switch (ret) {
-+		case -EINPROGRESS:
-+		case -EBUSY:
-+			return;
-+		default:
-+		case 0:
-+			dprintk("crypto OP %s %d\n", ret ? "failed" : "success", ret);
-+			crp->crp_etype = ret;
-+			goto done;
-+		}
-+		} break;
-+#endif /* HAVE_ABLKCIPHER */
-+
-+	case SW_TYPE_BLKCIPHER: {
-+		unsigned char iv[EALG_MAX_BLOCK_LEN];
-+		unsigned char *ivp = iv;
-+		struct blkcipher_desc desc;
-+		int ivsize = crypto_blkcipher_ivsize(crypto_blkcipher_cast(sw->sw_tfm));
-+
-+		if (sg_len < crypto_blkcipher_blocksize(
-+				crypto_blkcipher_cast(sw->sw_tfm))) {
-+			crp->crp_etype = EINVAL;
-+			dprintk("%s,%d: EINVAL len %d < %d\n", __FILE__, __LINE__,
-+					sg_len, crypto_blkcipher_blocksize(
-+						crypto_blkcipher_cast(sw->sw_tfm)));
-+			goto done;
-+		}
-+
-+		if (ivsize > sizeof(iv)) {
-+			crp->crp_etype = EINVAL;
-+			dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+			goto done;
-+		}
-+
-+		if (crd->crd_flags & CRD_F_KEY_EXPLICIT) {
-+			int i, error;
-+
-+			if (debug) {
-+				dprintk("%s key:", __FUNCTION__);
-+				for (i = 0; i < (crd->crd_klen + 7) / 8; i++)
-+					dprintk("%s0x%x", (i % 8) ? " " : "\n    ",
-+							crd->crd_key[i] & 0xff);
-+				dprintk("\n");
-+			}
-+			/* OCF doesn't enforce keys */
-+			crypto_blkcipher_set_flags(crypto_blkcipher_cast(sw->sw_tfm),
-+					CRYPTO_TFM_REQ_WEAK_KEY);
-+			error = crypto_blkcipher_setkey(
-+						crypto_blkcipher_cast(sw->sw_tfm), crd->crd_key,
-+						(crd->crd_klen + 7) / 8);
-+			if (error) {
-+				dprintk("cryptosoft: setkey failed %d (crt_flags=0x%x)\n",
-+						error, sw->sw_tfm->crt_flags);
-+				crp->crp_etype = -error;
-+			}
-+		}
-+
-+		memset(&desc, 0, sizeof(desc));
-+		desc.tfm = crypto_blkcipher_cast(sw->sw_tfm);
-+
-+		if (crd->crd_flags & CRD_F_ENCRYPT) { /* encrypt */
-+
-+			if (crd->crd_flags & CRD_F_IV_EXPLICIT) {
-+				ivp = crd->crd_iv;
-+			} else {
-+				get_random_bytes(ivp, ivsize);
-+			}
-+			/*
-+			 * do we have to copy the IV back to the buffer ?
-+			 */
-+			if ((crd->crd_flags & CRD_F_IV_PRESENT) == 0) {
-+				crypto_copyback(crp->crp_flags, crp->crp_buf,
-+						crd->crd_inject, ivsize, (caddr_t)ivp);
-+			}
-+			desc.info = ivp;
-+			crypto_blkcipher_encrypt_iv(&desc, req->sg, req->sg, sg_len);
-+
-+		} else { /*decrypt */
-+
-+			if (crd->crd_flags & CRD_F_IV_EXPLICIT) {
-+				ivp = crd->crd_iv;
-+			} else {
-+				crypto_copydata(crp->crp_flags, crp->crp_buf,
-+						crd->crd_inject, ivsize, (caddr_t)ivp);
-+			}
-+			desc.info = ivp;
-+			crypto_blkcipher_decrypt_iv(&desc, req->sg, req->sg, sg_len);
-+		}
-+		} break;
-+
-+	case SW_TYPE_HMAC:
-+	case SW_TYPE_HASH:
-+		{
-+		char result[HASH_MAX_LEN];
-+		struct hash_desc desc;
-+
-+		/* check we have room for the result */
-+		if (crp->crp_ilen - crd->crd_inject < sw->u.hmac.sw_mlen) {
-+			dprintk("cryptosoft: EINVAL crp_ilen=%d, len=%d, inject=%d "
-+					"digestsize=%d\n", crp->crp_ilen, crd->crd_skip + sg_len,
-+					crd->crd_inject, sw->u.hmac.sw_mlen);
-+			crp->crp_etype = EINVAL;
-+			goto done;
-+		}
-+
-+		memset(&desc, 0, sizeof(desc));
-+		desc.tfm = crypto_hash_cast(sw->sw_tfm);
-+
-+		memset(result, 0, sizeof(result));
-+
-+		if (sw->sw_type & SW_TYPE_HMAC) {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+			crypto_hmac(sw->sw_tfm, sw->u.hmac.sw_key, &sw->u.hmac.sw_klen,
-+					req->sg, sg_num, result);
-+#else
-+			crypto_hash_setkey(desc.tfm, sw->u.hmac.sw_key,
-+					sw->u.hmac.sw_klen);
-+			crypto_hash_digest(&desc, req->sg, sg_len, result);
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) */
-+			
-+		} else { /* SW_TYPE_HASH */
-+			crypto_hash_digest(&desc, req->sg, sg_len, result);
-+		}
-+
-+		crypto_copyback(crp->crp_flags, crp->crp_buf,
-+				crd->crd_inject, sw->u.hmac.sw_mlen, result);
-+		}
-+		break;
-+
-+	case SW_TYPE_COMP: {
-+		void *ibuf = NULL;
-+		void *obuf = sw->u.sw_comp_buf;
-+		int ilen = sg_len, olen = CRYPTO_MAX_DATA_LEN;
-+		int ret = 0;
-+
-+		/*
-+		 * we need to use an additional copy if there is more than one
-+		 * input chunk since the kernel comp routines do not handle
-+		 * SG yet.  Otherwise we just use the input buffer as is.
-+		 * Rather than allocate another buffer we just split the tmp
-+		 * buffer we already have.
-+		 * Perhaps we should just use zlib directly ?
-+		 */
-+		if (sg_num > 1) {
-+			int blk;
-+
-+			ibuf = obuf;
-+			for (blk = 0; blk < sg_num; blk++) {
-+				memcpy(obuf, sg_virt(&req->sg[blk]),
-+						req->sg[blk].length);
-+				obuf += req->sg[blk].length;
-+			}
-+			olen -= sg_len;
-+		} else
-+			ibuf = sg_virt(&req->sg[0]);
-+
-+		if (crd->crd_flags & CRD_F_ENCRYPT) { /* compress */
-+			ret = crypto_comp_compress(crypto_comp_cast(sw->sw_tfm),
-+					ibuf, ilen, obuf, &olen);
-+			if (!ret && olen > crd->crd_len) {
-+				dprintk("cryptosoft: ERANGE compress %d into %d\n",
-+						crd->crd_len, olen);
-+				if (swcr_fail_if_compression_grows)
-+					ret = ERANGE;
-+			}
-+		} else { /* decompress */
-+			ret = crypto_comp_decompress(crypto_comp_cast(sw->sw_tfm),
-+					ibuf, ilen, obuf, &olen);
-+			if (!ret && (olen + crd->crd_inject) > crp->crp_olen) {
-+				dprintk("cryptosoft: ETOOSMALL decompress %d into %d, "
-+						"space for %d,at offset %d\n",
-+						crd->crd_len, olen, crp->crp_olen, crd->crd_inject);
-+				ret = ETOOSMALL;
-+			}
-+		}
-+		if (ret)
-+			dprintk("%s,%d: ret = %d\n", __FILE__, __LINE__, ret);
-+
-+		/*
-+		 * on success copy result back,
-+		 * linux crpyto API returns -errno,  we need to fix that
-+		 */
-+		crp->crp_etype = ret < 0 ? -ret : ret;
-+		if (ret == 0) {
-+			/* copy back the result and return it's size */
-+			crypto_copyback(crp->crp_flags, crp->crp_buf,
-+					crd->crd_inject, olen, obuf);
-+			crp->crp_olen = olen;
-+		}
-+
-+
-+		} break;
-+
-+	default:
-+		/* Unknown/unsupported algorithm */
-+		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+		crp->crp_etype = EINVAL;
-+		goto done;
-+	}
-+
-+done:
-+	crypto_done(crp);
-+	kmem_cache_free(swcr_req_cache, req);
-+}
-+
-+
-+/*
-+ * Process a crypto request.
-+ */
-+static int
-+swcr_process(device_t dev, struct cryptop *crp, int hint)
-+{
-+	struct swcr_req *req = NULL;
-+	u_int32_t lid;
-+
-+	dprintk("%s()\n", __FUNCTION__);
-+	/* Sanity check */
-+	if (crp == NULL) {
-+		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+		return EINVAL;
-+	}
-+
-+	crp->crp_etype = 0;
-+
-+	if (crp->crp_desc == NULL || crp->crp_buf == NULL) {
-+		dprintk("%s,%d: EINVAL\n", __FILE__, __LINE__);
-+		crp->crp_etype = EINVAL;
-+		goto done;
-+	}
-+
-+	lid = crp->crp_sid & 0xffffffff;
-+	if (lid >= swcr_sesnum || lid == 0 || swcr_sessions == NULL ||
-+			swcr_sessions[lid] == NULL) {
-+		crp->crp_etype = ENOENT;
-+		dprintk("%s,%d: ENOENT\n", __FILE__, __LINE__);
-+		goto done;
-+	}
-+
-+	/*
-+	 * do some error checking outside of the loop for SKB and IOV processing
-+	 * this leaves us with valid skb or uiop pointers for later
-+	 */
-+	if (crp->crp_flags & CRYPTO_F_SKBUF) {
-+		struct sk_buff *skb = (struct sk_buff *) crp->crp_buf;
-+		if (skb_shinfo(skb)->nr_frags >= SCATTERLIST_MAX) {
-+			printk("%s,%d: %d nr_frags > SCATTERLIST_MAX", __FILE__, __LINE__,
-+					skb_shinfo(skb)->nr_frags);
-+			goto done;
-+		}
-+	} else if (crp->crp_flags & CRYPTO_F_IOV) {
-+		struct uio *uiop = (struct uio *) crp->crp_buf;
-+		if (uiop->uio_iovcnt > SCATTERLIST_MAX) {
-+			printk("%s,%d: %d uio_iovcnt > SCATTERLIST_MAX", __FILE__, __LINE__,
-+					uiop->uio_iovcnt);
-+			goto done;
-+		}
-+	}
-+
-+	/*
-+	 * setup a new request ready for queuing
-+	 */
-+	req = kmem_cache_alloc(swcr_req_cache, SLAB_ATOMIC);
-+	if (req == NULL) {
-+		dprintk("%s,%d: ENOMEM\n", __FILE__, __LINE__);
-+		crp->crp_etype = ENOMEM;
-+		goto done;
-+	}
-+	memset(req, 0, sizeof(*req));
-+
-+	req->sw_head = swcr_sessions[lid];
-+	req->crp = crp;
-+	req->crd = crp->crp_desc;
-+
-+	swcr_process_req(req);
-+	return 0;
-+
-+done:
-+	crypto_done(crp);
-+	if (req)
-+		kmem_cache_free(swcr_req_cache, req);
-+	return 0;
-+}
-+
-+
-+static int
-+cryptosoft_init(void)
-+{
-+	int i, sw_type, mode;
-+	char *algo;
-+
-+	dprintk("%s(%p)\n", __FUNCTION__, cryptosoft_init);
-+
-+	swcr_req_cache = kmem_cache_create("cryptosoft_req",
-+				sizeof(struct swcr_req), 0, SLAB_HWCACHE_ALIGN, NULL
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+				, NULL
-+#endif
-+				);
-+	if (!swcr_req_cache) {
-+		printk("cryptosoft: failed to create request cache\n");
-+		return -ENOENT;
-+	}
-+
-+	softc_device_init(&swcr_softc, "cryptosoft", 0, swcr_methods);
-+
-+	swcr_id = crypto_get_driverid(softc_get_device(&swcr_softc),
-+			CRYPTOCAP_F_SOFTWARE | CRYPTOCAP_F_SYNC);
-+	if (swcr_id < 0) {
-+		printk("cryptosoft: Software crypto device cannot initialize!");
-+		return -ENODEV;
-+	}
-+
-+#define	REGISTER(alg) \
-+		crypto_register(swcr_id, alg, 0,0)
-+
-+	for (i = 0; i < sizeof(crypto_details)/sizeof(crypto_details[0]); i++) {
-+		int found;
-+		
-+		algo = crypto_details[i].alg_name;
-+		if (!algo || !*algo) {
-+			dprintk("%s:Algorithm %d not supported\n", __FUNCTION__, i);
-+			continue;
-+		}
-+
-+		mode = crypto_details[i].mode;
-+		sw_type = crypto_details[i].sw_type;
-+
-+		found = 0;
-+		switch (sw_type & SW_TYPE_ALG_MASK) {
-+		case SW_TYPE_CIPHER:
-+			found = crypto_has_cipher(algo, 0, CRYPTO_ALG_ASYNC);
-+			break;
-+		case SW_TYPE_HMAC:
-+			found = crypto_has_hash(algo, 0, swcr_no_ahash?CRYPTO_ALG_ASYNC:0);
-+			break;
-+		case SW_TYPE_HASH:
-+			found = crypto_has_hash(algo, 0, swcr_no_ahash?CRYPTO_ALG_ASYNC:0);
-+			break;
-+		case SW_TYPE_COMP:
-+			found = crypto_has_comp(algo, 0, CRYPTO_ALG_ASYNC);
-+			break;
-+		case SW_TYPE_BLKCIPHER:
-+			found = crypto_has_blkcipher(algo, 0, CRYPTO_ALG_ASYNC);
-+			if (!found && !swcr_no_ablk)
-+				found = crypto_has_ablkcipher(algo, 0, 0);
-+			break;
-+		}
-+		if (found) {
-+			REGISTER(i);
-+		} else {
-+			dprintk("%s:Algorithm Type %d not supported (algorithm %d:'%s')\n",
-+					__FUNCTION__, sw_type, i, algo);
-+		}
-+	}
-+	return 0;
-+}
-+
-+static void
-+cryptosoft_exit(void)
-+{
-+	dprintk("%s()\n", __FUNCTION__);
-+	crypto_unregister_all(swcr_id);
-+	swcr_id = -1;
-+	kmem_cache_destroy(swcr_req_cache);
-+}
-+
-+late_initcall(cryptosoft_init);
-+module_exit(cryptosoft_exit);
-+
-+MODULE_LICENSE("Dual BSD/GPL");
-+MODULE_AUTHOR("David McCullough <david_mccullough at securecomputing.com>");
-+MODULE_DESCRIPTION("Cryptosoft (OCF module for kernel crypto)");
-diff --git a/crypto/ocf/ocf-bench.c b/crypto/ocf/ocf-bench.c
-new file mode 100644
-index 0000000..d325231
---- /dev/null
-+++ b/crypto/ocf/ocf-bench.c
-@@ -0,0 +1,436 @@
-+/*
-+ * A loadable module that benchmarks the OCF crypto speed from kernel space.
-+ *
-+ * Copyright (C) 2004-2010 David McCullough <david_mccullough at mcafee.com>
-+ *
-+ * LICENSE TERMS
-+ *
-+ * The free distribution and use of this software in both source and binary
-+ * form is allowed (with or without changes) provided that:
-+ *
-+ *   1. distributions of this source code include the above copyright
-+ *      notice, this list of conditions and the following disclaimer;
-+ *
-+ *   2. distributions in binary form include the above copyright
-+ *      notice, this list of conditions and the following disclaimer
-+ *      in the documentation and/or other associated materials;
-+ *
-+ *   3. the copyright holder's name is not used to endorse products
-+ *      built using this software without specific written permission.
-+ *
-+ * ALTERNATIVELY, provided that this notice is retained in full, this product
-+ * may be distributed under the terms of the GNU General Public License (GPL),
-+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
-+ *
-+ * DISCLAIMER
-+ *
-+ * This software is provided 'as is' with no explicit or implied warranties
-+ * in respect of its properties, including, but not limited to, correctness
-+ * and/or fitness for purpose.
-+ */
-+
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/slab.h>
-+#include <linux/wait.h>
-+#include <linux/sched.h>
-+#include <linux/spinlock.h>
-+#include <linux/version.h>
-+#include <linux/interrupt.h>
-+#include <cryptodev.h>
-+
-+#ifdef I_HAVE_AN_XSCALE_WITH_INTEL_SDK
-+#define BENCH_IXP_ACCESS_LIB 1
-+#endif
-+#ifdef BENCH_IXP_ACCESS_LIB
-+#include <IxTypes.h>
-+#include <IxOsBuffMgt.h>
-+#include <IxNpeDl.h>
-+#include <IxCryptoAcc.h>
-+#include <IxQMgr.h>
-+#include <IxOsServices.h>
-+#include <IxOsCacheMMU.h>
-+#endif
-+
-+/*
-+ * support for access lib version 1.4
-+ */
-+#ifndef IX_MBUF_PRIV
-+#define IX_MBUF_PRIV(x) ((x)->priv)
-+#endif
-+
-+/*
-+ * the number of simultaneously active requests
-+ */
-+static int request_q_len = 20;
-+module_param(request_q_len, int, 0);
-+MODULE_PARM_DESC(request_q_len, "Number of outstanding requests");
-+/*
-+ * how many requests we want to have processed
-+ */
-+static int request_num = 1024;
-+module_param(request_num, int, 0);
-+MODULE_PARM_DESC(request_num, "run for at least this many requests");
-+/*
-+ * the size of each request
-+ */
-+static int request_size = 1500;
-+module_param(request_size, int, 0);
-+MODULE_PARM_DESC(request_size, "size of each request");
-+
-+/*
-+ * a structure for each request
-+ */
-+typedef struct  {
-+	struct work_struct work;
-+#ifdef BENCH_IXP_ACCESS_LIB
-+	IX_MBUF mbuf;
-+#endif
-+	unsigned char *buffer;
-+} request_t;
-+
-+static request_t *requests;
-+
-+static int outstanding;
-+static int total;
-+
-+/*************************************************************************/
-+/*
-+ * OCF benchmark routines
-+ */
-+
-+static uint64_t ocf_cryptoid;
-+static int ocf_init(void);
-+static int ocf_cb(struct cryptop *crp);
-+static void ocf_request(void *arg);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-+static void ocf_request_wq(struct work_struct *work);
-+#endif
-+
-+static int
-+ocf_init(void)
-+{
-+	int error;
-+	struct cryptoini crie, cria;
-+	struct cryptodesc crda, crde;
-+
-+	memset(&crie, 0, sizeof(crie));
-+	memset(&cria, 0, sizeof(cria));
-+	memset(&crde, 0, sizeof(crde));
-+	memset(&crda, 0, sizeof(crda));
-+
-+	cria.cri_alg  = CRYPTO_SHA1_HMAC;
-+	cria.cri_klen = 20 * 8;
-+	cria.cri_key  = "0123456789abcdefghij";
-+
-+	crie.cri_alg  = CRYPTO_3DES_CBC;
-+	crie.cri_klen = 24 * 8;
-+	crie.cri_key  = "0123456789abcdefghijklmn";
-+
-+	crie.cri_next = &cria;
-+
-+	error = crypto_newsession(&ocf_cryptoid, &crie, 0);
-+	if (error) {
-+		printk("crypto_newsession failed %d\n", error);
-+		return -1;
-+	}
-+	return 0;
-+}
-+
-+static int
-+ocf_cb(struct cryptop *crp)
-+{
-+	request_t *r = (request_t *) crp->crp_opaque;
-+
-+	if (crp->crp_etype)
-+		printk("Error in OCF processing: %d\n", crp->crp_etype);
-+	total++;
-+	crypto_freereq(crp);
-+	crp = NULL;
-+
-+	if (total > request_num) {
-+		outstanding--;
-+		return 0;
-+	}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-+	INIT_WORK(&r->work, ocf_request_wq);
-+#else
-+	INIT_WORK(&r->work, ocf_request, r);
-+#endif
-+	schedule_work(&r->work);
-+	return 0;
-+}
-+
-+
-+static void
-+ocf_request(void *arg)
-+{
-+	request_t *r = arg;
-+	struct cryptop *crp = crypto_getreq(2);
-+	struct cryptodesc *crde, *crda;
-+
-+	if (!crp) {
-+		outstanding--;
-+		return;
-+	}
-+
-+	crde = crp->crp_desc;
-+	crda = crde->crd_next;
-+
-+	crda->crd_skip = 0;
-+	crda->crd_flags = 0;
-+	crda->crd_len = request_size;
-+	crda->crd_inject = request_size;
-+	crda->crd_alg = CRYPTO_SHA1_HMAC;
-+	crda->crd_key = "0123456789abcdefghij";
-+	crda->crd_klen = 20 * 8;
-+
-+	crde->crd_skip = 0;
-+	crde->crd_flags = CRD_F_IV_EXPLICIT | CRD_F_ENCRYPT;
-+	crde->crd_len = request_size;
-+	crde->crd_inject = request_size;
-+	crde->crd_alg = CRYPTO_3DES_CBC;
-+	crde->crd_key = "0123456789abcdefghijklmn";
-+	crde->crd_klen = 24 * 8;
-+
-+	crp->crp_ilen = request_size + 64;
-+	crp->crp_flags = CRYPTO_F_CBIMM;
-+	crp->crp_buf = (caddr_t) r->buffer;
-+	crp->crp_callback = ocf_cb;
-+	crp->crp_sid = ocf_cryptoid;
-+	crp->crp_opaque = (caddr_t) r;
-+	crypto_dispatch(crp);
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-+static void
-+ocf_request_wq(struct work_struct *work)
-+{
-+	request_t *r = container_of(work, request_t, work);
-+	ocf_request(r);
-+}
-+#endif
-+
-+/*************************************************************************/
-+#ifdef BENCH_IXP_ACCESS_LIB
-+/*************************************************************************/
-+/*
-+ * CryptoAcc benchmark routines
-+ */
-+
-+static IxCryptoAccCtx ixp_ctx;
-+static UINT32 ixp_ctx_id;
-+static IX_MBUF ixp_pri;
-+static IX_MBUF ixp_sec;
-+static int ixp_registered = 0;
-+
-+static void ixp_register_cb(UINT32 ctx_id, IX_MBUF *bufp,
-+					IxCryptoAccStatus status);
-+static void ixp_perform_cb(UINT32 ctx_id, IX_MBUF *sbufp, IX_MBUF *dbufp,
-+					IxCryptoAccStatus status);
-+static void ixp_request(void *arg);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-+static void ixp_request_wq(struct work_struct *work);
-+#endif
-+
-+static int
-+ixp_init(void)
-+{
-+	IxCryptoAccStatus status;
-+
-+	ixp_ctx.cipherCtx.cipherAlgo = IX_CRYPTO_ACC_CIPHER_3DES;
-+	ixp_ctx.cipherCtx.cipherMode = IX_CRYPTO_ACC_MODE_CBC;
-+	ixp_ctx.cipherCtx.cipherKeyLen = 24;
-+	ixp_ctx.cipherCtx.cipherBlockLen = IX_CRYPTO_ACC_DES_BLOCK_64;
-+	ixp_ctx.cipherCtx.cipherInitialVectorLen = IX_CRYPTO_ACC_DES_IV_64;
-+	memcpy(ixp_ctx.cipherCtx.key.cipherKey, "0123456789abcdefghijklmn", 24);
-+
-+	ixp_ctx.authCtx.authAlgo = IX_CRYPTO_ACC_AUTH_SHA1;
-+	ixp_ctx.authCtx.authDigestLen = 12;
-+	ixp_ctx.authCtx.aadLen = 0;
-+	ixp_ctx.authCtx.authKeyLen = 20;
-+	memcpy(ixp_ctx.authCtx.key.authKey, "0123456789abcdefghij", 20);
-+
-+	ixp_ctx.useDifferentSrcAndDestMbufs = 0;
-+	ixp_ctx.operation = IX_CRYPTO_ACC_OP_ENCRYPT_AUTH ;
-+
-+	IX_MBUF_MLEN(&ixp_pri)  = IX_MBUF_PKT_LEN(&ixp_pri) = 128;
-+	IX_MBUF_MDATA(&ixp_pri) = (unsigned char *) kmalloc(128, SLAB_ATOMIC);
-+	IX_MBUF_MLEN(&ixp_sec)  = IX_MBUF_PKT_LEN(&ixp_sec) = 128;
-+	IX_MBUF_MDATA(&ixp_sec) = (unsigned char *) kmalloc(128, SLAB_ATOMIC);
-+
-+	status = ixCryptoAccCtxRegister(&ixp_ctx, &ixp_pri, &ixp_sec,
-+			ixp_register_cb, ixp_perform_cb, &ixp_ctx_id);
-+
-+	if (IX_CRYPTO_ACC_STATUS_SUCCESS == status) {
-+		while (!ixp_registered)
-+			schedule();
-+		return ixp_registered < 0 ? -1 : 0;
-+	}
-+
-+	printk("ixp: ixCryptoAccCtxRegister failed %d\n", status);
-+	return -1;
-+}
-+
-+static void
-+ixp_register_cb(UINT32 ctx_id, IX_MBUF *bufp, IxCryptoAccStatus status)
-+{
-+	if (bufp) {
-+		IX_MBUF_MLEN(bufp) = IX_MBUF_PKT_LEN(bufp) = 0;
-+		kfree(IX_MBUF_MDATA(bufp));
-+		IX_MBUF_MDATA(bufp) = NULL;
-+	}
-+
-+	if (IX_CRYPTO_ACC_STATUS_WAIT == status)
-+		return;
-+	if (IX_CRYPTO_ACC_STATUS_SUCCESS == status)
-+		ixp_registered = 1;
-+	else
-+		ixp_registered = -1;
-+}
-+
-+static void
-+ixp_perform_cb(
-+	UINT32 ctx_id,
-+	IX_MBUF *sbufp,
-+	IX_MBUF *dbufp,
-+	IxCryptoAccStatus status)
-+{
-+	request_t *r = NULL;
-+
-+	total++;
-+	if (total > request_num) {
-+		outstanding--;
-+		return;
-+	}
-+
-+	if (!sbufp || !(r = IX_MBUF_PRIV(sbufp))) {
-+		printk("crappo %p %p\n", sbufp, r);
-+		outstanding--;
-+		return;
-+	}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-+	INIT_WORK(&r->work, ixp_request_wq);
-+#else
-+	INIT_WORK(&r->work, ixp_request, r);
-+#endif
-+	schedule_work(&r->work);
-+}
-+
-+static void
-+ixp_request(void *arg)
-+{
-+	request_t *r = arg;
-+	IxCryptoAccStatus status;
-+
-+	memset(&r->mbuf, 0, sizeof(r->mbuf));
-+	IX_MBUF_MLEN(&r->mbuf) = IX_MBUF_PKT_LEN(&r->mbuf) = request_size + 64;
-+	IX_MBUF_MDATA(&r->mbuf) = r->buffer;
-+	IX_MBUF_PRIV(&r->mbuf) = r;
-+	status = ixCryptoAccAuthCryptPerform(ixp_ctx_id, &r->mbuf, NULL,
-+			0, request_size, 0, request_size, request_size, r->buffer);
-+	if (IX_CRYPTO_ACC_STATUS_SUCCESS != status) {
-+		printk("status1 = %d\n", status);
-+		outstanding--;
-+		return;
-+	}
-+	return;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-+static void
-+ixp_request_wq(struct work_struct *work)
-+{
-+	request_t *r = container_of(work, request_t, work);
-+	ixp_request(r);
-+}
-+#endif
-+
-+/*************************************************************************/
-+#endif /* BENCH_IXP_ACCESS_LIB */
-+/*************************************************************************/
-+
-+int
-+ocfbench_init(void)
-+{
-+	int i, jstart, jstop;
-+
-+	printk("Crypto Speed tests\n");
-+
-+	requests = kmalloc(sizeof(request_t) * request_q_len, GFP_KERNEL);
-+	if (!requests) {
-+		printk("malloc failed\n");
-+		return -EINVAL;
-+	}
-+
-+	for (i = 0; i < request_q_len; i++) {
-+		/* +64 for return data */
-+		requests[i].buffer = kmalloc(request_size + 128, GFP_DMA);
-+		if (!requests[i].buffer) {
-+			printk("malloc failed\n");
-+			return -EINVAL;
-+		}
-+		memset(requests[i].buffer, '0' + i, request_size + 128);
-+	}
-+
-+	/*
-+	 * OCF benchmark
-+	 */
-+	printk("OCF: testing ...\n");
-+	ocf_init();
-+	total = outstanding = 0;
-+	jstart = jiffies;
-+	for (i = 0; i < request_q_len; i++) {
-+		outstanding++;
-+		ocf_request(&requests[i]);
-+	}
-+	while (outstanding > 0)
-+		schedule();
-+	jstop = jiffies;
-+
-+	printk("OCF: %d requests of %d bytes in %d jiffies\n", total, request_size,
-+			jstop - jstart);
-+
-+#ifdef BENCH_IXP_ACCESS_LIB
-+	/*
-+	 * IXP benchmark
-+	 */
-+	printk("IXP: testing ...\n");
-+	ixp_init();
-+	total = outstanding = 0;
-+	jstart = jiffies;
-+	for (i = 0; i < request_q_len; i++) {
-+		outstanding++;
-+		ixp_request(&requests[i]);
-+	}
-+	while (outstanding > 0)
-+		schedule();
-+	jstop = jiffies;
-+
-+	printk("IXP: %d requests of %d bytes in %d jiffies\n", total, request_size,
-+			jstop - jstart);
-+#endif /* BENCH_IXP_ACCESS_LIB */
-+
-+	for (i = 0; i < request_q_len; i++)
-+		kfree(requests[i].buffer);
-+	kfree(requests);
-+	return -EINVAL; /* always fail to load so it can be re-run quickly ;-) */
-+}
-+
-+static void __exit ocfbench_exit(void)
-+{
-+}
-+
-+module_init(ocfbench_init);
-+module_exit(ocfbench_exit);
-+
-+MODULE_LICENSE("BSD");
-+MODULE_AUTHOR("David McCullough <david_mccullough at mcafee.com>");
-+MODULE_DESCRIPTION("Benchmark various in-kernel crypto speeds");
-diff --git a/crypto/ocf/ocf-compat.h b/crypto/ocf/ocf-compat.h
-new file mode 100644
-index 0000000..212f971
---- /dev/null
-+++ b/crypto/ocf/ocf-compat.h
-@@ -0,0 +1,294 @@
-+#ifndef _BSD_COMPAT_H_
-+#define _BSD_COMPAT_H_ 1
-+/****************************************************************************/
-+/*
-+ * Provide compat routines for older linux kernels and BSD kernels
-+ *
-+ * Written by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2010 David McCullough <david_mccullough at mcafee.com>
-+ *
-+ * LICENSE TERMS
-+ *
-+ * The free distribution and use of this software in both source and binary
-+ * form is allowed (with or without changes) provided that:
-+ *
-+ *   1. distributions of this source code include the above copyright
-+ *      notice, this list of conditions and the following disclaimer;
-+ *
-+ *   2. distributions in binary form include the above copyright
-+ *      notice, this list of conditions and the following disclaimer
-+ *      in the documentation and/or other associated materials;
-+ *
-+ *   3. the copyright holder's name is not used to endorse products
-+ *      built using this software without specific written permission.
-+ *
-+ * ALTERNATIVELY, provided that this notice is retained in full, this file
-+ * may be distributed under the terms of the GNU General Public License (GPL),
-+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
-+ *
-+ * DISCLAIMER
-+ *
-+ * This software is provided 'as is' with no explicit or implied warranties
-+ * in respect of its properties, including, but not limited to, correctness
-+ * and/or fitness for purpose.
-+ */
-+/****************************************************************************/
-+#ifdef __KERNEL__
-+/*
-+ * fake some BSD driver interface stuff specifically for OCF use
-+ */
-+
-+typedef struct ocf_device *device_t;
-+
-+typedef struct {
-+	int (*cryptodev_newsession)(device_t dev, u_int32_t *sidp, struct cryptoini *cri);
-+	int (*cryptodev_freesession)(device_t dev, u_int64_t tid);
-+	int (*cryptodev_process)(device_t dev, struct cryptop *crp, int hint);
-+	int (*cryptodev_kprocess)(device_t dev, struct cryptkop *krp, int hint);
-+} device_method_t;
-+#define DEVMETHOD(id, func)	id: func
-+
-+struct ocf_device {
-+	char name[32];		/* the driver name */
-+	char nameunit[32];	/* the driver name + HW instance */
-+	int  unit;
-+	device_method_t	methods;
-+	void *softc;
-+};
-+
-+#define CRYPTODEV_NEWSESSION(dev, sid, cri) \
-+	((*(dev)->methods.cryptodev_newsession)(dev,sid,cri))
-+#define CRYPTODEV_FREESESSION(dev, sid) \
-+	((*(dev)->methods.cryptodev_freesession)(dev, sid))
-+#define CRYPTODEV_PROCESS(dev, crp, hint) \
-+	((*(dev)->methods.cryptodev_process)(dev, crp, hint))
-+#define CRYPTODEV_KPROCESS(dev, krp, hint) \
-+	((*(dev)->methods.cryptodev_kprocess)(dev, krp, hint))
-+
-+#define device_get_name(dev)	((dev)->name)
-+#define device_get_nameunit(dev)	((dev)->nameunit)
-+#define device_get_unit(dev)	((dev)->unit)
-+#define device_get_softc(dev)	((dev)->softc)
-+
-+#define	softc_device_decl \
-+		struct ocf_device _device; \
-+		device_t
-+
-+#define	softc_device_init(_sc, _name, _unit, _methods) \
-+	if (1) {\
-+	strncpy((_sc)->_device.name, _name, sizeof((_sc)->_device.name) - 1); \
-+	snprintf((_sc)->_device.nameunit, sizeof((_sc)->_device.name), "%s%d", _name, _unit); \
-+	(_sc)->_device.unit = _unit; \
-+	(_sc)->_device.methods = _methods; \
-+	(_sc)->_device.softc = (void *) _sc; \
-+	*(device_t *)((softc_get_device(_sc))+1) = &(_sc)->_device; \
-+	} else
-+
-+#define	softc_get_device(_sc)	(&(_sc)->_device)
-+
-+/*
-+ * iomem support for 2.4 and 2.6 kernels
-+ */
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#define ocf_iomem_t	unsigned long
-+
-+/*
-+ * implement simple workqueue like support for older kernels
-+ */
-+
-+#include <linux/tqueue.h>
-+
-+#define work_struct tq_struct
-+
-+#define INIT_WORK(wp, fp, ap) \
-+	do { \
-+		(wp)->sync = 0; \
-+		(wp)->routine = (fp); \
-+		(wp)->data = (ap); \
-+	} while (0)
-+
-+#define schedule_work(wp) \
-+	do { \
-+		queue_task((wp), &tq_immediate); \
-+		mark_bh(IMMEDIATE_BH); \
-+	} while (0)
-+
-+#define flush_scheduled_work()	run_task_queue(&tq_immediate)
-+
-+#else
-+#define ocf_iomem_t	void __iomem *
-+
-+#include <linux/workqueue.h>
-+
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+#include <linux/fdtable.h>
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
-+#define files_fdtable(files)	(files)
-+#endif
-+
-+#ifdef MODULE_PARM
-+#undef module_param	/* just in case */
-+#define	module_param(a,b,c)		MODULE_PARM(a,"i")
-+#endif
-+
-+#define bzero(s,l)		memset(s,0,l)
-+#define bcopy(s,d,l)	memcpy(d,s,l)
-+#define bcmp(x, y, l)	memcmp(x,y,l)
-+
-+#define MIN(x,y)	((x) < (y) ? (x) : (y))
-+
-+#define device_printf(dev, a...) ({ \
-+				printk("%s: ", device_get_nameunit(dev)); printk(a); \
-+			})
-+
-+#undef printf
-+#define printf(fmt...)	printk(fmt)
-+
-+#define KASSERT(c,p)	if (!(c)) { printk p ; } else
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#define ocf_daemonize(str) \
-+	daemonize(); \
-+	spin_lock_irq(&current->sigmask_lock); \
-+	sigemptyset(&current->blocked); \
-+	recalc_sigpending(current); \
-+	spin_unlock_irq(&current->sigmask_lock); \
-+	sprintf(current->comm, str);
-+#else
-+#define ocf_daemonize(str) daemonize(str);
-+#endif
-+
-+#define	TAILQ_INSERT_TAIL(q,d,m) list_add_tail(&(d)->m, (q))
-+#define	TAILQ_EMPTY(q)	list_empty(q)
-+#define	TAILQ_FOREACH(v, q, m) list_for_each_entry(v, q, m)
-+
-+#define read_random(p,l) get_random_bytes(p,l)
-+
-+#define DELAY(x)	((x) > 2000 ? mdelay((x)/1000) : udelay(x))
-+#define strtoul simple_strtoul
-+
-+#define pci_get_vendor(dev)	((dev)->vendor)
-+#define pci_get_device(dev)	((dev)->device)
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#define pci_set_consistent_dma_mask(dev, mask) (0)
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
-+#define pci_dma_sync_single_for_cpu pci_dma_sync_single
-+#endif
-+
-+#ifndef DMA_32BIT_MASK
-+#define DMA_32BIT_MASK  0x00000000ffffffffULL
-+#endif
-+
-+#ifndef htole32
-+#define htole32(x)	cpu_to_le32(x)
-+#endif
-+#ifndef htobe32
-+#define htobe32(x)	cpu_to_be32(x)
-+#endif
-+#ifndef htole16
-+#define htole16(x)	cpu_to_le16(x)
-+#endif
-+#ifndef htobe16
-+#define htobe16(x)	cpu_to_be16(x)
-+#endif
-+
-+/* older kernels don't have these */
-+
-+#include <asm/irq.h>
-+#if !defined(IRQ_NONE) && !defined(IRQ_RETVAL)
-+#define IRQ_NONE
-+#define IRQ_HANDLED
-+#define IRQ_WAKE_THREAD
-+#define IRQ_RETVAL
-+#define irqreturn_t void
-+typedef irqreturn_t (*irq_handler_t)(int irq, void *arg, struct pt_regs *regs);
-+#endif
-+#ifndef IRQF_SHARED
-+#define IRQF_SHARED	SA_SHIRQ
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-+# define strlcpy(dest,src,len) \
-+		({strncpy(dest,src,(len)-1); ((char *)dest)[(len)-1] = '\0'; })
-+#endif
-+
-+#ifndef MAX_ERRNO
-+#define MAX_ERRNO	4095
-+#endif
-+#ifndef IS_ERR_VALUE
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,5)
-+#include <linux/err.h>
-+#endif
-+#ifndef IS_ERR_VALUE
-+#define IS_ERR_VALUE(x) ((unsigned long)(x) >= (unsigned long)-MAX_ERRNO)
-+#endif
-+#endif
-+
-+/*
-+ * common debug for all
-+ */
-+#if 1
-+#define dprintk(a...)	do { if (debug) printk(a); } while(0)
-+#else
-+#define dprintk(a...)
-+#endif
-+
-+#ifndef SLAB_ATOMIC
-+/* Changed in 2.6.20, must use GFP_ATOMIC now */
-+#define	SLAB_ATOMIC	GFP_ATOMIC
-+#endif
-+
-+/*
-+ * need some additional support for older kernels */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,2)
-+#define pci_register_driver_compat(driver, rc) \
-+	do { \
-+		if ((rc) > 0) { \
-+			(rc) = 0; \
-+		} else if (rc == 0) { \
-+			(rc) = -ENODEV; \
-+		} else { \
-+			pci_unregister_driver(driver); \
-+		} \
-+	} while (0)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
-+#define pci_register_driver_compat(driver,rc) ((rc) = (rc) < 0 ? (rc) : 0)
-+#else
-+#define pci_register_driver_compat(driver,rc)
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
-+
-+#include <linux/mm.h>
-+#include <asm/scatterlist.h>
-+
-+static inline void sg_set_page(struct scatterlist *sg,  struct page *page,
-+			       unsigned int len, unsigned int offset)
-+{
-+	sg->page = page;
-+	sg->offset = offset;
-+	sg->length = len;
-+}
-+
-+static inline void *sg_virt(struct scatterlist *sg)
-+{
-+	return page_address(sg->page) + sg->offset;
-+}
-+
-+#define sg_init_table(sg, n)
-+
-+#endif
-+
-+#ifndef late_initcall
-+#define late_initcall(init) module_init(init)
-+#endif
-+
-+#endif /* __KERNEL__ */
-+
-+/****************************************************************************/
-+#endif /* _BSD_COMPAT_H_ */
-diff --git a/crypto/ocf/random.c b/crypto/ocf/random.c
-new file mode 100644
-index 0000000..2088822
---- /dev/null
-+++ b/crypto/ocf/random.c
-@@ -0,0 +1,322 @@
-+/*
-+ * A system independant way of adding entropy to the kernels pool
-+ * this way the drivers can focus on the real work and we can take
-+ * care of pushing it to the appropriate place in the kernel.
-+ *
-+ * This should be fast and callable from timers/interrupts
-+ *
-+ * Written by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ *
-+ * LICENSE TERMS
-+ *
-+ * The free distribution and use of this software in both source and binary
-+ * form is allowed (with or without changes) provided that:
-+ *
-+ *   1. distributions of this source code include the above copyright
-+ *      notice, this list of conditions and the following disclaimer;
-+ *
-+ *   2. distributions in binary form include the above copyright
-+ *      notice, this list of conditions and the following disclaimer
-+ *      in the documentation and/or other associated materials;
-+ *
-+ *   3. the copyright holder's name is not used to endorse products
-+ *      built using this software without specific written permission.
-+ *
-+ * ALTERNATIVELY, provided that this notice is retained in full, this product
-+ * may be distributed under the terms of the GNU General Public License (GPL),
-+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
-+ *
-+ * DISCLAIMER
-+ *
-+ * This software is provided 'as is' with no explicit or implied warranties
-+ * in respect of its properties, including, but not limited to, correctness
-+ * and/or fitness for purpose.
-+ */
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/slab.h>
-+#include <linux/wait.h>
-+#include <linux/sched.h>
-+#include <linux/spinlock.h>
-+#include <linux/version.h>
-+#include <linux/unistd.h>
-+#include <linux/poll.h>
-+#include <linux/random.h>
-+#include <crypto/cryptodev.h>
-+
-+#ifdef CONFIG_OCF_FIPS
-+#include "rndtest.h"
-+#endif
-+
-+#ifndef HAS_RANDOM_INPUT_WAIT
-+#error "Please do not enable OCF_RANDOMHARVEST unless you have applied patches"
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-+#include <linux/sched.h>
-+#define	kill_proc(p,s,v)	send_sig(s,find_task_by_vpid(p),0)
-+#endif
-+
-+/*
-+ * a hack to access the debug levels from the crypto driver
-+ */
-+extern int crypto_debug;
-+#define debug crypto_debug
-+
-+/*
-+ * a list of all registered random providers
-+ */
-+static LIST_HEAD(random_ops);
-+static int started = 0;
-+static int initted = 0;
-+
-+struct random_op {
-+	struct list_head random_list;
-+	u_int32_t driverid;
-+	int (*read_random)(void *arg, u_int32_t *buf, int len);
-+	void *arg;
-+};
-+
-+static int random_proc(void *arg);
-+
-+static pid_t		randomproc = (pid_t) -1;
-+static spinlock_t	random_lock;
-+
-+/*
-+ * just init the spin locks
-+ */
-+static int
-+crypto_random_init(void)
-+{
-+	spin_lock_init(&random_lock);
-+	initted = 1;
-+	return(0);
-+}
-+
-+/*
-+ * Add the given random reader to our list (if not present)
-+ * and start the thread (if not already started)
-+ *
-+ * we have to assume that driver id is ok for now
-+ */
-+int
-+crypto_rregister(
-+	u_int32_t driverid,
-+	int (*read_random)(void *arg, u_int32_t *buf, int len),
-+	void *arg)
-+{
-+	unsigned long flags;
-+	int ret = 0;
-+	struct random_op	*rops, *tmp;
-+
-+	dprintk("%s,%d: %s(0x%x, %p, %p)\n", __FILE__, __LINE__,
-+			__FUNCTION__, driverid, read_random, arg);
-+
-+	if (!initted)
-+		crypto_random_init();
-+
-+#if 0
-+	struct cryptocap	*cap;
-+
-+	cap = crypto_checkdriver(driverid);
-+	if (!cap)
-+		return EINVAL;
-+#endif
-+
-+	list_for_each_entry_safe(rops, tmp, &random_ops, random_list) {
-+		if (rops->driverid == driverid && rops->read_random == read_random)
-+			return EEXIST;
-+	}
-+
-+	rops = (struct random_op *) kmalloc(sizeof(*rops), GFP_KERNEL);
-+	if (!rops)
-+		return ENOMEM;
-+
-+	rops->driverid    = driverid;
-+	rops->read_random = read_random;
-+	rops->arg = arg;
-+
-+	spin_lock_irqsave(&random_lock, flags);
-+	list_add_tail(&rops->random_list, &random_ops);
-+	if (!started) {
-+		randomproc = kernel_thread(random_proc, NULL, CLONE_FS|CLONE_FILES);
-+		if (randomproc < 0) {
-+			ret = randomproc;
-+			printk("crypto: crypto_rregister cannot start random thread; "
-+					"error %d", ret);
-+		} else
-+			started = 1;
-+	}
-+	spin_unlock_irqrestore(&random_lock, flags);
-+
-+	return ret;
-+}
-+EXPORT_SYMBOL(crypto_rregister);
-+
-+int
-+crypto_runregister_all(u_int32_t driverid)
-+{
-+	struct random_op *rops, *tmp;
-+	unsigned long flags;
-+
-+	dprintk("%s,%d: %s(0x%x)\n", __FILE__, __LINE__, __FUNCTION__, driverid);
-+
-+	list_for_each_entry_safe(rops, tmp, &random_ops, random_list) {
-+		if (rops->driverid == driverid) {
-+			list_del(&rops->random_list);
-+			kfree(rops);
-+		}
-+	}
-+
-+	spin_lock_irqsave(&random_lock, flags);
-+	if (list_empty(&random_ops) && started)
-+		kill_proc(randomproc, SIGKILL, 1);
-+	spin_unlock_irqrestore(&random_lock, flags);
-+	return(0);
-+}
-+EXPORT_SYMBOL(crypto_runregister_all);
-+
-+/*
-+ * while we can add entropy to random.c continue to read random data from
-+ * the drivers and push it to random.
-+ */
-+static int
-+random_proc(void *arg)
-+{
-+	int n;
-+	int wantcnt;
-+	int bufcnt = 0;
-+	int retval = 0;
-+	int *buf = NULL;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+	daemonize();
-+	spin_lock_irq(&current->sigmask_lock);
-+	sigemptyset(&current->blocked);
-+	recalc_sigpending(current);
-+	spin_unlock_irq(&current->sigmask_lock);
-+	sprintf(current->comm, "ocf-random");
-+#else
-+	daemonize("ocf-random");
-+	allow_signal(SIGKILL);
-+#endif
-+
-+	(void) get_fs();
-+	set_fs(get_ds());
-+
-+#ifdef CONFIG_OCF_FIPS
-+#define NUM_INT (RNDTEST_NBYTES/sizeof(int))
-+#else
-+#define NUM_INT 32
-+#endif
-+
-+	/*
-+	 * some devices can transferr their RNG data direct into memory,
-+	 * so make sure it is device friendly
-+	 */
-+	buf = kmalloc(NUM_INT * sizeof(int), GFP_DMA);
-+	if (NULL == buf) {
-+		printk("crypto: RNG could not allocate memory\n");
-+		retval = -ENOMEM;
-+		goto bad_alloc;
-+	}
-+
-+	wantcnt = NUM_INT;   /* start by adding some entropy */
-+
-+	/*
-+	 * its possible due to errors or driver removal that we no longer
-+	 * have anything to do,  if so exit or we will consume all the CPU
-+	 * doing nothing
-+	 */
-+	while (!list_empty(&random_ops)) {
-+		struct random_op	*rops, *tmp;
-+
-+#ifdef CONFIG_OCF_FIPS
-+		if (wantcnt)
-+			wantcnt = NUM_INT; /* FIPs mode can do 20000 bits or none */
-+#endif
-+
-+		/* see if we can get enough entropy to make the world
-+		 * a better place.
-+		 */
-+		while (bufcnt < wantcnt && bufcnt < NUM_INT) {
-+			list_for_each_entry_safe(rops, tmp, &random_ops, random_list) {
-+
-+				n = (*rops->read_random)(rops->arg, &buf[bufcnt],
-+							 NUM_INT - bufcnt);
-+
-+				/* on failure remove the random number generator */
-+				if (n == -1) {
-+					list_del(&rops->random_list);
-+					printk("crypto: RNG (driverid=0x%x) failed, disabling\n",
-+							rops->driverid);
-+					kfree(rops);
-+				} else if (n > 0)
-+					bufcnt += n;
-+			}
-+			/* give up CPU for a bit, just in case as this is a loop */
-+			schedule();
-+		}
-+
-+
-+#ifdef CONFIG_OCF_FIPS
-+		if (bufcnt > 0 && rndtest_buf((unsigned char *) &buf[0])) {
-+			dprintk("crypto: buffer had fips errors, discarding\n");
-+			bufcnt = 0;
-+		}
-+#endif
-+
-+		/*
-+		 * if we have a certified buffer,  we can send some data
-+		 * to /dev/random and move along
-+		 */
-+		if (bufcnt > 0) {
-+			/* add what we have */
-+			random_input_words(buf, bufcnt, bufcnt*sizeof(int)*8);
-+			bufcnt = 0;
-+		}
-+
-+		/* give up CPU for a bit so we don't hog while filling */
-+		schedule();
-+
-+		/* wait for needing more */
-+		wantcnt = random_input_wait();
-+
-+		if (wantcnt <= 0)
-+			wantcnt = 0; /* try to get some info again */
-+		else
-+		 	/* round up to one word or we can loop forever */
-+			wantcnt = (wantcnt + (sizeof(int)*8)) / (sizeof(int)*8);
-+		if (wantcnt > NUM_INT) {
-+			wantcnt = NUM_INT;
-+		}
-+
-+		if (signal_pending(current)) {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+			spin_lock_irq(&current->sigmask_lock);
-+#endif
-+			flush_signals(current);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+			spin_unlock_irq(&current->sigmask_lock);
-+#endif
-+		}
-+	}
-+	
-+	kfree(buf);
-+
-+bad_alloc:
-+	spin_lock_irq(&random_lock);
-+	randomproc = (pid_t) -1;
-+	started = 0;
-+	spin_unlock_irq(&random_lock);
-+
-+	return retval;
-+}
-+
-diff --git a/crypto/ocf/rndtest.c b/crypto/ocf/rndtest.c
-new file mode 100644
-index 0000000..2295e9b
---- /dev/null
-+++ b/crypto/ocf/rndtest.c
-@@ -0,0 +1,300 @@
-+/*	$OpenBSD$	*/
-+
-+/*
-+ * OCF/Linux port done by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ * The license and original author are listed below.
-+ *
-+ * Copyright (c) 2002 Jason L. Wright (jason at thought.net)
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. All advertising materials mentioning features or use of this software
-+ *    must display the following acknowledgement:
-+ *	This product includes software developed by Jason L. Wright
-+ * 4. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef AUTOCONF_INCLUDED
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/list.h>
-+#include <linux/wait.h>
-+#include <linux/time.h>
-+#include <linux/version.h>
-+#include <linux/unistd.h>
-+#include <linux/kernel.h>
-+#include <linux/string.h>
-+#include <linux/time.h>
-+#include <crypto/cryptodev.h>
-+#include "rndtest.h"
-+
-+static struct rndtest_stats rndstats;
-+
-+static	void rndtest_test(struct rndtest_state *);
-+
-+/* The tests themselves */
-+static	int rndtest_monobit(struct rndtest_state *);
-+static	int rndtest_runs(struct rndtest_state *);
-+static	int rndtest_longruns(struct rndtest_state *);
-+static	int rndtest_chi_4(struct rndtest_state *);
-+
-+static	int rndtest_runs_check(struct rndtest_state *, int, int *);
-+static	void rndtest_runs_record(struct rndtest_state *, int, int *);
-+
-+static const struct rndtest_testfunc {
-+	int (*test)(struct rndtest_state *);
-+} rndtest_funcs[] = {
-+	{ rndtest_monobit },
-+	{ rndtest_runs },
-+	{ rndtest_chi_4 },
-+	{ rndtest_longruns },
-+};
-+
-+#define	RNDTEST_NTESTS	(sizeof(rndtest_funcs)/sizeof(rndtest_funcs[0]))
-+
-+static void
-+rndtest_test(struct rndtest_state *rsp)
-+{
-+	int i, rv = 0;
-+
-+	rndstats.rst_tests++;
-+	for (i = 0; i < RNDTEST_NTESTS; i++)
-+		rv |= (*rndtest_funcs[i].test)(rsp);
-+	rsp->rs_discard = (rv != 0);
-+}
-+
-+
-+extern int crypto_debug;
-+#define rndtest_verbose 2
-+#define rndtest_report(rsp, failure, fmt, a...) \
-+	{ if (failure || crypto_debug) { printk("rng_test: " fmt "\n", a); } else; }
-+
-+#define	RNDTEST_MONOBIT_MINONES	9725
-+#define	RNDTEST_MONOBIT_MAXONES	10275
-+
-+static int
-+rndtest_monobit(struct rndtest_state *rsp)
-+{
-+	int i, ones = 0, j;
-+	u_int8_t r;
-+
-+	for (i = 0; i < RNDTEST_NBYTES; i++) {
-+		r = rsp->rs_buf[i];
-+		for (j = 0; j < 8; j++, r <<= 1)
-+			if (r & 0x80)
-+				ones++;
-+	}
-+	if (ones > RNDTEST_MONOBIT_MINONES &&
-+	    ones < RNDTEST_MONOBIT_MAXONES) {
-+		if (rndtest_verbose > 1)
-+			rndtest_report(rsp, 0, "monobit pass (%d < %d < %d)",
-+			    RNDTEST_MONOBIT_MINONES, ones,
-+			    RNDTEST_MONOBIT_MAXONES);
-+		return (0);
-+	} else {
-+		if (rndtest_verbose)
-+			rndtest_report(rsp, 1,
-+			    "monobit failed (%d ones)", ones);
-+		rndstats.rst_monobit++;
-+		return (-1);
-+	}
-+}
-+
-+#define	RNDTEST_RUNS_NINTERVAL	6
-+
-+static const struct rndtest_runs_tabs {
-+	u_int16_t min, max;
-+} rndtest_runs_tab[] = {
-+	{ 2343, 2657 },
-+	{ 1135, 1365 },
-+	{ 542, 708 },
-+	{ 251, 373 },
-+	{ 111, 201 },
-+	{ 111, 201 },
-+};
-+
-+static int
-+rndtest_runs(struct rndtest_state *rsp)
-+{
-+	int i, j, ones, zeros, rv = 0;
-+	int onei[RNDTEST_RUNS_NINTERVAL], zeroi[RNDTEST_RUNS_NINTERVAL];
-+	u_int8_t c;
-+
-+	bzero(onei, sizeof(onei));
-+	bzero(zeroi, sizeof(zeroi));
-+	ones = zeros = 0;
-+	for (i = 0; i < RNDTEST_NBYTES; i++) {
-+		c = rsp->rs_buf[i];
-+		for (j = 0; j < 8; j++, c <<= 1) {
-+			if (c & 0x80) {
-+				ones++;
-+				rndtest_runs_record(rsp, zeros, zeroi);
-+				zeros = 0;
-+			} else {
-+				zeros++;
-+				rndtest_runs_record(rsp, ones, onei);
-+				ones = 0;
-+			}
-+		}
-+	}
-+	rndtest_runs_record(rsp, ones, onei);
-+	rndtest_runs_record(rsp, zeros, zeroi);
-+
-+	rv |= rndtest_runs_check(rsp, 0, zeroi);
-+	rv |= rndtest_runs_check(rsp, 1, onei);
-+
-+	if (rv)
-+		rndstats.rst_runs++;
-+
-+	return (rv);
-+}
-+
-+static void
-+rndtest_runs_record(struct rndtest_state *rsp, int len, int *intrv)
-+{
-+	if (len == 0)
-+		return;
-+	if (len > RNDTEST_RUNS_NINTERVAL)
-+		len = RNDTEST_RUNS_NINTERVAL;
-+	len -= 1;
-+	intrv[len]++;
-+}
-+
-+static int
-+rndtest_runs_check(struct rndtest_state *rsp, int val, int *src)
-+{
-+	int i, rv = 0;
-+
-+	for (i = 0; i < RNDTEST_RUNS_NINTERVAL; i++) {
-+		if (src[i] < rndtest_runs_tab[i].min ||
-+		    src[i] > rndtest_runs_tab[i].max) {
-+			rndtest_report(rsp, 1,
-+			    "%s interval %d failed (%d, %d-%d)",
-+			    val ? "ones" : "zeros",
-+			    i + 1, src[i], rndtest_runs_tab[i].min,
-+			    rndtest_runs_tab[i].max);
-+			rv = -1;
-+		} else {
-+			rndtest_report(rsp, 0,
-+			    "runs pass %s interval %d (%d < %d < %d)",
-+			    val ? "ones" : "zeros",
-+			    i + 1, rndtest_runs_tab[i].min, src[i],
-+			    rndtest_runs_tab[i].max);
-+		}
-+	}
-+	return (rv);
-+}
-+
-+static int
-+rndtest_longruns(struct rndtest_state *rsp)
-+{
-+	int i, j, ones = 0, zeros = 0, maxones = 0, maxzeros = 0;
-+	u_int8_t c;
-+
-+	for (i = 0; i < RNDTEST_NBYTES; i++) {
-+		c = rsp->rs_buf[i];
-+		for (j = 0; j < 8; j++, c <<= 1) {
-+			if (c & 0x80) {
-+				zeros = 0;
-+				ones++;
-+				if (ones > maxones)
-+					maxones = ones;
-+			} else {
-+				ones = 0;
-+				zeros++;
-+				if (zeros > maxzeros)
-+					maxzeros = zeros;
-+			}
-+		}
-+	}
-+
-+	if (maxones < 26 && maxzeros < 26) {
-+		rndtest_report(rsp, 0, "longruns pass (%d ones, %d zeros)",
-+			maxones, maxzeros);
-+		return (0);
-+	} else {
-+		rndtest_report(rsp, 1, "longruns fail (%d ones, %d zeros)",
-+			maxones, maxzeros);
-+		rndstats.rst_longruns++;
-+		return (-1);
-+	}
-+}
-+
-+/*
-+ * chi^2 test over 4 bits: (this is called the poker test in FIPS 140-2,
-+ * but it is really the chi^2 test over 4 bits (the poker test as described
-+ * by Knuth vol 2 is something different, and I take him as authoritative
-+ * on nomenclature over NIST).
-+ */
-+#define	RNDTEST_CHI4_K	16
-+#define	RNDTEST_CHI4_K_MASK	(RNDTEST_CHI4_K - 1)
-+
-+/*
-+ * The unnormalized values are used so that we don't have to worry about
-+ * fractional precision.  The "real" value is found by:
-+ *	(V - 1562500) * (16 / 5000) = Vn   (where V is the unnormalized value)
-+ */
-+#define	RNDTEST_CHI4_VMIN	1563181		/* 2.1792 */
-+#define	RNDTEST_CHI4_VMAX	1576929		/* 46.1728 */
-+
-+static int
-+rndtest_chi_4(struct rndtest_state *rsp)
-+{
-+	unsigned int freq[RNDTEST_CHI4_K], i, sum;
-+
-+	for (i = 0; i < RNDTEST_CHI4_K; i++)
-+		freq[i] = 0;
-+
-+	/* Get number of occurances of each 4 bit pattern */
-+	for (i = 0; i < RNDTEST_NBYTES; i++) {
-+		freq[(rsp->rs_buf[i] >> 4) & RNDTEST_CHI4_K_MASK]++;
-+		freq[(rsp->rs_buf[i] >> 0) & RNDTEST_CHI4_K_MASK]++;
-+	}
-+
-+	for (i = 0, sum = 0; i < RNDTEST_CHI4_K; i++)
-+		sum += freq[i] * freq[i];
-+
-+	if (sum >= 1563181 && sum <= 1576929) {
-+		rndtest_report(rsp, 0, "chi^2(4): pass (sum %u)", sum);
-+		return (0);
-+	} else {
-+		rndtest_report(rsp, 1, "chi^2(4): failed (sum %u)", sum);
-+		rndstats.rst_chi++;
-+		return (-1);
-+	}
-+}
-+
-+int
-+rndtest_buf(unsigned char *buf)
-+{
-+	struct rndtest_state rsp;
-+
-+	memset(&rsp, 0, sizeof(rsp));
-+	rsp.rs_buf = buf;
-+	rndtest_test(&rsp);
-+	return(rsp.rs_discard);
-+}
-+
-diff --git a/crypto/ocf/rndtest.h b/crypto/ocf/rndtest.h
-new file mode 100644
-index 0000000..e9d8ec8
---- /dev/null
-+++ b/crypto/ocf/rndtest.h
-@@ -0,0 +1,54 @@
-+/*	$FreeBSD: src/sys/dev/rndtest/rndtest.h,v 1.1 2003/03/11 22:54:44 sam Exp $	*/
-+/*	$OpenBSD$	*/
-+
-+/*
-+ * Copyright (c) 2002 Jason L. Wright (jason at thought.net)
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *    notice, this list of conditions and the following disclaimer in the
-+ *    documentation and/or other materials provided with the distribution.
-+ * 3. All advertising materials mentioning features or use of this software
-+ *    must display the following acknowledgement:
-+ *	This product includes software developed by Jason L. Wright
-+ * 4. The name of the author may not be used to endorse or promote products
-+ *    derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+
-+/* Some of the tests depend on these values */
-+#define	RNDTEST_NBYTES	2500
-+#define	RNDTEST_NBITS	(8 * RNDTEST_NBYTES)
-+
-+struct rndtest_state {
-+	int		rs_discard;	/* discard/accept random data */
-+	u_int8_t	*rs_buf;
-+};
-+
-+struct rndtest_stats {
-+	u_int32_t	rst_discard;	/* number of bytes discarded */
-+	u_int32_t	rst_tests;	/* number of test runs */
-+	u_int32_t	rst_monobit;	/* monobit test failures */
-+	u_int32_t	rst_runs;	/* 0/1 runs failures */
-+	u_int32_t	rst_longruns;	/* longruns failures */
-+	u_int32_t	rst_chi;	/* chi^2 failures */
-+};
-+
-+extern int rndtest_buf(unsigned char *buf);
-diff --git a/crypto/ocf/uio.h b/crypto/ocf/uio.h
-new file mode 100644
-index 0000000..03a6249
---- /dev/null
-+++ b/crypto/ocf/uio.h
-@@ -0,0 +1,54 @@
-+#ifndef _OCF_UIO_H_
-+#define _OCF_UIO_H_
-+
-+#include <linux/uio.h>
-+
-+/*
-+ * The linux uio.h doesn't have all we need.  To be fully api compatible
-+ * with the BSD cryptodev,  we need to keep this around.  Perhaps this can
-+ * be moved back into the linux/uio.h
-+ *
-+ * Linux port done by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ *
-+ * LICENSE TERMS
-+ *
-+ * The free distribution and use of this software in both source and binary
-+ * form is allowed (with or without changes) provided that:
-+ *
-+ *   1. distributions of this source code include the above copyright
-+ *      notice, this list of conditions and the following disclaimer;
-+ *
-+ *   2. distributions in binary form include the above copyright
-+ *      notice, this list of conditions and the following disclaimer
-+ *      in the documentation and/or other associated materials;
-+ *
-+ *   3. the copyright holder's name is not used to endorse products
-+ *      built using this software without specific written permission.
-+ *
-+ * ALTERNATIVELY, provided that this notice is retained in full, this product
-+ * may be distributed under the terms of the GNU General Public License (GPL),
-+ * in which case the provisions of the GPL apply INSTEAD OF those given above.
-+ *
-+ * DISCLAIMER
-+ *
-+ * This software is provided 'as is' with no explicit or implied warranties
-+ * in respect of its properties, including, but not limited to, correctness
-+ * and/or fitness for purpose.
-+ * ---------------------------------------------------------------------------
-+ */
-+
-+struct uio {
-+	struct	iovec *uio_iov;
-+	int		uio_iovcnt;
-+	off_t	uio_offset;
-+	int		uio_resid;
-+#if 0
-+	enum	uio_seg uio_segflg;
-+	enum	uio_rw uio_rw;
-+	struct  thread *uio_td;
-+#endif
-+};
-+
-+#endif
-diff --git a/drivers/char/random.c b/drivers/char/random.c
-index 5a1aa64..0554f18 100644
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -129,6 +129,9 @@
-  *                                unsigned int value);
-  * 	void add_interrupt_randomness(int irq);
-  *
-+ *      void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+ *      int random_input_wait(void);
-+ *
-  * add_input_randomness() uses the input layer interrupt timing, as well as
-  * the event type information from the hardware.
-  *
-@@ -140,6 +143,13 @@
-  * a better measure, since the timing of the disk interrupts are more
-  * unpredictable.
-  *
-+ * random_input_words() just provides a raw block of entropy to the input
-+ * pool, such as from a hardware entropy generator.
-+ *
-+ * random_input_wait() suspends the caller until such time as the
-+ * entropy pool falls below the write threshold, and returns a count of how
-+ * much entropy (in bits) is needed to sustain the pool.
-+ *
-  * All of these routines try to estimate how many bits of randomness a
-  * particular randomness source.  They do this by keeping track of the
-  * first and second order deltas of the event timings.
-@@ -715,6 +725,61 @@ void add_disk_randomness(struct gendisk *disk)
- }
- #endif
- 
-+/*
-+ * random_input_words - add bulk entropy to pool
-+ *
-+ * @buf: buffer to add
-+ * @wordcount: number of __u32 words to add
-+ * @ent_count: total amount of entropy (in bits) to credit
-+ *
-+ * this provides bulk input of entropy to the input pool
-+ *
-+ */
-+void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+{
-+	mix_pool_bytes(&input_pool, buf, wordcount*4);
-+
-+	credit_entropy_bits(&input_pool, ent_count);
-+
-+	DEBUG_ENT("crediting %d bits => %d\n",
-+		  ent_count, input_pool.entropy_count);
-+	/*
-+	 * Wake up waiting processes if we have enough
-+	 * entropy.
-+	 */
-+	if (input_pool.entropy_count >= random_read_wakeup_thresh)
-+		wake_up_interruptible(&random_read_wait);
-+}
-+EXPORT_SYMBOL(random_input_words);
-+
-+/*
-+ * random_input_wait - wait until random needs entropy
-+ *
-+ * this function sleeps until the /dev/random subsystem actually
-+ * needs more entropy, and then return the amount of entropy
-+ * that it would be nice to have added to the system.
-+ */
-+int random_input_wait(void)
-+{
-+	int count;
-+
-+	wait_event_interruptible(random_write_wait, 
-+			 input_pool.entropy_count < random_write_wakeup_thresh);
-+
-+	count = random_write_wakeup_thresh - input_pool.entropy_count;
-+
-+        /* likely we got woken up due to a signal */
-+	if (count <= 0) count = random_read_wakeup_thresh; 
-+
-+	DEBUG_ENT("requesting %d bits from input_wait()er %d<%d\n",
-+		  count,
-+		  input_pool.entropy_count, random_write_wakeup_thresh);
-+
-+	return count;
-+}
-+EXPORT_SYMBOL(random_input_wait);
-+
-+
- /*********************************************************************
-  *
-  * Entropy extraction routines
-diff --git a/fs/fcntl.c b/fs/fcntl.c
-index ecc8b39..1b1dcfb 100644
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -142,6 +142,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
- 	}
- 	return ret;
- }
-+EXPORT_SYMBOL(sys_dup);
- 
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
- 
-diff --git a/include/crypto/cryptodev.h b/include/crypto/cryptodev.h
-new file mode 100644
-index 0000000..6032317
---- /dev/null
-+++ b/include/crypto/cryptodev.h
-@@ -0,0 +1,479 @@
-+/*	$FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.25 2007/05/09 19:37:02 gnn Exp $	*/
-+/*	$OpenBSD: cryptodev.h,v 1.31 2002/06/11 11:14:29 beck Exp $	*/
-+
-+/*-
-+ * Linux port done by David McCullough <david_mccullough at mcafee.com>
-+ * Copyright (C) 2006-2010 David McCullough
-+ * Copyright (C) 2004-2005 Intel Corporation.
-+ * The license and original author are listed below.
-+ *
-+ * The author of this code is Angelos D. Keromytis (angelos at cis.upenn.edu)
-+ * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting
-+ *
-+ * This code was written by Angelos D. Keromytis in Athens, Greece, in
-+ * February 2000. Network Security Technologies Inc. (NSTI) kindly
-+ * supported the development of this code.
-+ *
-+ * Copyright (c) 2000 Angelos D. Keromytis
-+ *
-+ * Permission to use, copy, and modify this software with or without fee
-+ * is hereby granted, provided that this entire notice is included in
-+ * all source code copies of any software which is or includes a copy or
-+ * modification of this software.
-+ *
-+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
-+ * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
-+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
-+ * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
-+ * PURPOSE.
-+ *
-+ * Copyright (c) 2001 Theo de Raadt
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in the
-+ *   documentation and/or other materials provided with the distribution.
-+ * 3. The name of the author may not be used to endorse or promote products
-+ *   derived from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * Effort sponsored in part by the Defense Advanced Research Projects
-+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
-+ * Materiel Command, USAF, under agreement number F30602-01-2-0537.
-+ *
-+ */
-+
-+#ifndef _CRYPTO_CRYPTO_H_
-+#define _CRYPTO_CRYPTO_H_
-+
-+/* Some initial values */
-+#define CRYPTO_DRIVERS_INITIAL	4
-+#define CRYPTO_SW_SESSIONS	32
-+
-+/* Hash values */
-+#define NULL_HASH_LEN		0
-+#define MD5_HASH_LEN		16
-+#define SHA1_HASH_LEN		20
-+#define RIPEMD160_HASH_LEN	20
-+#define SHA2_256_HASH_LEN	32
-+#define SHA2_384_HASH_LEN	48
-+#define SHA2_512_HASH_LEN	64
-+#define MD5_KPDK_HASH_LEN	16
-+#define SHA1_KPDK_HASH_LEN	20
-+/* Maximum hash algorithm result length */
-+#define HASH_MAX_LEN		SHA2_512_HASH_LEN /* Keep this updated */
-+
-+/* HMAC values */
-+#define NULL_HMAC_BLOCK_LEN			1
-+#define MD5_HMAC_BLOCK_LEN			64
-+#define SHA1_HMAC_BLOCK_LEN			64
-+#define RIPEMD160_HMAC_BLOCK_LEN	64
-+#define SHA2_256_HMAC_BLOCK_LEN		64
-+#define SHA2_384_HMAC_BLOCK_LEN		128
-+#define SHA2_512_HMAC_BLOCK_LEN		128
-+/* Maximum HMAC block length */
-+#define HMAC_MAX_BLOCK_LEN		SHA2_512_HMAC_BLOCK_LEN /* Keep this updated */
-+#define HMAC_IPAD_VAL			0x36
-+#define HMAC_OPAD_VAL			0x5C
-+
-+/* Encryption algorithm block sizes */
-+#define NULL_BLOCK_LEN			1
-+#define DES_BLOCK_LEN			8
-+#define DES3_BLOCK_LEN			8
-+#define BLOWFISH_BLOCK_LEN		8
-+#define SKIPJACK_BLOCK_LEN		8
-+#define CAST128_BLOCK_LEN		8
-+#define RIJNDAEL128_BLOCK_LEN	16
-+#define AES_BLOCK_LEN			RIJNDAEL128_BLOCK_LEN
-+#define CAMELLIA_BLOCK_LEN		16
-+#define ARC4_BLOCK_LEN			1
-+#define EALG_MAX_BLOCK_LEN		AES_BLOCK_LEN /* Keep this updated */
-+
-+/* Encryption algorithm min and max key sizes */
-+#define NULL_MIN_KEY_LEN		0
-+#define NULL_MAX_KEY_LEN		0
-+#define DES_MIN_KEY_LEN			8
-+#define DES_MAX_KEY_LEN			8
-+#define DES3_MIN_KEY_LEN		24
-+#define DES3_MAX_KEY_LEN		24
-+#define BLOWFISH_MIN_KEY_LEN	4
-+#define BLOWFISH_MAX_KEY_LEN	56
-+#define SKIPJACK_MIN_KEY_LEN	10
-+#define SKIPJACK_MAX_KEY_LEN	10
-+#define CAST128_MIN_KEY_LEN		5
-+#define CAST128_MAX_KEY_LEN		16
-+#define RIJNDAEL128_MIN_KEY_LEN	16
-+#define RIJNDAEL128_MAX_KEY_LEN	32
-+#define AES_MIN_KEY_LEN			RIJNDAEL128_MIN_KEY_LEN
-+#define AES_MAX_KEY_LEN			RIJNDAEL128_MAX_KEY_LEN
-+#define CAMELLIA_MIN_KEY_LEN	16
-+#define CAMELLIA_MAX_KEY_LEN	32
-+#define ARC4_MIN_KEY_LEN		1
-+#define ARC4_MAX_KEY_LEN		256
-+
-+/* Max size of data that can be processed */
-+#define CRYPTO_MAX_DATA_LEN		64*1024 - 1
-+
-+#define CRYPTO_ALGORITHM_MIN	1
-+#define CRYPTO_DES_CBC			1
-+#define CRYPTO_3DES_CBC			2
-+#define CRYPTO_BLF_CBC			3
-+#define CRYPTO_CAST_CBC			4
-+#define CRYPTO_SKIPJACK_CBC		5
-+#define CRYPTO_MD5_HMAC			6
-+#define CRYPTO_SHA1_HMAC		7
-+#define CRYPTO_RIPEMD160_HMAC	8
-+#define CRYPTO_MD5_KPDK			9
-+#define CRYPTO_SHA1_KPDK		10
-+#define CRYPTO_RIJNDAEL128_CBC	11 /* 128 bit blocksize */
-+#define CRYPTO_AES_CBC			11 /* 128 bit blocksize -- the same as above */
-+#define CRYPTO_ARC4				12
-+#define CRYPTO_MD5				13
-+#define CRYPTO_SHA1				14
-+#define CRYPTO_NULL_HMAC		15
-+#define CRYPTO_NULL_CBC			16
-+#define CRYPTO_DEFLATE_COMP		17 /* Deflate compression algorithm */
-+#define CRYPTO_SHA2_256_HMAC	18
-+#define CRYPTO_SHA2_384_HMAC	19
-+#define CRYPTO_SHA2_512_HMAC	20
-+#define CRYPTO_CAMELLIA_CBC		21
-+#define CRYPTO_SHA2_256			22
-+#define CRYPTO_SHA2_384			23
-+#define CRYPTO_SHA2_512			24
-+#define CRYPTO_RIPEMD160		25
-+#define CRYPTO_ALGORITHM_MAX	25 /* Keep updated - see below */
-+
-+/* Algorithm flags */
-+#define CRYPTO_ALG_FLAG_SUPPORTED	0x01 /* Algorithm is supported */
-+#define CRYPTO_ALG_FLAG_RNG_ENABLE	0x02 /* Has HW RNG for DH/DSA */
-+#define CRYPTO_ALG_FLAG_DSA_SHA		0x04 /* Can do SHA on msg */
-+
-+/*
-+ * Crypto driver/device flags.  They can set in the crid
-+ * parameter when creating a session or submitting a key
-+ * op to affect the device/driver assigned.  If neither
-+ * of these are specified then the crid is assumed to hold
-+ * the driver id of an existing (and suitable) device that
-+ * must be used to satisfy the request.
-+ */
-+#define CRYPTO_FLAG_HARDWARE	0x01000000	/* hardware accelerated */
-+#define CRYPTO_FLAG_SOFTWARE	0x02000000	/* software implementation */
-+
-+/* NB: deprecated */
-+struct session_op {
-+	u_int32_t	cipher;		/* ie. CRYPTO_DES_CBC */
-+	u_int32_t	mac;		/* ie. CRYPTO_MD5_HMAC */
-+
-+	u_int32_t	keylen;		/* cipher key */
-+	caddr_t		key;
-+	int		mackeylen;	/* mac key */
-+	caddr_t		mackey;
-+
-+  	u_int32_t	ses;		/* returns: session # */ 
-+};
-+
-+struct session2_op {
-+	u_int32_t	cipher;		/* ie. CRYPTO_DES_CBC */
-+	u_int32_t	mac;		/* ie. CRYPTO_MD5_HMAC */
-+
-+	u_int32_t	keylen;		/* cipher key */
-+	caddr_t		key;
-+	int		mackeylen;	/* mac key */
-+	caddr_t		mackey;
-+
-+  	u_int32_t	ses;		/* returns: session # */ 
-+	int		crid;		/* driver id + flags (rw) */
-+	int		pad[4];		/* for future expansion */
-+};
-+
-+struct crypt_op {
-+	u_int32_t	ses;
-+	u_int16_t	op;		/* i.e. COP_ENCRYPT */
-+#define COP_NONE	0
-+#define COP_ENCRYPT	1
-+#define COP_DECRYPT	2
-+	u_int16_t	flags;
-+#define	COP_F_BATCH	0x0008		/* Batch op if possible */
-+	u_int		len;
-+	caddr_t		src, dst;	/* become iov[] inside kernel */
-+	caddr_t		mac;		/* must be big enough for chosen MAC */
-+	caddr_t		iv;
-+};
-+
-+/*
-+ * Parameters for looking up a crypto driver/device by
-+ * device name or by id.  The latter are returned for
-+ * created sessions (crid) and completed key operations.
-+ */
-+struct crypt_find_op {
-+	int		crid;		/* driver id + flags */
-+	char		name[32];	/* device/driver name */
-+};
-+
-+/* bignum parameter, in packed bytes, ... */
-+struct crparam {
-+	caddr_t		crp_p;
-+	u_int		crp_nbits;
-+};
-+
-+#define CRK_MAXPARAM	8
-+
-+struct crypt_kop {
-+	u_int		crk_op;		/* ie. CRK_MOD_EXP or other */
-+	u_int		crk_status;	/* return status */
-+	u_short		crk_iparams;	/* # of input parameters */
-+	u_short		crk_oparams;	/* # of output parameters */
-+	u_int		crk_crid;	/* NB: only used by CIOCKEY2 (rw) */
-+	struct crparam	crk_param[CRK_MAXPARAM];
-+};
-+#define CRK_ALGORITM_MIN	0
-+#define CRK_MOD_EXP		0
-+#define CRK_MOD_EXP_CRT		1
-+#define CRK_DSA_SIGN		2
-+#define CRK_DSA_VERIFY		3
-+#define CRK_DH_COMPUTE_KEY	4
-+#define CRK_ALGORITHM_MAX	4 /* Keep updated - see below */
-+
-+#define CRF_MOD_EXP		(1 << CRK_MOD_EXP)
-+#define CRF_MOD_EXP_CRT		(1 << CRK_MOD_EXP_CRT)
-+#define CRF_DSA_SIGN		(1 << CRK_DSA_SIGN)
-+#define CRF_DSA_VERIFY		(1 << CRK_DSA_VERIFY)
-+#define CRF_DH_COMPUTE_KEY	(1 << CRK_DH_COMPUTE_KEY)
-+
-+/*
-+ * done against open of /dev/crypto, to get a cloned descriptor.
-+ * Please use F_SETFD against the cloned descriptor.
-+ */
-+#define CRIOGET		_IOWR('c', 100, u_int32_t)
-+#define CRIOASYMFEAT	CIOCASYMFEAT
-+#define CRIOFINDDEV	CIOCFINDDEV
-+
-+/* the following are done against the cloned descriptor */
-+#define CIOCGSESSION	_IOWR('c', 101, struct session_op)
-+#define CIOCFSESSION	_IOW('c', 102, u_int32_t)
-+#define CIOCCRYPT	_IOWR('c', 103, struct crypt_op)
-+#define CIOCKEY		_IOWR('c', 104, struct crypt_kop)
-+#define CIOCASYMFEAT	_IOR('c', 105, u_int32_t)
-+#define CIOCGSESSION2	_IOWR('c', 106, struct session2_op)
-+#define CIOCKEY2	_IOWR('c', 107, struct crypt_kop)
-+#define CIOCFINDDEV	_IOWR('c', 108, struct crypt_find_op)
-+
-+struct cryptotstat {
-+	struct timespec	acc;		/* total accumulated time */
-+	struct timespec	min;		/* min time */
-+	struct timespec	max;		/* max time */
-+	u_int32_t	count;		/* number of observations */
-+};
-+
-+struct cryptostats {
-+	u_int32_t	cs_ops;		/* symmetric crypto ops submitted */
-+	u_int32_t	cs_errs;	/* symmetric crypto ops that failed */
-+	u_int32_t	cs_kops;	/* asymetric/key ops submitted */
-+	u_int32_t	cs_kerrs;	/* asymetric/key ops that failed */
-+	u_int32_t	cs_intrs;	/* crypto swi thread activations */
-+	u_int32_t	cs_rets;	/* crypto return thread activations */
-+	u_int32_t	cs_blocks;	/* symmetric op driver block */
-+	u_int32_t	cs_kblocks;	/* symmetric op driver block */
-+	/*
-+	 * When CRYPTO_TIMING is defined at compile time and the
-+	 * sysctl debug.crypto is set to 1, the crypto system will
-+	 * accumulate statistics about how long it takes to process
-+	 * crypto requests at various points during processing.
-+	 */
-+	struct cryptotstat cs_invoke;	/* crypto_dipsatch -> crypto_invoke */
-+	struct cryptotstat cs_done;	/* crypto_invoke -> crypto_done */
-+	struct cryptotstat cs_cb;	/* crypto_done -> callback */
-+	struct cryptotstat cs_finis;	/* callback -> callback return */
-+
-+	u_int32_t	cs_drops;		/* crypto ops dropped due to congestion */
-+};
-+
-+#ifdef __KERNEL__
-+
-+/* Standard initialization structure beginning */
-+struct cryptoini {
-+	int		cri_alg;	/* Algorithm to use */
-+	int		cri_klen;	/* Key length, in bits */
-+	int		cri_mlen;	/* Number of bytes we want from the
-+					   entire hash. 0 means all. */
-+	caddr_t		cri_key;	/* key to use */
-+	u_int8_t	cri_iv[EALG_MAX_BLOCK_LEN];	/* IV to use */
-+	struct cryptoini *cri_next;
-+};
-+
-+/* Describe boundaries of a single crypto operation */
-+struct cryptodesc {
-+	int		crd_skip;	/* How many bytes to ignore from start */
-+	int		crd_len;	/* How many bytes to process */
-+	int		crd_inject;	/* Where to inject results, if applicable */
-+	int		crd_flags;
-+
-+#define CRD_F_ENCRYPT		0x01	/* Set when doing encryption */
-+#define CRD_F_IV_PRESENT	0x02	/* When encrypting, IV is already in
-+					   place, so don't copy. */
-+#define CRD_F_IV_EXPLICIT	0x04	/* IV explicitly provided */
-+#define CRD_F_DSA_SHA_NEEDED	0x08	/* Compute SHA-1 of buffer for DSA */
-+#define CRD_F_KEY_EXPLICIT	0x10	/* Key explicitly provided */
-+#define CRD_F_COMP		0x0f    /* Set when doing compression */
-+
-+	struct cryptoini	CRD_INI; /* Initialization/context data */
-+#define crd_iv		CRD_INI.cri_iv
-+#define crd_key		CRD_INI.cri_key
-+#define crd_alg		CRD_INI.cri_alg
-+#define crd_klen	CRD_INI.cri_klen
-+#define crd_mlen	CRD_INI.cri_mlen
-+
-+	struct cryptodesc *crd_next;
-+};
-+
-+/* Structure describing complete operation */
-+struct cryptop {
-+	struct list_head crp_next;
-+	wait_queue_head_t crp_waitq;
-+
-+	u_int64_t	crp_sid;	/* Session ID */
-+	int		crp_ilen;	/* Input data total length */
-+	int		crp_olen;	/* Result total length */
-+
-+	int		crp_etype;	/*
-+					 * Error type (zero means no error).
-+					 * All error codes except EAGAIN
-+					 * indicate possible data corruption (as in,
-+					 * the data have been touched). On all
-+					 * errors, the crp_sid may have changed
-+					 * (reset to a new one), so the caller
-+					 * should always check and use the new
-+					 * value on future requests.
-+					 */
-+	int		crp_flags;
-+
-+#define CRYPTO_F_SKBUF		0x0001	/* Input/output are skbuf chains */
-+#define CRYPTO_F_IOV		0x0002	/* Input/output are uio */
-+#define CRYPTO_F_REL		0x0004	/* Must return data in same place */
-+#define CRYPTO_F_BATCH		0x0008	/* Batch op if possible */
-+#define CRYPTO_F_CBIMM		0x0010	/* Do callback immediately */
-+#define CRYPTO_F_DONE		0x0020	/* Operation completed */
-+#define CRYPTO_F_CBIFSYNC	0x0040	/* Do CBIMM if op is synchronous */
-+
-+	caddr_t		crp_buf;	/* Data to be processed */
-+	caddr_t		crp_opaque;	/* Opaque pointer, passed along */
-+	struct cryptodesc *crp_desc;	/* Linked list of processing descriptors */
-+
-+	int (*crp_callback)(struct cryptop *); /* Callback function */
-+};
-+
-+#define CRYPTO_BUF_CONTIG	0x0
-+#define CRYPTO_BUF_IOV		0x1
-+#define CRYPTO_BUF_SKBUF		0x2
-+
-+#define CRYPTO_OP_DECRYPT	0x0
-+#define CRYPTO_OP_ENCRYPT	0x1
-+
-+/*
-+ * Hints passed to process methods.
-+ */
-+#define CRYPTO_HINT_MORE	0x1	/* more ops coming shortly */
-+
-+struct cryptkop {
-+	struct list_head krp_next;
-+	wait_queue_head_t krp_waitq;
-+
-+	int		krp_flags;
-+#define CRYPTO_KF_DONE		0x0001	/* Operation completed */
-+#define CRYPTO_KF_CBIMM		0x0002	/* Do callback immediately */
-+
-+	u_int		krp_op;		/* ie. CRK_MOD_EXP or other */
-+	u_int		krp_status;	/* return status */
-+	u_short		krp_iparams;	/* # of input parameters */
-+	u_short		krp_oparams;	/* # of output parameters */
-+	u_int		krp_crid;	/* desired device, etc. */
-+	u_int32_t	krp_hid;
-+	struct crparam	krp_param[CRK_MAXPARAM];	/* kvm */
-+	int		(*krp_callback)(struct cryptkop *);
-+};
-+
-+#include <ocf-compat.h>
-+
-+/*
-+ * Session ids are 64 bits.  The lower 32 bits contain a "local id" which
-+ * is a driver-private session identifier.  The upper 32 bits contain a
-+ * "hardware id" used by the core crypto code to identify the driver and
-+ * a copy of the driver's capabilities that can be used by client code to
-+ * optimize operation.
-+ */
-+#define CRYPTO_SESID2HID(_sid)	(((_sid) >> 32) & 0x00ffffff)
-+#define CRYPTO_SESID2CAPS(_sid)	(((_sid) >> 32) & 0xff000000)
-+#define CRYPTO_SESID2LID(_sid)	(((u_int32_t) (_sid)) & 0xffffffff)
-+
-+extern	int crypto_newsession(u_int64_t *sid, struct cryptoini *cri, int hard);
-+extern	int crypto_freesession(u_int64_t sid);
-+#define CRYPTOCAP_F_HARDWARE	CRYPTO_FLAG_HARDWARE
-+#define CRYPTOCAP_F_SOFTWARE	CRYPTO_FLAG_SOFTWARE
-+#define CRYPTOCAP_F_SYNC	0x04000000	/* operates synchronously */
-+extern	int32_t crypto_get_driverid(device_t dev, int flags);
-+extern	int crypto_find_driver(const char *);
-+extern	device_t crypto_find_device_byhid(int hid);
-+extern	int crypto_getcaps(int hid);
-+extern	int crypto_register(u_int32_t driverid, int alg, u_int16_t maxoplen,
-+	    u_int32_t flags);
-+extern	int crypto_kregister(u_int32_t, int, u_int32_t);
-+extern	int crypto_unregister(u_int32_t driverid, int alg);
-+extern	int crypto_unregister_all(u_int32_t driverid);
-+extern	int crypto_dispatch(struct cryptop *crp);
-+extern	int crypto_kdispatch(struct cryptkop *);
-+#define CRYPTO_SYMQ	0x1
-+#define CRYPTO_ASYMQ	0x2
-+extern	int crypto_unblock(u_int32_t, int);
-+extern	void crypto_done(struct cryptop *crp);
-+extern	void crypto_kdone(struct cryptkop *);
-+extern	int crypto_getfeat(int *);
-+
-+extern	void crypto_freereq(struct cryptop *crp);
-+extern	struct cryptop *crypto_getreq(int num);
-+
-+extern  int crypto_usercrypto;      /* userland may do crypto requests */
-+extern  int crypto_userasymcrypto;  /* userland may do asym crypto reqs */
-+extern  int crypto_devallowsoft;    /* only use hardware crypto */
-+
-+/*
-+ * random number support,  crypto_unregister_all will unregister
-+ */
-+extern int crypto_rregister(u_int32_t driverid,
-+		int (*read_random)(void *arg, u_int32_t *buf, int len), void *arg);
-+extern int crypto_runregister_all(u_int32_t driverid);
-+
-+/*
-+ * Crypto-related utility routines used mainly by drivers.
-+ *
-+ * XXX these don't really belong here; but for now they're
-+ *     kept apart from the rest of the system.
-+ */
-+struct uio;
-+extern	void cuio_copydata(struct uio* uio, int off, int len, caddr_t cp);
-+extern	void cuio_copyback(struct uio* uio, int off, int len, caddr_t cp);
-+extern	struct iovec *cuio_getptr(struct uio *uio, int loc, int *off);
-+
-+extern	void crypto_copyback(int flags, caddr_t buf, int off, int size,
-+	    caddr_t in);
-+extern	void crypto_copydata(int flags, caddr_t buf, int off, int size,
-+	    caddr_t out);
-+extern	int crypto_apply(int flags, caddr_t buf, int off, int len,
-+	    int (*f)(void *, void *, u_int), void *arg);
-+
-+#endif /* __KERNEL__ */
-+#endif /* _CRYPTO_CRYPTO_H_ */
-diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
-index 18fd130..a469480 100644
---- a/include/linux/miscdevice.h
-+++ b/include/linux/miscdevice.h
-@@ -18,6 +18,7 @@
- #define APOLLO_MOUSE_MINOR	7
- #define PC110PAD_MINOR		9
- /*#define ADB_MOUSE_MINOR	10	FIXME OBSOLETE */
-+#define CRYPTODEV_MINOR		70	/* /dev/crypto */
- #define WATCHDOG_MINOR		130	/* Watchdog timer     */
- #define TEMP_MINOR		131	/* Temperature Sensor */
- #define RTC_MINOR		135
-diff --git a/include/linux/random.h b/include/linux/random.h
-index fb7ab9d..26ab66b 100644
---- a/include/linux/random.h
-+++ b/include/linux/random.h
-@@ -9,6 +9,7 @@
- 
- #include <linux/types.h>
- #include <linux/ioctl.h>
-+#include <linux/types.h> /* for __u32 in user space */
- #include <linux/irqnr.h>
- 
- /* ioctl()'s for the random number generator */
-@@ -34,6 +35,30 @@
- /* Clear the entropy pool and associated counters.  (Superuser only.) */
- #define RNDCLEARPOOL	_IO( 'R', 0x06 )
- 
-+#ifdef CONFIG_FIPS_RNG
-+
-+/* Size of seed value - equal to AES blocksize */
-+#define AES_BLOCK_SIZE_BYTES	16
-+#define SEED_SIZE_BYTES			AES_BLOCK_SIZE_BYTES
-+/* Size of AES key */
-+#define KEY_SIZE_BYTES		16
-+
-+/* ioctl() structure used by FIPS 140-2 Tests */
-+struct rand_fips_test {
-+	unsigned char key[KEY_SIZE_BYTES];			/* Input */
-+	unsigned char datetime[SEED_SIZE_BYTES];	/* Input */
-+	unsigned char seed[SEED_SIZE_BYTES];		/* Input */
-+	unsigned char result[SEED_SIZE_BYTES];		/* Output */
-+};
-+
-+/* FIPS 140-2 RNG Variable Seed Test. (Superuser only.) */
-+#define RNDFIPSVST	_IOWR('R', 0x10, struct rand_fips_test)
-+
-+/* FIPS 140-2 RNG Monte Carlo Test. (Superuser only.) */
-+#define RNDFIPSMCT	_IOWR('R', 0x11, struct rand_fips_test)
-+
-+#endif /* #ifdef CONFIG_FIPS_RNG */
-+
- struct rand_pool_info {
- 	int	entropy_count;
- 	int	buf_size;
-@@ -54,6 +79,10 @@ extern void add_input_randomness(unsigned int type, unsigned int code,
- 				 unsigned int value);
- extern void add_interrupt_randomness(int irq);
- 
-+extern void random_input_words(__u32 *buf, size_t wordcount, int ent_count);
-+extern int random_input_wait(void);
-+#define HAS_RANDOM_INPUT_WAIT 1
-+
- extern void get_random_bytes(void *buf, int nbytes);
- void generate_random_uuid(unsigned char uuid_out[16]);
- 
-diff --git a/kernel/pid.c b/kernel/pid.c
-index 39b65b6..1cccf44 100644
---- a/kernel/pid.c
-+++ b/kernel/pid.c
-@@ -424,6 +424,7 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
- {
- 	return find_task_by_pid_ns(vnr, current->nsproxy->pid_ns);
- }
-+EXPORT_SYMBOL(find_task_by_vpid);
- 
- struct pid *get_task_pid(struct task_struct *task, enum pid_type type)
- {
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-mt9t111-enable-clock-pad-register-in-configuration.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-mt9t111-enable-clock-pad-register-in-configuration.patch
deleted file mode 100644
index d4e6c79..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-mt9t111-enable-clock-pad-register-in-configuration.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From ac7635211d2a5b133bac56fec4b6ed087f553e49 Mon Sep 17 00:00:00 2001
-From: Punya Prakash <pprakash at ti.com>
-Date: Thu, 30 Jun 2011 13:52:18 -0500
-Subject: [PATCH]  mt9t111: enable clock pad register in configuration
-
-* fixes the issue where sensor sync pulses were not generated during first loopback after boot-up
-
-Upstream-Status: Pending
-
-Signed-off-by: Punya Prakash <pprakash at ti.com>
----
- drivers/media/video/mt9t111.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/media/video/mt9t111.c b/drivers/media/video/mt9t111.c
-index f18aa24..02c18a5 100644
---- a/drivers/media/video/mt9t111.c
-+++ b/drivers/media/video/mt9t111.c
-@@ -290,6 +290,9 @@ static int mt9t111_configure(struct v4l2_subdev *subdev)
- 	if (err)
- 		goto out;
- 
-+	// Enable Clock pad
-+	err = mt9t111_write_reg(client, 0x0016, 0x0400);
-+
- 	err = mt9t111_write_regs(client, def_regs1,
- 			   sizeof(def_regs1) / sizeof(mt9t111_regs));
- 	if (err)
--- 
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-nlcp-sdio-fixes-for-wowlan-support.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-nlcp-sdio-fixes-for-wowlan-support.patch
deleted file mode 100644
index a26d02e..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-nlcp-sdio-fixes-for-wowlan-support.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From 33f43b37f82038e8383e76d621448a9983ed35e4 Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Wed, 3 Aug 2011 14:48:18 +0300
-Subject: [PATCH 1/6] nlcp: sdio fixes for wowlan support
-
-Upstream status: pending
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- drivers/mmc/core/core.c       |    8 ++++++--
- drivers/mmc/core/sdio.c       |    2 +-
- drivers/mmc/host/omap_hsmmc.c |    2 ++
- include/linux/mmc/host.h      |    9 +++++++++
- 4 files changed, 18 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
-index 2762ad2..55bc015 100644
---- a/drivers/mmc/core/core.c
-+++ b/drivers/mmc/core/core.c
-@@ -1705,7 +1705,7 @@ int mmc_suspend_host(struct mmc_host *host)
- 	}
- 	mmc_bus_put(host);
- 
--	if (!err && !(host->pm_flags & MMC_PM_KEEP_POWER))
-+	if (!err && !mmc_card_keep_power(host))
- 		mmc_power_off(host);
- 
- 	return err;
-@@ -1723,7 +1723,7 @@ int mmc_resume_host(struct mmc_host *host)
- 
- 	mmc_bus_get(host);
- 	if (host->bus_ops && !host->bus_dead) {
--		if (!(host->pm_flags & MMC_PM_KEEP_POWER)) {
-+		if (!mmc_card_keep_power(host)) {
- 			mmc_power_up(host);
- 			mmc_select_voltage(host, host->ocr);
- 			/*
-@@ -1748,6 +1748,10 @@ int mmc_resume_host(struct mmc_host *host)
- 			err = 0;
- 		}
- 	}
-+
-+	/* clear flag */
-+	host->pm_flags &= ~MMC_PM_KEEP_POWER;
-+
- 	mmc_bus_put(host);
- 
- 	return err;
-diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
-index b424fbe..4a198b2 100644
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -616,7 +616,7 @@ static int mmc_sdio_suspend(struct mmc_host *host)
- 		}
- 	}
- 
--	if (!err && host->pm_flags & MMC_PM_KEEP_POWER) {
-+	if (!err && mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
- 		mmc_claim_host(host);
- 		sdio_disable_wide(host->card);
- 		mmc_release_host(host);
-diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
-index c75c799..b5f496d 100644
---- a/drivers/mmc/host/omap_hsmmc.c
-+++ b/drivers/mmc/host/omap_hsmmc.c
-@@ -2222,6 +2222,8 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
- 	if (mmc_slot(host).nonremovable)
- 		mmc->caps |= MMC_CAP_NONREMOVABLE;
- 
-+	mmc->pm_caps |= MMC_PM_KEEP_POWER;
-+
- 	omap_hsmmc_conf_bus_power(host);
- 
- 	res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
-diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
-index 86d74a5..74694c4 100644
---- a/include/linux/mmc/host.h
-+++ b/include/linux/mmc/host.h
-@@ -312,5 +312,14 @@ static inline int mmc_card_is_powered_resumed(struct mmc_host *host)
- 	return host->pm_flags & MMC_PM_KEEP_POWER;
- }
- 
-+static inline int mmc_card_keep_power(struct mmc_host *host)
-+{
-+	return host->pm_flags & MMC_PM_KEEP_POWER;
-+}
-+
-+static inline int mmc_card_wake_sdio_irq(struct mmc_host *host)
-+{
-+	return host->pm_flags & MMC_PM_WAKE_SDIO_IRQ;
-+}
- #endif
- 
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3-am3517evm-Allow-for-NAND-to-really-be-disabled.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3-am3517evm-Allow-for-NAND-to-really-be-disabled.patch
deleted file mode 100644
index 89f01f9..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3-am3517evm-Allow-for-NAND-to-really-be-disabled.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 2056c6802c5afbd722fcffc99a5cf50bbaee23c8 Mon Sep 17 00:00:00 2001
-From: Tom Rini <trini at ti.com>
-Date: Tue, 15 Nov 2011 17:43:31 -0700
-Subject: [PATCH 1/3] omap3:am3517evm: Allow for NAND to really be disabled
-
-On boards with both NAND and NOR and NOR being selected, NAND needs
-to be disabled fully.
-
-Signed-off-by: Tom Rini <trini at ti.com>
----
- .../arch/arm/mach-omap2/board-am3517evm.c          |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
-index 3992b86..1d17415 100644
---- a/arch/arm/mach-omap2/board-am3517evm.c
-+++ b/arch/arm/mach-omap2/board-am3517evm.c
-@@ -59,6 +59,7 @@
- 
- #define NAND_BLOCK_SIZE        SZ_128K
- 
-+#ifdef CONFIG_MTD_NAND_OMAP2
- static struct mtd_partition am3517evm_nand_partitions[] = {
- /* All the partition sizes are listed in terms of NAND block size */
- 	{
-@@ -89,6 +90,7 @@ static struct mtd_partition am3517evm_nand_partitions[] = {
- 		.offset         = MTDPART_OFS_APPEND,
- 	},
- };
-+#endif
- 
- static struct mdio_platform_data am3517_evm_mdio_pdata = {
- 	.bus_freq	= AM35XX_EVM_MDIO_FREQUENCY,
-@@ -926,9 +928,11 @@ static void __init am3517_evm_init(void)
- 	/* DSS */
- 	am3517_evm_display_init();
- 
-+#ifdef CONFIG_MTD_NAND_OMAP2
- 	/* NAND */
- 	board_nand_init(am3517evm_nand_partitions,
- 					ARRAY_SIZE(am3517evm_nand_partitions), 0, NAND_BUSWIDTH_16);
-+#endif
- 
- 	/* RTC - S35390A */
- 	am3517_evm_rtc_init();
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-support-for-the-WL12xx-WLAN-module.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-support-for-the-WL12xx-WLAN-module.patch
deleted file mode 100644
index 1451bfb..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-support-for-the-WL12xx-WLAN-module.patch
+++ /dev/null
@@ -1,147 +0,0 @@
-From 20a525629de613000b6f22f91f40063b0a43e7cc Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Tue, 12 Apr 2011 22:50:51 +0300
-Subject: [PATCH] omap3evm:add support for the WL12xx WLAN module
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- arch/arm/mach-omap2/board-omap3evm.c |   89 ++++++++++++++++++++++++++++++++++
- 1 files changed, 89 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
-index c8aabff..4088840 100644
---- a/arch/arm/mach-omap2/board-omap3evm.c
-+++ b/arch/arm/mach-omap2/board-omap3evm.c
-@@ -31,6 +31,8 @@
- #include <linux/usb/otg.h>
- #include <linux/smsc911x.h>
-
-+#include <linux/wl12xx.h>
-+#include <linux/regulator/fixed.h>
- #include <linux/regulator/machine.h>
- #include <linux/mmc/host.h>
-
-@@ -452,6 +454,16 @@ static struct omap2_hsmmc_info mmc[] = {
-		.gpio_cd	= -EINVAL,
-		.gpio_wp	= 63,
-	},
-+#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+	{
-+		.name		= "wl1271",
-+		.mmc		= 2,
-+		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
-+		.gpio_wp	= -EINVAL,
-+		.gpio_cd	= -EINVAL,
-+		.nonremovable	= true,
-+	},
-+#endif
-	{}	/* Terminator */
- };
-
-@@ -671,6 +683,47 @@ static struct regulator_init_data omap3_evm_vio = {
-	.consumer_supplies      = omap3_evm_vio_supply,
- };
-
-+#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+
-+#define OMAP3EVM_WLAN_PMENA_GPIO	(150)
-+#define OMAP3EVM_WLAN_IRQ_GPIO		(149)
-+
-+static struct regulator_consumer_supply omap3evm_vmmc2_supply =
-+	REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1");
-+
-+/* VMMC2 for driving the WL12xx module */
-+static struct regulator_init_data omap3evm_vmmc2 = {
-+	.constraints = {
-+		.valid_ops_mask	= REGULATOR_CHANGE_STATUS,
-+	},
-+	.num_consumer_supplies	= 1,
-+	.consumer_supplies = &omap3evm_vmmc2_supply,
-+};
-+
-+static struct fixed_voltage_config omap3evm_vwlan = {
-+	.supply_name		= "vwl1271",
-+	.microvolts		= 1800000, /* 1.80V */
-+	.gpio			= OMAP3EVM_WLAN_PMENA_GPIO,
-+	.startup_delay		= 70000, /* 70ms */
-+	.enable_high		= 1,
-+	.enabled_at_boot	= 0,
-+	.init_data		= &omap3evm_vmmc2,
-+};
-+
-+static struct platform_device omap3evm_wlan_regulator = {
-+	.name		= "reg-fixed-voltage",
-+	.id		= 1,
-+	.dev = {
-+		.platform_data	= &omap3evm_vwlan,
-+	},
-+};
-+
-+struct wl12xx_platform_data omap3evm_wlan_data __initdata = {
-+	.irq = OMAP_GPIO_IRQ(OMAP3EVM_WLAN_IRQ_GPIO),
-+	.board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
-+};
-+#endif
-+
- static struct twl4030_platform_data omap3evm_twldata = {
-	.irq_base	= TWL4030_IRQ_BASE,
-	.irq_end	= TWL4030_IRQ_END,
-@@ -876,6 +929,21 @@ static struct omap_board_mux omap35x_board_mux[] __initdata = {
-				OMAP_PIN_OFF_NONE),
-	OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP |
-				OMAP_PIN_OFF_NONE),
-+#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+	/* WLAN IRQ - GPIO 149 */
-+	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
-+
-+	/* WLAN POWER ENABLE - GPIO 150 */
-+	OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
-+
-+	/* MMC2 SDIO pin muxes for WL12xx */
-+	OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+#endif
-	{ .reg_offset = OMAP_MUX_TERMINATOR },
- };
-
-@@ -901,6 +969,21 @@ static struct omap_board_mux omap36x_board_mux[] __initdata = {
-	OMAP3_MUX(SYS_BOOT4, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
-	OMAP3_MUX(SYS_BOOT5, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
-	OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
-+#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+	/* WLAN IRQ - GPIO 149 */
-+	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
-+
-+	/* WLAN POWER ENABLE - GPIO 150 */
-+	OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
-+
-+	/* MMC2 SDIO pin muxes for WL12xx */
-+	OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+	OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
-+#endif
-	{ .reg_offset = OMAP_MUX_TERMINATOR },
- };
- #else
-@@ -976,6 +1059,12 @@ static void __init omap3_evm_init(void)
-			0, NAND_BUSWIDTH_16);
-	board_onenand_init(omap3_evm_onenand_partitions,
-			ARRAY_SIZE(omap3_evm_onenand_partitions), 0);
-+#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+	/* WL12xx WLAN Init */
-+	if (wl12xx_set_platform_data(&omap3evm_wlan_data))
-+		pr_err("error setting wl12xx data\n");
-+	platform_device_register(&omap3evm_wlan_regulator);
-+#endif
- }
-
- MACHINE_START(OMAP3EVM, "OMAP3 EVM")
---
-1.7.0.4
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-wake-on-wlan-support.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-wake-on-wlan-support.patch
deleted file mode 100644
index 232835d9a..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap3evm-add-wake-on-wlan-support.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 5e7643b6e4fe8144e576f2faf9f1e07fd2a7753f Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Wed, 3 Aug 2011 14:01:45 +0300
-Subject: [PATCH 1/8] omap3evm: add wake on wlan support
-
-Upstream status: pending
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- arch/arm/mach-omap2/board-omap3evm.c |    9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
-index 4088840..08c074a 100644
---- a/arch/arm/mach-omap2/board-omap3evm.c
-+++ b/arch/arm/mach-omap2/board-omap3evm.c
-@@ -458,7 +458,8 @@ static struct omap2_hsmmc_info mmc[] = {
- 	{
- 		.name		= "wl1271",
- 		.mmc		= 2,
--		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
-+		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD
-+				| MMC_PM_KEEP_POWER ,
- 		.gpio_wp	= -EINVAL,
- 		.gpio_cd	= -EINVAL,
- 		.nonremovable	= true,
-@@ -931,7 +932,8 @@ static struct omap_board_mux omap35x_board_mux[] __initdata = {
- 				OMAP_PIN_OFF_NONE),
- #ifdef CONFIG_WL12XX_PLATFORM_DATA
- 	/* WLAN IRQ - GPIO 149 */
--	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
-+	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |
-+		  OMAP_PIN_OFF_WAKEUPENABLE),
- 
- 	/* WLAN POWER ENABLE - GPIO 150 */
- 	OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
-@@ -971,7 +973,8 @@ static struct omap_board_mux omap36x_board_mux[] __initdata = {
- 	OMAP3_MUX(SYS_BOOT6, OMAP_MUX_MODE3 | OMAP_PIN_OFF_NONE),
- #ifdef CONFIG_WL12XX_PLATFORM_DATA
- 	/* WLAN IRQ - GPIO 149 */
--	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
-+	OMAP3_MUX(UART1_RTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT |
-+		  OMAP_PIN_OFF_WAKEUPENABLE),
- 
- 	/* WLAN POWER ENABLE - GPIO 150 */
- 	OMAP3_MUX(UART1_CTS, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap_hsmmc-make-default-dto-value-14.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap_hsmmc-make-default-dto-value-14.patch
deleted file mode 100644
index d1bd2c3..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-omap_hsmmc-make-default-dto-value-14.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From a4f14adcde615d2f6689ed9046464dad8a5465f6 Mon Sep 17 00:00:00 2001
-From: Chase Maupin <Chase.Maupin at ti.com>
-Date: Mon, 21 Nov 2011 07:40:40 -0600
-Subject: [PATCH] omap_hsmmc: make default dto value 14
-
-* It seems that making the dto value makes all the various SD
-  cards work.  If not we will sometimes see -110 errors during
-  boot with certain SD cards.
-* Based on input from Steve Kipisz
-
-Upstream-Status: Pending
-
-Signed-off-by: Chase Maupin <Chase.Maupin at ti.com>
----
- drivers/mmc/host/omap_hsmmc.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
-index b5f496d..6985331 100644
---- a/drivers/mmc/host/omap_hsmmc.c
-+++ b/drivers/mmc/host/omap_hsmmc.c
-@@ -1494,6 +1494,9 @@ static void set_data_timeout(struct omap_hsmmc_host *host,
- 			dto = 14;
- 	}
- 
-+    // Use 14 by default because this seems to work will with all cards
-+    dto = 14;
-+
- 	reg &= ~DTO_MASK;
- 	reg |= dto << DTO_SHIFT;
- 	OMAP_HSMMC_WRITE(host->base, SYSCTL, reg);
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-usb-musb-am35x-set-default-VBUS-timeout-value.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-usb-musb-am35x-set-default-VBUS-timeout-value.patch
deleted file mode 100644
index a95419b..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0001-usb-musb-am35x-set-default-VBUS-timeout-value.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From f0cf4495fc1d4dfb71a93eb6e315789c276221da Mon Sep 17 00:00:00 2001
-From: Bin Liu <b-liu at ti.com>
-Date: Wed, 30 May 2012 15:35:07 -0500
-Subject: [PATCH 1/2] usb: musb: am35x: set default VBUS timeout value
-
-The issue was:
-musb->a_wait_bcon was not set so the OTG timer does not start when
-a USB device gets disconnected to reset the OTG back to b_idle state.
-
-Signed-off-by: Bin Liu <b-liu at ti.com>
----
- drivers/usb/musb/am35x.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
-index 57d4417..a59a5e7 100644
---- a/drivers/usb/musb/am35x.c
-+++ b/drivers/usb/musb/am35x.c
-@@ -79,6 +79,8 @@
- #define AM35X_TX_INTR_MASK	(AM35X_TX_EP_MASK << AM35X_INTR_TX_SHIFT)
- #define AM35X_RX_INTR_MASK	(AM35X_RX_EP_MASK << AM35X_INTR_RX_SHIFT)
- 
-+#define A_WAIT_BCON_TIMEOUT     1100            /* in ms */
-+
- /* CPPI 4.1 queue manager registers */
- #define QMGR_PEND0_REG		0x4090
- #define QMGR_PEND1_REG		0x4094
-@@ -599,6 +601,7 @@ static int am35x_musb_init(struct musb *musb)
- 	cppi41_init(musb);
- #endif
- 
-+	musb->a_wait_bcon = A_WAIT_BCON_TIMEOUT;
- 	musb->isr = am35x_musb_interrupt;
- 
- 	/* clear level interrupt */
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-allow-selecting-WL12XX_PLATFROM_DATA-independently.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-allow-selecting-WL12XX_PLATFROM_DATA-independently.patch
deleted file mode 100644
index c4736d2..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-allow-selecting-WL12XX_PLATFROM_DATA-independently.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From bc0118889db3c48fd5760fcd8d9633373a18d8fc Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Wed, 30 Mar 2011 15:39:26 +0200
-Subject: [PATCH 153/153] allow selecting WL12XX_PLATFROM_DATA independently of whether mac80211
- and wl12xx drivers are selected in the kernel.
- Needed for building with compat-wireless
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- arch/arm/mach-omap2/Kconfig         |    1 +
- drivers/net/wireless/wl12xx/Kconfig |    1 -
- 2 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
-index c787aef..0f67445 100644
---- a/arch/arm/mach-omap2/Kconfig
-+++ b/arch/arm/mach-omap2/Kconfig
-@@ -37,6 +37,7 @@ config ARCH_OMAP3
-	select ARM_L1_CACHE_SHIFT_6 if !ARCH_OMAP4
-	select ARCH_HAS_OPP
-	select PM_OPP if PM
-+	select WL12XX_PLATFORM_DATA
-
- config ARCH_OMAP4
-	bool "TI OMAP4"
-diff --git a/drivers/net/wireless/wl12xx/Kconfig b/drivers/net/wireless/wl12xx/Kconfig
-index b447559..441aaf6 100644
---- a/drivers/net/wireless/wl12xx/Kconfig
-+++ b/drivers/net/wireless/wl12xx/Kconfig
-@@ -42,5 +42,4 @@ config WL1271_SDIO
-
- config WL12XX_PLATFORM_DATA
-	bool
--	depends on WL1271_SDIO != n
-	default y
---
-1.7.0.4
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-mmc-sdio-support-suspend-resume-while-runtime-suspen.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-mmc-sdio-support-suspend-resume-while-runtime-suspen.patch
deleted file mode 100644
index ef3dc18..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-mmc-sdio-support-suspend-resume-while-runtime-suspen.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 3c61d0342093f4fbaeed8f063474ddfb250062fe Mon Sep 17 00:00:00 2001
-From: Ohad Ben-Cohen <ohad at wizery.com>
-Date: Sat, 2 Oct 2010 13:54:13 +0200
-Subject: [PATCH 2/6] mmc: sdio: support suspend/resume while runtime suspended
-
-Bring SDIO devices back to full power before their suspend
-handler is invoked.
-
-Doing so ensures that SDIO suspend/resume semantics are
-maintained (drivers still get to decide whether their
-card should be removed or kept during system suspend,
-and at what power state), and that SDIO suspend/resume
-execution paths are unchanged.
-
-This is achieved by resuming a runtime-suspended SDIO device
-in its ->prepare() PM callback (similary to the PCI subsystem).
-
-Since the PM core always increments the run-time usage
-counter before calling the ->prepare() callback and decrements
-it after calling the ->complete() callback, it is guaranteed
-that when the system will come out of suspend, our device's
-power state will reflect its runtime PM usage counter.
-
-Upstream status: accepted
-
-Signed-off-by: Ohad Ben-Cohen <ohad at wizery.com>
-Tested-by: Luciano Coelho <luciano.coelho at nokia.com>
-Signed-off-by: Chris Ball <cjb at laptop.org>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
----
- drivers/mmc/core/sdio_bus.c |   29 +++++++++++++++++++++++++++++
- 1 files changed, 29 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
-index d29b9c3..aadb12d 100644
---- a/drivers/mmc/core/sdio_bus.c
-+++ b/drivers/mmc/core/sdio_bus.c
-@@ -197,12 +197,41 @@ out:
- 
- #ifdef CONFIG_PM_RUNTIME
- 
-+static int sdio_bus_pm_prepare(struct device *dev)
-+{
-+	/*
-+	 * Resume an SDIO device which was suspended at run time at this
-+	 * point, in order to allow standard SDIO suspend/resume paths
-+	 * to keep working as usual.
-+	 *
-+	 * Ultimately, the SDIO driver itself will decide (in its
-+	 * suspend handler, or lack thereof) whether the card should be
-+	 * removed or kept, and if kept, at what power state.
-+	 *
-+	 * At this point, PM core have increased our use count, so it's
-+	 * safe to directly resume the device. After system is resumed
-+	 * again, PM core will drop back its runtime PM use count, and if
-+	 * needed device will be suspended again.
-+	 *
-+	 * The end result is guaranteed to be a power state that is
-+	 * coherent with the device's runtime PM use count.
-+	 *
-+	 * The return value of pm_runtime_resume is deliberately unchecked
-+	 * since there is little point in failing system suspend if a
-+	 * device can't be resumed.
-+	 */
-+	pm_runtime_resume(dev);
-+
-+	return 0;
-+}
-+
- static const struct dev_pm_ops sdio_bus_pm_ops = {
- 	SET_RUNTIME_PM_OPS(
- 		pm_generic_runtime_suspend,
- 		pm_generic_runtime_resume,
- 		pm_generic_runtime_idle
- 	)
-+	.prepare = sdio_bus_pm_prepare,
- };
- 
- #define SDIO_PM_OPS_PTR	(&sdio_bus_pm_ops)
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3-am3517evm-Update-NOR-partition-table.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3-am3517evm-Update-NOR-partition-table.patch
deleted file mode 100644
index c6b512c..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3-am3517evm-Update-NOR-partition-table.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 3cf420f85f2ccaf01e8b76a7bbdc0b7119269032 Mon Sep 17 00:00:00 2001
-From: Tom Rini <trini at ti.com>
-Date: Tue, 15 Nov 2011 17:44:24 -0700
-Subject: [PATCH 2/3] omap3:am3517evm: Update NOR partition table
-
-With newer U-Boot we use a different partition table on NOR
-
-Signed-off-by: Tom Rini <trini at ti.com>
----
- .../arch/arm/mach-omap2/board-am3517evm.c          |   19 ++++++-------------
- 1 files changed, 6 insertions(+), 13 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
-index 1d17415..e559f33 100644
---- a/arch/arm/mach-omap2/board-am3517evm.c
-+++ b/arch/arm/mach-omap2/board-am3517evm.c
-@@ -758,32 +758,25 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
- 
- /* NOR flash information */
- static struct mtd_partition am3517_evm_norflash_partitions[] = {
--	/* primiary bootloader (X-loader) in first 4 sectors(32K) */
--	{
--		.name           = "X-Loader-NOR",
--		.offset         = 0,
--		.size           = 4 * SZ_32K,
--		.mask_flags     = MTD_WRITEABLE, /* force read-only */
--	},
--	/* secondary bootloader (U-Boot, etc) in first 5 sectors(128K) */
-+	/* Bootloader (U-Boot) in first 512K */
- 	{
- 		.name           = "U-Boot-NOR",
--		.offset         = MTDPART_OFS_APPEND,
--		.size           = 5 * SZ_128K,
-+		.offset         = 0,
-+		.size           = 4 * SZ_128K,
- 		.mask_flags     = MTD_WRITEABLE, /* force read-only */
- 	},
--	/* bootloader params in the next 2 sectors */
-+	/* bootloader params in the next sector */
- 	{
- 		.name           = "Boot Env-NOR",
- 		.offset         = MTDPART_OFS_APPEND,
--		.size           = 2 * SZ_128K,
-+		.size           = SZ_128K,
- 		.mask_flags     = 0,
- 	},
- 	/* kernel */
- 	{
- 		.name           = "Kernel-NOR",
- 		.offset         = MTDPART_OFS_APPEND,
--		.size           = 32 * SZ_128K,
-+		.size           = 27 * SZ_128K,
- 		.mask_flags     = 0
- 	},
- 	/* file system */
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3_evm_defconfig-add-OCF-driver-support.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3_evm_defconfig-add-OCF-driver-support.patch
deleted file mode 100644
index add5f92..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-omap3_evm_defconfig-add-OCF-driver-support.patch
+++ /dev/null
@@ -1,2292 +0,0 @@
-From 26186d961f8d9c0874bbd52d2b788db2c82066d2 Mon Sep 17 00:00:00 2001
-From: Chase Maupin <Chase.Maupin at ti.com>
-Date: Mon, 27 Jun 2011 13:42:47 -0500
-Subject: [PATCH 2/3] omap3_evm_defconfig: add OCF driver support
-
-* Updated the defconfig to add OCF driver support.  This was
-  Added by doing:
-    * make omap3_evm_defconfig
-    * make xconfig
-    * Enable OCF - Static
-    * Enable Crypto Random - Static
-    * Enable RNG support - Static
-    * Enable Cryptodev - Module
-
-Upstream-Status: Inappropriate [SDK specific changes]
-
-Signed-off-by: Chase Maupin <Chase.Maupin at ti.com>
----
- arch/arm/configs/omap3_evm_defconfig | 1738 +++++++++++++++++++++++++++++++++-
- 1 files changed, 1725 insertions(+), 13 deletions(-)
-
-diff --git a/arch/arm/configs/omap3_evm_defconfig b/arch/arm/configs/omap3_evm_defconfig
-index 8db3574..6b9c736 100644
---- a/arch/arm/configs/omap3_evm_defconfig
-+++ b/arch/arm/configs/omap3_evm_defconfig
-@@ -1,39 +1,249 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux/arm 2.6.37 Kernel Configuration
-+# Mon Jun 27 13:40:14 2011
-+#
- CONFIG_ARM=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_INIT_ENV_ARG_LIMIT=32
-+CONFIG_CROSS_COMPILE=""
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+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=y
-+CONFIG_POSIX_MQUEUE_SYSCTL=y
- CONFIG_BSD_PROCESS_ACCT=y
-+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_HAVE_GENERIC_HARDIRQS is not set
-+# CONFIG_SPARSE_IRQ is not set
-+
-+#
-+# RCU Subsystem
-+#
-+CONFIG_TINY_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_TREE_RCU_TRACE is not set
- CONFIG_IKCONFIG=y
- CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=16
-+# CONFIG_CGROUPS is not set
-+# CONFIG_NAMESPACES is not set
-+# 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 is not set
-+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=y
- CONFIG_KALLSYMS_EXTRA_PASS=y
-+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=y
- CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
- CONFIG_PROFILING=y
-+CONFIG_TRACEPOINTS=y
- CONFIG_OPROFILE=y
-+CONFIG_HAVE_OPROFILE=y
- CONFIG_KPROBES=y
-+CONFIG_KRETPROBES=y
-+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 is not set
- CONFIG_MODULE_UNLOAD=y
- # CONFIG_MODULE_FORCE_UNLOAD is not set
- CONFIG_MODVERSIONS=y
- CONFIG_MODULE_SRCVERSION_ALL=y
-+CONFIG_BLOCK=y
-+CONFIG_LBDAF=y
- # CONFIG_BLK_DEV_BSG is not set
-+# 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
-@@ -51,6 +261,11 @@ CONFIG_OMAP_RESET_CLOCKS=y
- CONFIG_OMAP_MUX=y
- CONFIG_OMAP_MUX_DEBUG=y
- CONFIG_OMAP_MUX_WARNINGS=y
-+CONFIG_OMAP_MCBSP=y
-+# CONFIG_OMAP_MBOX_FWK is not set
-+CONFIG_OMAP_IOMMU=y
-+# CONFIG_OMAP_IOMMU_DEBUG is not set
-+# 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
-@@ -68,7 +283,6 @@ CONFIG_ARCH_OMAP3=y
- # CONFIG_ARCH_TI81XX is not set
- CONFIG_ARCH_OMAP3430=y
- CONFIG_OMAP_PACKAGE_CBB=y
--# CONFIG_OMAP_PACKAGE_CUS is not set
- 
- #
- # OMAP Board Type
-@@ -96,17 +310,47 @@ CONFIG_MACH_OMAP3EVM=y
- # 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
- CONFIG_OMAP3_PM_DISABLE_VT_SWITCH=y
-+# 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=y
- CONFIG_ARM_ERRATA_460075=y
-+# 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
-@@ -114,11 +358,42 @@ CONFIG_ARM_ERRATA_460075=y
- 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=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
- CONFIG_HZ=128
-+# CONFIG_THUMB2_KERNEL is not set
- CONFIG_AEABI=y
-+CONFIG_OABI_COMPAT=y
- 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=999999
-+# 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 is not set
-+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
-@@ -126,19 +401,32 @@ CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
- CONFIG_ZBOOT_ROM_TEXT=0x0
- CONFIG_ZBOOT_ROM_BSS=0x0
- CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200"
-+# 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 is not set
- CONFIG_CPU_FREQ_STAT=y
- CONFIG_CPU_FREQ_STAT_DETAILS=y
-+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
- CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-+# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
-+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
- CONFIG_CPU_FREQ_GOV_USERSPACE=y
- CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
-+# CONFIG_CPU_IDLE is not set
-+
- #
- # Floating point emulation
- #
-@@ -147,6 +435,8 @@ CONFIG_CPU_FREQ_GOV_ONDEMAND=y
- # At least one emulation must be selected
- #
- CONFIG_FPE_NWFPE=y
-+# CONFIG_FPE_NWFPE_XP is not set
-+# CONFIG_FPE_FASTFPE is not set
- CONFIG_VFP=y
- CONFIG_VFPv3=y
- CONFIG_NEON=y
-@@ -155,7 +445,9 @@ CONFIG_NEON=y
- # Userspace binary formats
- #
- CONFIG_BINFMT_ELF=y
-+CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
- CONFIG_HAVE_AOUT=y
-+# CONFIG_BINFMT_AOUT is not set
- CONFIG_BINFMT_MISC=y
- 
- #
-@@ -163,9 +455,20 @@ CONFIG_BINFMT_MISC=y
- #
- 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_PM_TEST_SUSPEND is not set
-+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
- 
- #
-@@ -175,129 +478,516 @@ CONFIG_PACKET=y
- CONFIG_UNIX=y
- CONFIG_XFRM=y
- CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+CONFIG_XFRM_MIGRATE=y
-+# CONFIG_XFRM_STATISTICS is not set
- CONFIG_NET_KEY=y
- CONFIG_NET_KEY_MIGRATE=y
- CONFIG_INET=y
- CONFIG_IP_MULTICAST=y
-+# 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 is not set
-+# CONFIG_NET_IPGRE_DEMUX is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
- # CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
- CONFIG_TCP_CONG_CUBIC=y
- CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
- # CONFIG_IPV6 is not set
-+# CONFIG_NETLABEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_RDS is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_L2TP is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_NET_DSA is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# 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 is not set
-+# CONFIG_PHONET is not set
-+# CONFIG_IEEE802154 is not set
-+# CONFIG_NET_SCHED is not set
-+# CONFIG_DCB is not set
-+CONFIG_DNS_RESOLVER=y
- 
- #
- # Network testing
- #
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_NET_TCPPROBE is not set
-+# CONFIG_NET_DROP_MONITOR is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
- CONFIG_WIRELESS=y
-+CONFIG_WIRELESS_EXT=y
-+CONFIG_WEXT_CORE=y
-+CONFIG_WEXT_PROC=y
-+# CONFIG_CFG80211 is not set
-+CONFIG_WIRELESS_EXT_SYSFS=y
-+# CONFIG_LIB80211 is not set
-+
-+#
-+# CFG80211 needs to be enabled for MAC80211
-+#
-+
-+#
-+# Some wireless drivers require a rate control algorithm
-+#
-+# CONFIG_WIMAX is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+# CONFIG_CAIF is not set
-+# CONFIG_CEPH_LIB is not set
-+
-+#
-+# Device Drivers
-+#
- 
- #
- # Generic Driver Options
- #
- CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+# CONFIG_DEVTMPFS is not set
-+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=y
-+# 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 is not set
- CONFIG_MTD_OOPS=y
-+
- #
- # RAM/ROM/Flash chip drivers
- #
- CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
-+# CONFIG_MTD_CFI_AMDSTD is not set
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# 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_PHYSMAP is not set
-+# CONFIG_MTD_ARM_INTEGRATOR 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_IDS=y
-+# CONFIG_MTD_NAND_DISKONCHIP is not set
-+# CONFIG_MTD_NAND_NANDSIM is not set
-+# CONFIG_MTD_NAND_PLATFORM is not set
-+# CONFIG_MTD_ALAUDA is not set
- CONFIG_MTD_ONENAND=y
- CONFIG_MTD_ONENAND_VERIFY_WRITE=y
-+# CONFIG_MTD_ONENAND_GENERIC is not set
- CONFIG_MTD_ONENAND_OMAP2=y
-+# CONFIG_MTD_ONENAND_OTP is not set
-+# CONFIG_MTD_ONENAND_2X_PROGRAM is not set
-+# CONFIG_MTD_ONENAND_SIM is not set
- 
- #
--# UBI - Unsorted block images
-+# LPDDR flash memory drivers
- #
-+# CONFIG_MTD_LPDDR is not set
-+# CONFIG_MTD_UBI 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_RAM=y
--CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
- 
- #
--# EEPROM support
-+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
- #
--CONFIG_EEPROM_LEGACY=y
-+# 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=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD 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 is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
- 
- #
- # SCSI device support
- #
-+CONFIG_SCSI_MOD=y
-+# CONFIG_RAID_ATTRS is not set
- 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 is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
- CONFIG_SCSI_MULTI_LUN=y
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
- CONFIG_SCSI_SCAN_ASYNC=y
-+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 is not set
-+# 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 is not set
-+# CONFIG_ISCSI_BOOT_SYSFS is not set
-+# 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 is not set
-+# CONFIG_BLK_DEV_DM is not set
- CONFIG_NETDEVICES=y
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+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=y
-+# CONFIG_BROADCOM_PHY is not set
-+# CONFIG_BCM63XX_PHY is not set
-+# 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 is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
- CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
-+# CONFIG_AX88796 is not set
-+# CONFIG_SMC91X is not set
-+# CONFIG_DM9000 is not set
-+# CONFIG_ENC28J60 is not set
-+# CONFIG_ETHOC is not set
-+# CONFIG_SMC911X is not set
- 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 is not set
-+# CONFIG_KS8851_MLL is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_TI_DAVINCI_EMAC is not set
-+# CONFIG_TI_DAVINCI_MDIO is not set
-+# CONFIG_STMMAC_ETH is not set
-+CONFIG_NETDEV_10000=y
-+CONFIG_WLAN=y
-+# CONFIG_USB_ZD1201 is not set
-+# CONFIG_HOSTAP is not set
-+CONFIG_WL12XX_PLATFORM_DATA=y
-+
-+#
-+# Enable WiMAX (Networking options) to see the WiMAX drivers
-+#
- 
- #
- # USB Network Adapters
- #
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
- 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 is not set
-+# CONFIG_USB_NET_SMSC75XX is not set
-+# CONFIG_USB_NET_SMSC95XX is not set
-+# CONFIG_USB_NET_GL620A is not set
-+CONFIG_USB_NET_NET1080=y
-+# CONFIG_USB_NET_PLUSB is not set
-+# CONFIG_USB_NET_MCS7830 is not set
-+# CONFIG_USB_NET_RNDIS_HOST is not set
-+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 is not set
-+# CONFIG_USB_NET_INT51X1 is not set
-+# CONFIG_USB_IPHETH is not set
-+# CONFIG_USB_SIERRA_NET is not set
-+# CONFIG_WAN is not set
-+
-+#
-+# CAIF transport drivers
-+#
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
- 
- #
- # Input device support
- #
- CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+# 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=y
- 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=y
-+# CONFIG_KEYBOARD_QT2160 is not set
-+# 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_MAX7359 is not set
-+# CONFIG_KEYBOARD_MCS is not set
-+# 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=y
-+# 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=y
- CONFIG_TOUCHSCREEN_ADS7846=y
-+# CONFIG_TOUCHSCREEN_AD7877 is not set
-+# CONFIG_TOUCHSCREEN_AD7879 is not set
-+# CONFIG_TOUCHSCREEN_BU21013 is not set
-+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-+# CONFIG_TOUCHSCREEN_EETI is not set
-+# CONFIG_TOUCHSCREEN_FUJITSU is not set
-+# CONFIG_TOUCHSCREEN_GUNZE is not set
-+# CONFIG_TOUCHSCREEN_ELO is not set
-+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-+# CONFIG_TOUCHSCREEN_MCS5000 is not set
-+# CONFIG_TOUCHSCREEN_MTOUCH is not set
-+# CONFIG_TOUCHSCREEN_INEXIO is not set
-+# CONFIG_TOUCHSCREEN_MK712 is not set
-+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-+# CONFIG_TOUCHSCREEN_QT602240 is not set
-+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-+# CONFIG_TOUCHSCREEN_TSC2007 is not set
-+# CONFIG_TOUCHSCREEN_TSC2004 is not set
-+# CONFIG_TOUCHSCREEN_W90X900 is not set
-+# CONFIG_TOUCHSCREEN_TPS6507X is not set
- CONFIG_INPUT_MISC=y
-+# CONFIG_INPUT_AD714X is not set
-+# 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 is not set
-+# CONFIG_INPUT_UINPUT is not set
-+# CONFIG_INPUT_PCF8574 is not set
-+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-+# CONFIG_INPUT_ADXL34X is not set
-+
-+#
-+# 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 is not set
-+
- #
- # Serial drivers
- #
-@@ -314,47 +1004,295 @@ 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 is not set
-+# 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_TI81XX_HDMI 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 is not set
-+CONFIG_I2C_HELPER_AUTO=y
-+
-+#
-+# 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 is not set
-+# CONFIG_SPI_TLE62X0 is not set
- 
- #
- # PPS support
- #
-+# CONFIG_PPS is not set
-+CONFIG_ARCH_REQUIRE_GPIOLIB=y
-+CONFIG_GPIOLIB=y
- CONFIG_DEBUG_GPIO=y
- CONFIG_GPIO_SYSFS=y
-+
-+#
-+# 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 is not set
-+# 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 is not set
-+
-+#
-+# 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=y
-+# CONFIG_POWER_SUPPLY_DEBUG is not set
-+# CONFIG_PDA_POWER is not set
-+# CONFIG_TEST_POWER is not set
-+# 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 is not set
-+# CONFIG_CHARGER_TWL4030 is not set
-+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 is not set
-+# CONFIG_SENSORS_ADT7462 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7475 is not set
-+# CONFIG_SENSORS_ASC7621 is not set
-+# 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 is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_JC42 is not set
-+# 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 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_EMC1403 is not set
-+# CONFIG_SENSORS_EMC2103 is not set
-+# 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 is not set
-+# CONFIG_SENSORS_AMC6821 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_TMP102 is not set
-+# 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 is not set
- 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 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 is not set
- CONFIG_TWL4030_CORE=y
- CONFIG_TWL4030_POWER=y
-+CONFIG_TWL4030_CODEC=y
-+# CONFIG_TWL6030_PWM is not set
-+# 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 is not set
- CONFIG_REGULATOR=y
-+# CONFIG_REGULATOR_DEBUG is not set
- CONFIG_REGULATOR_DUMMY=y
-+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-+# 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_MEDIA_SUPPORT=y
- 
- #
-@@ -366,6 +1304,7 @@ CONFIG_VIDEO_V4L2_COMMON=y
- CONFIG_VIDEO_ALLOW_V4L1=y
- CONFIG_VIDEO_V4L1_COMPAT=y
- CONFIG_VIDEO_V4L2_SUBDEV_API=y
-+# CONFIG_DVB_CORE is not set
- CONFIG_VIDEO_MEDIA=y
- 
- #
-@@ -373,56 +1312,224 @@ CONFIG_VIDEO_MEDIA=y
- #
- # CONFIG_IR_CORE is not set
- # CONFIG_MEDIA_ATTACH is not set
--# CONFIG_MEDIA_TUNER is not set
-+CONFIG_MEDIA_TUNER=y
- # CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-+CONFIG_MEDIA_TUNER_SIMPLE=y
-+CONFIG_MEDIA_TUNER_TDA8290=y
-+CONFIG_MEDIA_TUNER_TDA827X=y
-+CONFIG_MEDIA_TUNER_TDA18271=y
-+CONFIG_MEDIA_TUNER_TDA9887=y
-+CONFIG_MEDIA_TUNER_TEA5761=y
-+CONFIG_MEDIA_TUNER_TEA5767=y
-+CONFIG_MEDIA_TUNER_MT20XX=y
-+CONFIG_MEDIA_TUNER_XC2028=y
-+CONFIG_MEDIA_TUNER_XC5000=y
-+CONFIG_MEDIA_TUNER_MC44S803=y
- CONFIG_VIDEO_V4L2=y
- CONFIG_VIDEO_V4L1=y
- CONFIG_VIDEOBUF_GEN=y
- CONFIG_VIDEOBUF_DMA_CONTIG=y
--CONFIG_VIDEOBUF_DMA_SG=y
- 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
-+
-+#
-+# 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 is not set
-+# CONFIG_VIDEO_CS5345 is not set
-+# CONFIG_VIDEO_CS53L32A is not set
-+# CONFIG_VIDEO_M52790 is not set
-+# CONFIG_VIDEO_TLV320AIC23B is not set
-+# CONFIG_VIDEO_WM8775 is not set
-+# 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_MT9T001 is not set
-+# CONFIG_VIDEO_MT9V011 is not set
-+# CONFIG_VIDEO_MT9V032 is not set
-+# CONFIG_VIDEO_MT9V113 is not set
- CONFIG_VIDEO_MT9T111=y
-+# CONFIG_VIDEO_TCM825X is not set
-+# CONFIG_VIDEO_SAA7110 is not set
-+# CONFIG_VIDEO_SAA711X is not set
-+# CONFIG_VIDEO_SAA717X is not set
-+# CONFIG_VIDEO_SAA7191 is not set
- CONFIG_VIDEO_TVP514X=y
-+# 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 is not set
-+
-+#
-+# MPEG video encoders
-+#
-+# CONFIG_VIDEO_CX2341X is not set
-+
-+#
-+# 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_VPSS_SYSTEM is not set
-+# CONFIG_VIDEO_VPFE_CAPTURE is not set
- CONFIG_VIDEO_OMAP2_VOUT=y
-+# CONFIG_VIDEO_CPIA2 is not set
-+# CONFIG_VIDEO_SR030PC30 is not set
- CONFIG_VIDEO_OMAP3=y
-+# CONFIG_VIDEO_OMAP3_DEBUG is not set
-+# CONFIG_SOC_CAMERA is not set
- CONFIG_V4L_USB_DRIVERS=y
- CONFIG_USB_VIDEO_CLASS=y
- CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-+CONFIG_USB_GSPCA=m
-+# CONFIG_USB_M5602 is not set
-+# CONFIG_USB_STV06XX is not set
-+# CONFIG_USB_GL860 is not set
-+# CONFIG_USB_GSPCA_BENQ is not set
-+# CONFIG_USB_GSPCA_CONEX is not set
-+# CONFIG_USB_GSPCA_CPIA1 is not set
-+# CONFIG_USB_GSPCA_ETOMS is not set
-+# CONFIG_USB_GSPCA_FINEPIX is not set
-+# CONFIG_USB_GSPCA_JEILINJ is not set
-+# CONFIG_USB_GSPCA_KONICA is not set
-+# CONFIG_USB_GSPCA_MARS is not set
-+# CONFIG_USB_GSPCA_MR97310A is not set
-+# CONFIG_USB_GSPCA_OV519 is not set
-+# CONFIG_USB_GSPCA_OV534 is not set
-+# CONFIG_USB_GSPCA_OV534_9 is not set
-+# CONFIG_USB_GSPCA_PAC207 is not set
-+# CONFIG_USB_GSPCA_PAC7302 is not set
-+# CONFIG_USB_GSPCA_PAC7311 is not set
-+# CONFIG_USB_GSPCA_SN9C2028 is not set
-+# CONFIG_USB_GSPCA_SN9C20X is not set
-+# CONFIG_USB_GSPCA_SONIXB is not set
-+# CONFIG_USB_GSPCA_SONIXJ is not set
-+# CONFIG_USB_GSPCA_SPCA500 is not set
-+# CONFIG_USB_GSPCA_SPCA501 is not set
-+# CONFIG_USB_GSPCA_SPCA505 is not set
-+# CONFIG_USB_GSPCA_SPCA506 is not set
-+# CONFIG_USB_GSPCA_SPCA508 is not set
-+# CONFIG_USB_GSPCA_SPCA561 is not set
-+# CONFIG_USB_GSPCA_SPCA1528 is not set
-+# CONFIG_USB_GSPCA_SQ905 is not set
-+# CONFIG_USB_GSPCA_SQ905C is not set
-+# CONFIG_USB_GSPCA_SQ930X is not set
-+# CONFIG_USB_GSPCA_STK014 is not set
-+# CONFIG_USB_GSPCA_STV0680 is not set
-+# CONFIG_USB_GSPCA_SUNPLUS is not set
-+# CONFIG_USB_GSPCA_T613 is not set
-+# CONFIG_USB_GSPCA_TV8532 is not set
-+# CONFIG_USB_GSPCA_VC032X is not set
-+# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
-+# CONFIG_USB_GSPCA_ZC3XX is not set
-+# CONFIG_VIDEO_PVRUSB2 is not set
-+# CONFIG_VIDEO_HDPVR is not set
-+# CONFIG_VIDEO_USBVISION is not set
-+# CONFIG_USB_VICAM is not set
-+# CONFIG_USB_IBMCAM is not set
-+# CONFIG_USB_KONICAWC is not set
-+# CONFIG_USB_ET61X251 is not set
-+# CONFIG_USB_SE401 is not set
-+# CONFIG_USB_SN9C102 is not set
-+# CONFIG_USB_PWC is not set
-+# CONFIG_USB_ZR364XX is not set
-+# CONFIG_USB_STKWEBCAM is not set
-+# CONFIG_USB_S2255 is not set
-+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
- # CONFIG_RADIO_ADAPTERS is not set
- # CONFIG_DAB is not set
- 
- #
- # Graphics support
- #
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
- CONFIG_FB=y
- CONFIG_FIRMWARE_EDID=y
-+# 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 is not set
-+# CONFIG_FB_SYS_COPYAREA is not set
-+# CONFIG_FB_SYS_IMAGEBLIT is not set
-+# CONFIG_FB_FOREIGN_ENDIAN is not set
-+# CONFIG_FB_SYS_FOPS is not set
-+# 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=y
- 
- #
- # 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=4
- 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_VENC_OUT_TYPE_SVIDEO=y
-+# CONFIG_OMAP2_VENC_OUT_TYPE_COMPOSITE is not set
-+# 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=1
- CONFIG_FB_OMAP2=y
- CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
-@@ -433,34 +1540,143 @@ CONFIG_FB_OMAP2_NUM_FBS=1
- #
- 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 is not set
-+# CONFIG_PANEL_TPO_TD043MTEA1 is not set
- CONFIG_BACKLIGHT_LCD_SUPPORT=y
- CONFIG_LCD_CLASS_DEVICE=y
-+# CONFIG_LCD_L4F00242T03 is not set
-+# CONFIG_LCD_LMS283GF05 is not set
-+# CONFIG_LCD_LTV350QV is not set
-+# CONFIG_LCD_TDO24M is not set
-+# CONFIG_LCD_VGG2432A4 is not set
- CONFIG_LCD_PLATFORM=y
-+# CONFIG_LCD_S6E63M0 is not set
- CONFIG_BACKLIGHT_CLASS_DEVICE=y
- CONFIG_BACKLIGHT_GENERIC=m
-+# CONFIG_BACKLIGHT_ADP8860 is not set
- 
- #
- # Display device support
- #
- CONFIG_DISPLAY_SUPPORT=y
-+
-+#
-+# Display hardware drivers
-+#
-+
- #
- # Console display driver support
- #
-+CONFIG_DUMMY_CONSOLE=y
-+# CONFIG_FRAMEBUFFER_CONSOLE is not set
- CONFIG_LOGO=y
- CONFIG_LOGO_LINUX_MONO=y
- CONFIG_LOGO_LINUX_VGA16=y
- CONFIG_LOGO_LINUX_CLUT224=y
- CONFIG_SOUND=y
-+# CONFIG_SOUND_OSS_CORE is not set
- 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 is not set
-+# CONFIG_SND_MIXER_OSS is not set
-+# CONFIG_SND_PCM_OSS is not set
-+# CONFIG_SND_HRTIMER is not set
-+# CONFIG_SND_DYNAMIC_MINORS is not set
-+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 is not set
-+# 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 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=y
-+CONFIG_SND_SPI=y
- CONFIG_SND_USB=y
- CONFIG_SND_USB_AUDIO=y
-+# CONFIG_SND_USB_UA101 is not set
-+# CONFIG_SND_USB_CAIAQ is not set
- CONFIG_SND_SOC=y
- CONFIG_SND_OMAP_SOC=y
-+CONFIG_SND_OMAP_SOC_MCBSP=y
- CONFIG_SND_OMAP_SOC_OMAP3EVM=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 is not set
-+# CONFIG_HID_ACRUX_FF is not set
-+# CONFIG_HID_APPLE is not set
-+# CONFIG_HID_BELKIN is not set
-+# CONFIG_HID_CANDO is not set
-+# CONFIG_HID_CHERRY is not set
-+# CONFIG_HID_CHICONY is not set
-+# CONFIG_HID_PRODIKEYS is not set
-+# CONFIG_HID_CYPRESS is not set
-+# CONFIG_HID_DRAGONRISE is not set
-+# CONFIG_HID_EGALAX is not set
-+# CONFIG_HID_EZKEY is not set
-+# CONFIG_HID_KYE is not set
-+# CONFIG_HID_UCLOGIC is not set
-+# CONFIG_HID_WALTOP is not set
-+# CONFIG_HID_GYRATION is not set
-+# CONFIG_HID_TWINHAN is not set
-+# CONFIG_HID_KENSINGTON is not set
-+# CONFIG_HID_LOGITECH is not set
-+# CONFIG_HID_MICROSOFT is not set
-+# CONFIG_HID_MOSART is not set
-+# CONFIG_HID_MONTEREY is not set
-+# CONFIG_HID_NTRIG is not set
-+# CONFIG_HID_ORTEK is not set
-+# CONFIG_HID_PANTHERLORD is not set
-+# CONFIG_HID_PETALYNX is not set
-+# CONFIG_HID_PICOLCD is not set
-+# CONFIG_HID_QUANTA is not set
-+# CONFIG_HID_ROCCAT is not set
-+# CONFIG_HID_ROCCAT_KONE is not set
-+# CONFIG_HID_ROCCAT_PYRA is not set
-+# CONFIG_HID_SAMSUNG is not set
-+# CONFIG_HID_SONY is not set
-+# CONFIG_HID_STANTUM is not set
-+# CONFIG_HID_SUNPLUS is not set
-+# CONFIG_HID_GREENASIA is not set
-+# CONFIG_HID_SMARTJOYPLUS is not set
-+# CONFIG_HID_TOPSEED is not set
-+# CONFIG_HID_THRUSTMASTER 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
-@@ -542,20 +1758,93 @@ CONFIG_USB_MUSB_DEBUG=y
- # 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 is not set
- # 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 is not set
-+
- #
- # USB Miscellaneous drivers
- #
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_SEVSEG is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
- CONFIG_USB_TEST=y
-+# CONFIG_USB_ISIGHTFW is not set
-+# CONFIG_USB_YUREX is not set
- CONFIG_USB_GADGET=y
- # CONFIG_USB_GADGET_DEBUG is not set
- # CONFIG_USB_GADGET_DEBUG_FILES is not set
- # CONFIG_USB_GADGET_DEBUG_FS is not set
-+CONFIG_USB_GADGET_VBUS_DRAW=2
-+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=y
- CONFIG_USB_ETH_RNDIS=y
-+# CONFIG_USB_ETH_EEM is not set
-+# CONFIG_USB_GADGETFS is not set
-+# CONFIG_USB_FUNCTIONFS 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 is not set
-+# CONFIG_USB_G_DBGP is not set
-+# CONFIG_USB_G_WEBCAM is not set
-+
-+#
-+# OTG and related infrastructure
-+#
-+CONFIG_USB_OTG_UTILS=y
-+# CONFIG_USB_GPIO_VBUS is not set
-+# CONFIG_ISP1301_OMAP is not set
-+# CONFIG_USB_ULPI is not set
-+# CONFIG_TWL4030_USB is not set
-+CONFIG_NOP_USB_XCEIV=y
- CONFIG_MMC=y
- # CONFIG_MMC_DEBUG is not set
- CONFIG_MMC_UNSAFE_RESUME=y
-@@ -563,15 +1852,28 @@ 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=y
- CONFIG_MMC_OMAP_HS=y
-+# CONFIG_MMC_SPI is not set
-+# CONFIG_MMC_USHC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_ACCESSIBILITY is not set
- CONFIG_RTC_LIB=y
- CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
- 
- #
- # RTC interfaces
-@@ -579,94 +1881,504 @@ CONFIG_RTC_CLASS=y
- 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 is not set
-+# 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 is not set
- CONFIG_RTC_DRV_TWL4030=y
-+# 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 is not set
-+# CONFIG_STAGING 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=y
- # CONFIG_EXT3_FS_XATTR is not set
--CONFIG_INOTIFY=y
-+# CONFIG_EXT4_FS is not set
-+CONFIG_JBD=y
-+# CONFIG_JBD_DEBUG is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+CONFIG_FS_POSIX_ACL=y
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+# CONFIG_BTRFS_FS is not set
-+# CONFIG_NILFS2_FS is not set
-+CONFIG_FILE_LOCKING=y
-+CONFIG_FSNOTIFY=y
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_FANOTIFY is not set
- 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 is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# Caches
-+#
-+# CONFIG_FSCACHE is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
- 
- #
- # 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 is not set
-+
- #
- # 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 is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+CONFIG_MISC_FILESYSTEMS=y
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_ECRYPT_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
- 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=y
-+# CONFIG_JFFS2_CMODE_SIZE is not set
-+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-+# CONFIG_LOGFS is not set
- CONFIG_CRAMFS=y
-+# CONFIG_SQUASHFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_OMFS_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
- CONFIG_NFS_FS=y
- CONFIG_NFS_V3=y
- CONFIG_NFS_V3_ACL=y
- 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 is not set
- CONFIG_LOCKD=y
- CONFIG_LOCKD_V4=y
-+CONFIG_NFS_ACL_SUPPORT=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_CEPH_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS 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 is not set
- CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# 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 is not set
-+# CONFIG_SYSV68_PARTITION is not set
- CONFIG_NLS=y
- CONFIG_NLS_DEFAULT="iso8859-1"
- CONFIG_NLS_CODEPAGE_437=y
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
- CONFIG_NLS_ISO8859_1=y
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+# CONFIG_DLM 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 is not set
-+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_RT_MUTEXES is not set
-+# CONFIG_RT_MUTEX_TESTER is not set
-+CONFIG_DEBUG_SPINLOCK=y
-+CONFIG_DEBUG_MUTEXES=y
-+CONFIG_BKL=y
-+CONFIG_DEBUG_LOCK_ALLOC=y
- CONFIG_PROVE_LOCKING=y
-+# CONFIG_PROVE_RCU is not set
-+# CONFIG_SPARSE_RCU_POINTER is not set
-+CONFIG_LOCKDEP=y
- CONFIG_LOCK_STAT=y
-+# CONFIG_DEBUG_LOCKDEP is not set
-+CONFIG_TRACE_IRQFLAGS=y
- CONFIG_DEBUG_SPINLOCK_SLEEP=y
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
- CONFIG_STACKTRACE=y
-+# CONFIG_DEBUG_KOBJECT is not set
-+CONFIG_DEBUG_BUGVERBOSE=y
- CONFIG_DEBUG_INFO=y
--# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-+# CONFIG_DEBUG_INFO_REDUCED 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_KPROBES_SANITY_TEST 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_NOP_TRACER=y
-+CONFIG_HAVE_FUNCTION_TRACER=y
-+CONFIG_HAVE_DYNAMIC_FTRACE=y
-+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-+CONFIG_RING_BUFFER=y
-+CONFIG_EVENT_TRACING=y
-+CONFIG_CONTEXT_SWITCH_TRACER=y
-+CONFIG_RING_BUFFER_ALLOW_SWAP=y
-+CONFIG_TRACING=y
-+CONFIG_TRACING_SUPPORT=y
-+CONFIG_FTRACE=y
-+# CONFIG_FUNCTION_TRACER is not set
-+# CONFIG_IRQSOFF_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_KPROBE_EVENT=y
-+# CONFIG_RING_BUFFER_BENCHMARK is not set
-+# CONFIG_DYNAMIC_DEBUG is not set
-+# CONFIG_ATOMIC64_SELFTEST 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=y
- # CONFIG_EARLY_PRINTK is not set
-+# CONFIG_DEBUG_ICEDCC 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=y
-+# CONFIG_SECURITYFS is not set
-+# CONFIG_SECURITY_NETWORK is not set
-+# CONFIG_SECURITY_PATH is not set
-+# CONFIG_SECURITY_TOMOYO is not set
-+# CONFIG_SECURITY_APPARMOR is not set
-+# CONFIG_IMA is not set
-+CONFIG_DEFAULT_SECURITY_DAC=y
-+CONFIG_DEFAULT_SECURITY=""
-+CONFIG_CRYPTO=y
-+
-+#
-+# Crypto core or helper
-+#
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_ALGAPI2=y
-+CONFIG_CRYPTO_AEAD2=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+CONFIG_CRYPTO_BLKCIPHER2=y
-+CONFIG_CRYPTO_HASH=y
-+CONFIG_CRYPTO_HASH2=y
-+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 is not set
-+# CONFIG_CRYPTO_NULL is not set
-+CONFIG_CRYPTO_WORKQUEUE=y
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_TEST is not set
-+
-+#
-+# Authenticated Encryption with Associated Data
-+#
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_SEQIV is not set
-+
-+#
-+# Block modes
-+#
-+CONFIG_CRYPTO_CBC=y
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_CTS is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_XTS is not set
-+
-+#
-+# Hash modes
-+#
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_VMAC is not set
- 
-+#
-+# Digest
-+#
-+CONFIG_CRYPTO_CRC32C=y
-+# CONFIG_CRYPTO_GHASH is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_RMD128 is not set
-+# CONFIG_CRYPTO_RMD160 is not set
-+# CONFIG_CRYPTO_RMD256 is not set
-+# CONFIG_CRYPTO_RMD320 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+
-+#
-+# Ciphers
-+#
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+
-+#
-+# Compression
-+#
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_ZLIB is not set
-+# CONFIG_CRYPTO_LZO is not set
- 
- #
- # Random Number Generation
- #
- # CONFIG_CRYPTO_ANSI_CPRNG is not set
- CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_OMAP_SHAM is not set
-+# CONFIG_CRYPTO_DEV_OMAP_AES is not set
-+
-+#
-+# OCF Configuration
-+#
-+CONFIG_OCF_OCF=y
-+CONFIG_OCF_RANDOMHARVEST=y
-+CONFIG_OCF_FIPS=y
-+CONFIG_OCF_CRYPTODEV=m
-+# CONFIG_OCF_CRYPTOSOFT is not set
-+# CONFIG_OCF_BENCH is not set
-+CONFIG_BINARY_PRINTF=y
-+
- #
- # Library routines
- #
-+CONFIG_BITREVERSE=y
-+CONFIG_GENERIC_FIND_LAST_BIT=y
- CONFIG_CRC_CCITT=y
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_T10DIF is not set
-+# CONFIG_CRC_ITU_T is not set
- CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
- CONFIG_LIBCRC32C=y
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_LZO_COMPRESS=y
-+CONFIG_LZO_DECOMPRESS=y
-+CONFIG_DECOMPRESS_GZIP=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_NLATTR=y
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-usb-musb-am35x-fix-role-switching-issue.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-usb-musb-am35x-fix-role-switching-issue.patch
deleted file mode 100644
index 1ab6bdd..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0002-usb-musb-am35x-fix-role-switching-issue.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 96fa47d92d10382f4e0d9b6e3ab2c627e4671716 Mon Sep 17 00:00:00 2001
-From: Bin Liu <b-liu at ti.com>
-Date: Wed, 30 May 2012 18:28:07 -0500
-Subject: [PATCH 2/2] usb: musb: am35x: fix role switching issue
-
-Fixing the role switching issue seen when followed steps below:
-
-a) Configure port in OTG mode
-b) Connect MSC device through micro-A-plug to std-A-receptacle
-c) MSC enumerated and works fine
-d) Disconnect MSC device and let cable be connected to port
-e) Now disconnect cable also
-f) Connect port to host PC using micro-B plug to std-A plug
-e) PC doesn't recognise the gadget driver
-
-Signed-off-by: Ajay Kumar Gupta <ajay.gupta at ti.com>
-Signed-off-by: Bin Liu <b-liu at ti.com>
----
- drivers/usb/musb/am35x.c |   25 ++++++++++++++++++++-----
- 1 files changed, 20 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/usb/musb/am35x.c b/drivers/usb/musb/am35x.c
-index a59a5e7..d32fb77 100644
---- a/drivers/usb/musb/am35x.c
-+++ b/drivers/usb/musb/am35x.c
-@@ -368,6 +368,13 @@ static void otg_timer(unsigned long _musb)
- 		devctl = musb_readb(mregs, MUSB_DEVCTL);
- 		if (devctl & MUSB_DEVCTL_BDEVICE)
- 			mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
-+		else if ((devctl & MUSB_DEVCTL_SESSION) &&
-+				!(devctl & MUSB_DEVCTL_BDEVICE)) {
-+			mod_timer(&otg_workaround,
-+					jiffies + POLL_SECONDS * HZ);
-+			musb_writeb(musb->mregs, MUSB_DEVCTL, devctl &
-+					~MUSB_DEVCTL_SESSION);
-+		}
- 		else
- 			musb->xceiv->state = OTG_STATE_A_IDLE;
- 		break;
-@@ -502,11 +509,19 @@ static irqreturn_t am35x_musb_interrupt(int irq, void *hci)
- 			mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
- 			WARNING("VBUS error workaround (delay coming)\n");
- 		} else if (is_host_enabled(musb) && drvvbus) {
--			MUSB_HST_MODE(musb);
--			musb->xceiv->default_a = 1;
--			musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
--			portstate(musb->port1_status |= USB_PORT_STAT_POWER);
--			del_timer(&otg_workaround);
-+			if (!(devctl & MUSB_DEVCTL_SESSION) ||
-+			   (devctl & MUSB_DEVCTL_BDEVICE) ||
-+			   (devctl & MUSB_DEVCTL_HM)) {
-+				if (musb->is_active)
-+					del_timer(&otg_workaround);
-+				else
-+					musb->is_active = 1;
-+
-+				MUSB_HST_MODE(musb);
-+				musb->xceiv->default_a = 1;
-+				musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
-+				portstate(musb->port1_status |= USB_PORT_STAT_POWER);
-+			}
- 		} else {
- 			musb->is_active = 0;
- 			MUSB_DEV_MODE(musb);
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-AM3517-Add-am3517_evn_nor_defconfig.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-AM3517-Add-am3517_evn_nor_defconfig.patch
deleted file mode 100644
index fac87de..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-AM3517-Add-am3517_evn_nor_defconfig.patch
+++ /dev/null
@@ -1,256 +0,0 @@
-From 0fa5a9c5cf331d5df578797e778f18de223e02aa Mon Sep 17 00:00:00 2001
-From: Tom Rini <trini at ti.com>
-Date: Wed, 16 Nov 2011 09:02:23 -0700
-Subject: [PATCH 3/3] AM3517: Add am3517_evn_nor_defconfig
-
-When building for NOR, we need to disable NAND.  Provide a config
-that does so.
-
-Signed-off-by: Tom Rini <trini at ti.com>
----
- arch/arm/configs/am3517_evm_nor_defconfig      |  233 ++++++++++++++++++++
- 1 files changed, 233 insertions(+), 0 deletions(-)
- create mode 100644 arch/arm/configs/am3517_evm_nor_defconfig
-
-diff --git a/arch/arm/configs/am3517_evm_nor_defconfig b/arch/arm/configs/am3517_evm_nor_defconfig
-new file mode 100644
-index 0000000..70bd7dd
---- /dev/null
-+++ b/arch/arm/configs/am3517_evm_nor_defconfig
-@@ -0,0 +1,233 @@
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_SYSVIPC=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+CONFIG_IKCONFIG=y
-+CONFIG_IKCONFIG_PROC=y
-+CONFIG_LOG_BUF_SHIFT=16
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_EMBEDDED=y
-+# CONFIG_SYSCTL_SYSCALL is not set
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_SLAB=y
-+CONFIG_PROFILING=y
-+CONFIG_OPROFILE=y
-+CONFIG_KPROBES=y
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+CONFIG_MODVERSIONS=y
-+CONFIG_MODULE_SRCVERSION_ALL=y
-+# CONFIG_BLK_DEV_BSG is not set
-+CONFIG_ARCH_OMAP=y
-+CONFIG_OMAP_RESET_CLOCKS=y
-+CONFIG_OMAP_MUX_DEBUG=y
-+# CONFIG_ARCH_OMAP2 is not set
-+# CONFIG_ARCH_OMAP4 is not set
-+# CONFIG_MACH_OMAP3_BEAGLE is not set
-+# 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 is not set
-+# CONFIG_MACH_OMAP3EVM is not set
-+# CONFIG_MACH_OMAP3_PANDORA is not set
-+# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
-+# 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 is not set
-+# 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_ARM_THUMBEE=y
-+CONFIG_ARM_ERRATA_430973=y
-+CONFIG_ARM_ERRATA_458693=y
-+CONFIG_ARM_ERRATA_460075=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_ZBOOT_ROM_TEXT=0x0
-+CONFIG_ZBOOT_ROM_BSS=0x0
-+CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200"
-+CONFIG_KEXEC=y
-+CONFIG_FPE_NWFPE=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_PM_DEBUG=y
-+CONFIG_NET=y
-+CONFIG_PACKET=y
-+CONFIG_UNIX=y
-+CONFIG_XFRM_USER=y
-+CONFIG_NET_KEY=y
-+CONFIG_NET_KEY_MIGRATE=y
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+CONFIG_IP_PNP_RARP=y
-+# CONFIG_INET_LRO is not set
-+# CONFIG_IPV6 is not set
-+CONFIG_CAN=y
-+CONFIG_CAN_RAW=y
-+CONFIG_CAN_BCM=y
-+CONFIG_CAN_VCAN=y
-+CONFIG_CAN_DEV=y
-+CONFIG_CAN_CALC_BITTIMING=y
-+CONFIG_CAN_TI_HECC=y
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_MTD=y
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLOCK=y
-+CONFIG_MTD_OOPS=y
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_CFI_INTELEXT=y
-+CONFIG_MTD_CFI_AMDSTD=y
-+CONFIG_MTD_PHYSMAP=y
-+CONFIG_MTD_BLOCK2MTD=y
-+CONFIG_BLK_DEV_LOOP=y
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+CONFIG_SCSI=y
-+CONFIG_BLK_DEV_SD=y
-+CONFIG_SCSI_MULTI_LUN=y
-+CONFIG_SCSI_SCAN_ASYNC=y
-+CONFIG_MD=y
-+CONFIG_NETDEVICES=y
-+CONFIG_SMSC_PHY=y
-+CONFIG_NET_ETHERNET=y
-+CONFIG_SMSC911X=y
-+CONFIG_TI_DAVINCI_EMAC=y
-+CONFIG_USB_USBNET=y
-+# CONFIG_USB_NET_AX8817X is not set
-+CONFIG_USB_NET_DM9601=y
-+# CONFIG_USB_NET_NET1080 is not set
-+# CONFIG_USB_NET_CDC_SUBSET is not set
-+# CONFIG_USB_NET_ZAURUS is not set
-+CONFIG_INPUT_JOYDEV=y
-+CONFIG_INPUT_EVDEV=y
-+CONFIG_KEYBOARD_TCA6416=y
-+CONFIG_INPUT_TOUCHSCREEN=y
-+CONFIG_TOUCHSCREEN_TSC2004=y
-+CONFIG_INPUT_MISC=y
-+CONFIG_VT_HW_CONSOLE_BINDING=y
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=32
-+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
-+# CONFIG_LEGACY_PTYS is not set
-+CONFIG_HW_RANDOM=y
-+CONFIG_I2C_CHARDEV=y
-+CONFIG_SPI=y
-+CONFIG_SPI_OMAP24XX=y
-+CONFIG_DEBUG_GPIO=y
-+CONFIG_GPIO_SYSFS=y
-+CONFIG_GPIO_PCA953X=y
-+CONFIG_POWER_SUPPLY=y
-+CONFIG_WATCHDOG=y
-+CONFIG_WATCHDOG_NOWAYOUT=y
-+CONFIG_OMAP_WATCHDOG=y
-+CONFIG_REGULATOR_DUMMY=y
-+CONFIG_REGULATOR_TPS65023=y
-+CONFIG_MEDIA_SUPPORT=y
-+CONFIG_VIDEO_DEV=y
-+# CONFIG_IR_CORE is not set
-+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-+CONFIG_VIDEO_TVP514X=y
-+CONFIG_VIDEO_VPFE_CAPTURE=y
-+CONFIG_VIDEO_OMAP2_VOUT=y
-+CONFIG_USB_VIDEO_CLASS=y
-+# CONFIG_RADIO_ADAPTERS is not set
-+CONFIG_FB=y
-+CONFIG_FIRMWARE_EDID=y
-+CONFIG_FB_MODE_HELPERS=y
-+CONFIG_FB_TILEBLITTING=y
-+CONFIG_OMAP2_VRAM_SIZE=4
-+CONFIG_OMAP2_DSS_DSI=y
-+CONFIG_OMAP2_DSS_USE_DSI_PLL=y
-+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=1
-+CONFIG_FB_OMAP2=y
-+CONFIG_FB_OMAP2_NUM_FBS=1
-+CONFIG_PANEL_GENERIC=y
-+CONFIG_PANEL_SHARP_LQ043T1DG01=y
-+CONFIG_BACKLIGHT_LCD_SUPPORT=y
-+CONFIG_LCD_CLASS_DEVICE=y
-+CONFIG_LCD_PLATFORM=y
-+CONFIG_BACKLIGHT_CLASS_DEVICE=y
-+CONFIG_BACKLIGHT_GENERIC=m
-+CONFIG_DISPLAY_SUPPORT=y
-+CONFIG_LOGO=y
-+CONFIG_SOUND=y
-+CONFIG_SND=y
-+CONFIG_SND_USB_AUDIO=y
-+CONFIG_SND_SOC=y
-+CONFIG_SND_OMAP_SOC=y
-+CONFIG_SND_OMAP_SOC_AM3517EVM=y
-+CONFIG_USB=y
-+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_SUSPEND=y
-+# CONFIG_USB_OTG_WHITELIST is not set
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_MUSB_HDRC=y
-+CONFIG_USB_MUSB_AM35X_GLUE=y
-+CONFIG_USB_MUSB_OTG=y
-+CONFIG_USB_GADGET_MUSB_HDRC=y
-+CONFIG_USB_MUSB_DEBUG=y
-+CONFIG_USB_STORAGE=y
-+CONFIG_USB_TEST=y
-+CONFIG_USB_GADGET=y
-+CONFIG_USB_ETH=y
-+CONFIG_NOP_USB_XCEIV=y
-+CONFIG_MMC=y
-+CONFIG_SDIO_UART=y
-+CONFIG_MMC_OMAP=y
-+CONFIG_MMC_OMAP_HS=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_DRV_S35390A=y
-+CONFIG_EXT2_FS=y
-+CONFIG_EXT3_FS=y
-+# CONFIG_EXT3_FS_XATTR is not set
-+CONFIG_QUOTA=y
-+CONFIG_QFMT_V2=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_TMPFS=y
-+CONFIG_JFFS2_FS=y
-+CONFIG_JFFS2_SUMMARY=y
-+CONFIG_JFFS2_FS_XATTR=y
-+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-+CONFIG_JFFS2_LZO=y
-+CONFIG_JFFS2_RUBIN=y
-+CONFIG_CRAMFS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+CONFIG_NFS_V3_ACL=y
-+CONFIG_NFS_V4=y
-+CONFIG_ROOT_NFS=y
-+CONFIG_PARTITION_ADVANCED=y
-+CONFIG_NLS_CODEPAGE_437=y
-+CONFIG_NLS_ISO8859_1=y
-+CONFIG_PRINTK_TIME=y
-+CONFIG_MAGIC_SYSRQ=y
-+CONFIG_DEBUG_KERNEL=y
-+CONFIG_SCHEDSTATS=y
-+CONFIG_TIMER_STATS=y
-+CONFIG_PROVE_LOCKING=y
-+CONFIG_LOCK_STAT=y
-+CONFIG_DEBUG_SPINLOCK_SLEEP=y
-+CONFIG_DEBUG_INFO=y
-+CONFIG_DEBUG_LL=y
-+CONFIG_SECURITY=y
-+# CONFIG_CRYPTO_ANSI_CPRNG is not set
-+CONFIG_CRC_CCITT=y
-+CONFIG_LIBCRC32C=y
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc-skip-detection-of-nonremovable-cards-on-rescan.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc-skip-detection-of-nonremovable-cards-on-rescan.patch
deleted file mode 100644
index a9b1773..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc-skip-detection-of-nonremovable-cards-on-rescan.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 3627429b1a0cbe9380a9834fb91419fcb81be2ef Mon Sep 17 00:00:00 2001
-From: Ohad Ben-Cohen <ohad at wizery.com>
-Date: Sun, 28 Nov 2010 07:21:28 +0200
-Subject: [PATCH 1/6] mmc: skip detection of nonremovable cards on rescan
-
-mmc_rescan() checks whether registered cards are still present before
-skipping them, by calling the bus-specific ->detect() handler.
-
-With buses that support runtime PM, the card may be powered off at
-this point, so they need to be powered on and fully reinitialized before
-->detect() executes.
-
-This whole process is redundant with nonremovable cards; in those cases,
-we can safely skip calling ->detect() and implicitly assume its success.
-
-Signed-off-by: Ohad Ben-Cohen <ohad at wizery.com>
-Reviewed-by: Chris Ball <cjb at laptop.org>
-Signed-off-by: Chris Ball <cjb at laptop.org>
----
- drivers/mmc/core/core.c |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
-index 57dcf8f..305e2a5 100644
---- a/drivers/mmc/core/core.c
-+++ b/drivers/mmc/core/core.c
-@@ -1446,8 +1446,12 @@ void mmc_rescan(struct work_struct *work)
-
-	mmc_bus_get(host);
-
--	/* if there is a card registered, check whether it is still present */
--	if ((host->bus_ops != NULL) && host->bus_ops->detect && !host->bus_dead)
-+	/*
-+	 * if there is a _removable_ card registered, check whether it is
-+	 * still present
-+	 */
-+	if (host->bus_ops && host->bus_ops->detect && !host->bus_dead
-+	    && mmc_card_is_removable(host))
-		host->bus_ops->detect(host);
-
-	mmc_bus_put(host);
---
-1.7.1
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc_card_keep_power-cleanups.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc_card_keep_power-cleanups.patch
deleted file mode 100644
index 070e019..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-mmc_card_keep_power-cleanups.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 92093bb141b85f6f7396a0efd79d9f93c264baa3 Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Wed, 3 Aug 2011 15:03:46 +0300
-Subject: [PATCH 3/6] mmc_card_keep_power cleanups
-
-mmc_card_is_powered_resumed is a mouthful; instead, simply use
-mmc_card_keep_power, which also better explains the purpose of
-the macro.
-
-Employ mmc_card_keep_power() where possible.
-
-Upstream status: accepted
-
-Based on Ohad Ben-Cohen <ohad at wizery.com> original patch.
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- drivers/mmc/core/sdio.c  |   14 +++++++-------
- include/linux/mmc/host.h |    2 +-
- 2 files changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
-index 4a198b2..e43ff56 100644
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -635,12 +635,12 @@ static int mmc_sdio_resume(struct mmc_host *host)
- 	/* Basic card reinitialization. */
- 	mmc_claim_host(host);
- 
--	/* No need to reinitialize powered-resumed nonremovable cards */
--	if (mmc_card_is_removable(host) || !mmc_card_is_powered_resumed(host))
--		err = mmc_sdio_init_card(host, host->ocr, host->card,
--				 (host->pm_flags & MMC_PM_KEEP_POWER));
--	else if (mmc_card_is_powered_resumed(host)) {
--		/* We may have switched to 1-bit mode during suspend */
-+ 	/* No need to reinitialize powered-resumed nonremovable cards */
-+	if (mmc_card_is_removable(host) || !mmc_card_keep_power(host))
-+ 		err = mmc_sdio_init_card(host, host->ocr, host->card,
-+					mmc_card_keep_power(host));
-+	else if (mmc_card_keep_power(host)) {
-+ 		/* We may have switched to 1-bit mode during suspend */
- 		err = sdio_enable_4bit_bus(host->card);
- 		if (err > 0) {
- 			mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
-@@ -682,7 +682,7 @@ static int mmc_sdio_power_restore(struct mmc_host *host)
- 
- 	mmc_claim_host(host);
- 	ret = mmc_sdio_init_card(host, host->ocr, host->card,
--			(host->pm_flags & MMC_PM_KEEP_POWER));
-+				mmc_card_keep_power(host));
- 	if (!ret && host->sdio_irqs)
- 		mmc_signal_sdio_irq(host);
- 	mmc_release_host(host);
-diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
-index 74694c4..db2548f 100644
---- a/include/linux/mmc/host.h
-+++ b/include/linux/mmc/host.h
-@@ -307,7 +307,7 @@ static inline int mmc_card_is_removable(struct mmc_host *host)
- 	return !(host->caps & MMC_CAP_NONREMOVABLE) && mmc_assume_removable;
- }
- 
--static inline int mmc_card_is_powered_resumed(struct mmc_host *host)
-+static inline int mmc_card_keep_power(struct mmc_host *host)
- {
- 	return host->pm_flags & MMC_PM_KEEP_POWER;
- }
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-omap3_evm_defconfig-add-WLAN-config-options.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-omap3_evm_defconfig-add-WLAN-config-options.patch
deleted file mode 100644
index 02fe3ad..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0003-omap3_evm_defconfig-add-WLAN-config-options.patch
+++ /dev/null
@@ -1,283 +0,0 @@
-From c49824d3d41982eb6d655f5cc4cc4c7e20d511c4 Mon Sep 17 00:00:00 2001
-From: Chase Maupin <Chase.Maupin at ti.com>
-Date: Mon, 27 Jun 2011 14:06:58 -0500
-Subject: [PATCH 3/3] omap3_evm_defconfig: add WLAN config options
-
-* Added the WLAN config options to be base default configuration.
-
-Upstream-Status: Inappropriate [SDK specific changes]
-
-Signed-off-by: Chase Maupin <Chase.Maupin at ti.com>
----
- arch/arm/configs/omap3_evm_defconfig |  167 +++++++++++++++++++++++++++++++--
- 1 files changed, 156 insertions(+), 11 deletions(-)
-
-diff --git a/arch/arm/configs/omap3_evm_defconfig b/arch/arm/configs/omap3_evm_defconfig
-index 6b9c736..5d44b2d 100644
---- a/arch/arm/configs/omap3_evm_defconfig
-+++ b/arch/arm/configs/omap3_evm_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux/arm 2.6.37 Kernel Configuration
--# Mon Jun 27 13:40:14 2011
-+# Tue Jun 28 07:29:21 2011
- #
- CONFIG_ARM=y
- CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-@@ -515,7 +515,123 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
- # CONFIG_NETLABEL is not set
- # CONFIG_NETWORK_SECMARK is not set
- # CONFIG_NETWORK_PHY_TIMESTAMPING is not set
--# CONFIG_NETFILTER is not set
-+CONFIG_NETFILTER=y
-+# CONFIG_NETFILTER_DEBUG is not set
-+CONFIG_NETFILTER_ADVANCED=y
-+
-+#
-+# Core Netfilter Configuration
-+#
-+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-+# CONFIG_NETFILTER_NETLINK_LOG is not set
-+CONFIG_NF_CONNTRACK=y
-+# CONFIG_NF_CONNTRACK_MARK is not set
-+# CONFIG_NF_CONNTRACK_EVENTS is not set
-+# CONFIG_NF_CT_PROTO_DCCP is not set
-+# CONFIG_NF_CT_PROTO_SCTP is not set
-+# CONFIG_NF_CT_PROTO_UDPLITE is not set
-+# CONFIG_NF_CONNTRACK_AMANDA is not set
-+# CONFIG_NF_CONNTRACK_FTP is not set
-+# CONFIG_NF_CONNTRACK_H323 is not set
-+# CONFIG_NF_CONNTRACK_IRC is not set
-+# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-+# CONFIG_NF_CONNTRACK_PPTP is not set
-+# CONFIG_NF_CONNTRACK_SANE is not set
-+# CONFIG_NF_CONNTRACK_SIP is not set
-+# CONFIG_NF_CONNTRACK_TFTP is not set
-+# CONFIG_NF_CT_NETLINK is not set
-+CONFIG_NETFILTER_XTABLES=y
-+
-+#
-+# Xtables combined modules
-+#
-+# CONFIG_NETFILTER_XT_MARK is not set
-+# CONFIG_NETFILTER_XT_CONNMARK is not set
-+
-+#
-+# Xtables targets
-+#
-+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-+# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
-+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-+# CONFIG_NETFILTER_XT_TARGET_TEE is not set
-+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-+
-+#
-+# Xtables matches
-+#
-+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-+# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-+# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-+# CONFIG_NETFILTER_XT_MATCH_CPU is not set
-+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-+# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-+# CONFIG_NETFILTER_XT_MATCH_HL is not set
-+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-+# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-+# CONFIG_IP_VS is not set
-+
-+#
-+# IP: Netfilter Configuration
-+#
-+CONFIG_NF_DEFRAG_IPV4=y
-+CONFIG_NF_CONNTRACK_IPV4=y
-+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-+# CONFIG_IP_NF_QUEUE is not set
-+CONFIG_IP_NF_IPTABLES=y
-+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-+# CONFIG_IP_NF_MATCH_AH is not set
-+# CONFIG_IP_NF_MATCH_ECN is not set
-+# CONFIG_IP_NF_MATCH_TTL is not set
-+CONFIG_IP_NF_FILTER=y
-+# CONFIG_IP_NF_TARGET_REJECT is not set
-+CONFIG_IP_NF_TARGET_LOG=y
-+# CONFIG_IP_NF_TARGET_ULOG is not set
-+CONFIG_NF_NAT=y
-+CONFIG_NF_NAT_NEEDED=y
-+CONFIG_IP_NF_TARGET_MASQUERADE=y
-+# CONFIG_IP_NF_TARGET_NETMAP is not set
-+# CONFIG_IP_NF_TARGET_REDIRECT is not set
-+# CONFIG_NF_NAT_SNMP_BASIC is not set
-+# CONFIG_NF_NAT_FTP is not set
-+# CONFIG_NF_NAT_IRC is not set
-+# CONFIG_NF_NAT_TFTP is not set
-+# CONFIG_NF_NAT_AMANDA is not set
-+# CONFIG_NF_NAT_PPTP is not set
-+# CONFIG_NF_NAT_H323 is not set
-+# CONFIG_NF_NAT_SIP is not set
-+# CONFIG_IP_NF_MANGLE is not set
-+# CONFIG_IP_NF_RAW is not set
-+# CONFIG_IP_NF_SECURITY is not set
-+# CONFIG_IP_NF_ARPTABLES is not set
- # CONFIG_IP_DCCP is not set
- # CONFIG_IP_SCTP is not set
- # CONFIG_RDS is not set
-@@ -548,7 +664,31 @@ CONFIG_DNS_RESOLVER=y
- # CONFIG_HAMRADIO is not set
- # CONFIG_CAN is not set
- # CONFIG_IRDA is not set
--# CONFIG_BT is not set
-+CONFIG_BT=y
-+CONFIG_BT_L2CAP=y
-+CONFIG_BT_SCO=y
-+CONFIG_BT_RFCOMM=y
-+CONFIG_BT_RFCOMM_TTY=y
-+CONFIG_BT_BNEP=y
-+CONFIG_BT_BNEP_MC_FILTER=y
-+CONFIG_BT_BNEP_PROTO_FILTER=y
-+CONFIG_BT_HIDP=y
-+
-+#
-+# Bluetooth device drivers
-+#
-+# CONFIG_BT_HCIBTUSB is not set
-+# CONFIG_BT_HCIBTSDIO is not set
-+CONFIG_BT_HCIUART=y
-+CONFIG_BT_HCIUART_H4=y
-+# CONFIG_BT_HCIUART_BCSP is not set
-+# CONFIG_BT_HCIUART_ATH3K is not set
-+CONFIG_BT_HCIUART_LL=y
-+# CONFIG_BT_HCIBCM203X is not set
-+# CONFIG_BT_HCIBPA10X is not set
-+# CONFIG_BT_HCIBFUSB is not set
-+# CONFIG_BT_HCIVHCI is not set
-+# CONFIG_BT_MRVL is not set
- # CONFIG_AF_RXRPC is not set
- CONFIG_WIRELESS=y
- CONFIG_WIRELESS_EXT=y
-@@ -566,7 +706,8 @@ CONFIG_WIRELESS_EXT_SYSFS=y
- # Some wireless drivers require a rate control algorithm
- #
- # CONFIG_WIMAX is not set
--# CONFIG_RFKILL is not set
-+CONFIG_RFKILL=y
-+# CONFIG_RFKILL_INPUT is not set
- # CONFIG_NET_9P is not set
- # CONFIG_CAIF is not set
- # CONFIG_CEPH_LIB is not set
-@@ -851,6 +992,7 @@ CONFIG_USB_EPSON2888=y
- CONFIG_USB_KC2190=y
- CONFIG_USB_NET_ZAURUS=y
- # CONFIG_USB_NET_CX82310_ETH is not set
-+# CONFIG_USB_HSO is not set
- # CONFIG_USB_NET_INT51X1 is not set
- # CONFIG_USB_IPHETH is not set
- # CONFIG_USB_SIERRA_NET is not set
-@@ -1278,7 +1420,7 @@ CONFIG_TWL4030_CODEC=y
- CONFIG_REGULATOR=y
- # CONFIG_REGULATOR_DEBUG is not set
- CONFIG_REGULATOR_DUMMY=y
--# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-+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
-@@ -1643,6 +1785,7 @@ CONFIG_USB_HID=y
- # CONFIG_HID_CYPRESS is not set
- # CONFIG_HID_DRAGONRISE is not set
- # CONFIG_HID_EGALAX is not set
-+# CONFIG_HID_ELECOM is not set
- # CONFIG_HID_EZKEY is not set
- # CONFIG_HID_KYE is not set
- # CONFIG_HID_UCLOGIC is not set
-@@ -1651,6 +1794,7 @@ CONFIG_USB_HID=y
- # CONFIG_HID_TWINHAN is not set
- # CONFIG_HID_KENSINGTON is not set
- # CONFIG_HID_LOGITECH is not set
-+# CONFIG_HID_MAGICMOUSE is not set
- # CONFIG_HID_MICROSOFT is not set
- # CONFIG_HID_MOSART is not set
- # CONFIG_HID_MONTEREY is not set
-@@ -1671,6 +1815,7 @@ CONFIG_USB_HID=y
- # CONFIG_HID_SMARTJOYPLUS is not set
- # CONFIG_HID_TOPSEED is not set
- # 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
-@@ -2286,7 +2431,7 @@ CONFIG_CRYPTO_WORKQUEUE=y
- CONFIG_CRYPTO_CBC=y
- # CONFIG_CRYPTO_CTR is not set
- # CONFIG_CRYPTO_CTS is not set
--# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_ECB=y
- # CONFIG_CRYPTO_LRW is not set
- # CONFIG_CRYPTO_PCBC is not set
- # CONFIG_CRYPTO_XTS is not set
-@@ -2305,7 +2450,7 @@ CONFIG_CRYPTO_CRC32C=y
- # CONFIG_CRYPTO_GHASH is not set
- # CONFIG_CRYPTO_MD4 is not set
- CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+CONFIG_CRYPTO_MICHAEL_MIC=y
- # CONFIG_CRYPTO_RMD128 is not set
- # CONFIG_CRYPTO_RMD160 is not set
- # CONFIG_CRYPTO_RMD256 is not set
-@@ -2319,9 +2464,9 @@ CONFIG_CRYPTO_MD5=y
- #
- # Ciphers
- #
--# CONFIG_CRYPTO_AES is not set
-+CONFIG_CRYPTO_AES=y
- # CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_ARC4 is not set
-+CONFIG_CRYPTO_ARC4=y
- # CONFIG_CRYPTO_BLOWFISH is not set
- # CONFIG_CRYPTO_CAMELLIA is not set
- # CONFIG_CRYPTO_CAST5 is not set
-@@ -2367,11 +2512,11 @@ CONFIG_BINARY_PRINTF=y
- CONFIG_BITREVERSE=y
- CONFIG_GENERIC_FIND_LAST_BIT=y
- CONFIG_CRC_CCITT=y
--# CONFIG_CRC16 is not set
-+CONFIG_CRC16=y
- # CONFIG_CRC_T10DIF is not set
- # CONFIG_CRC_ITU_T is not set
- CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
-+CONFIG_CRC7=y
- CONFIG_LIBCRC32C=y
- CONFIG_ZLIB_INFLATE=y
- CONFIG_ZLIB_DEFLATE=y
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-do-not-switch-to-1-bit-mode-if-not-required.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-do-not-switch-to-1-bit-mode-if-not-required.patch
deleted file mode 100644
index c1e356f..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-do-not-switch-to-1-bit-mode-if-not-required.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From fbd81cb717ed6a875abd1f09e32e8f803a066a91 Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Wed, 3 Aug 2011 15:10:30 +0300
-Subject: [PATCH 4/6] mmc: do not switch to 1-bit mode if not required
-
-6b5eda36 followed SDIO spec part E1 section 8, which states that
-in case SDIO interrupts are being used to wake up a suspended host,
-then it is required to switch to 1-bit mode before stopping the clock.
-
-Before switching to 1-bit mode (or back to 4-bit mode on resume),
-make sure that SDIO interrupts are really being used to wake the host.
-
-This is helpful for devices which have an external irq line (e.g.
-wl1271), and do not use SDIO interrupts to wake up the host.
-
-In this case, switching to 1-bit mode (and back to 4-bit mode on resume)
-is not necessary.
-
-Upstream status: accepted
-
-Based on patch made by Ohad Ben-Cohen <ohad at wizery.com>
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- drivers/mmc/core/sdio.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
-index e43ff56..2eeeaa2 100644
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -639,7 +639,7 @@ static int mmc_sdio_resume(struct mmc_host *host)
- 	if (mmc_card_is_removable(host) || !mmc_card_keep_power(host))
-  		err = mmc_sdio_init_card(host, host->ocr, host->card,
- 					mmc_card_keep_power(host));
--	else if (mmc_card_keep_power(host)) {
-+	else if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
-  		/* We may have switched to 1-bit mode during suspend */
- 		err = sdio_enable_4bit_bus(host->card);
- 		if (err > 0) {
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-sdio-don-t-reinitialize-nonremovable-powered-res.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-sdio-don-t-reinitialize-nonremovable-powered-res.patch
deleted file mode 100644
index f173bf5..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0004-mmc-sdio-don-t-reinitialize-nonremovable-powered-res.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From 756d4919d44948a7a7d2860db75077c753a75039 Mon Sep 17 00:00:00 2001
-From: Ohad Ben-Cohen <ohad at wizery.com>
-Date: Sun, 28 Nov 2010 07:21:29 +0200
-Subject: [PATCH 2/6] mmc: sdio: don't reinitialize nonremovable powered-resumed cards
-
-Upon system resume, SDIO core must reinitialize cards that were
-powered off during suspend.
-
-If the card had its power kept during suspend (and thus it is
-'powered-resumed'), SDIO core performs only a limited reinitializing,
-mainly needed to make sure that the card wasn't removed/replaced.
-
-If a __nonremovable__ card is powered-resumed, we can safely skip the
-reinitializing phase.
-
-Note: 9b966aa (mmc: sdio: fully reconfigure oldcard on resume) removed
-the bus width reconfiguration since mmc_sdio_init_card already does it.
-It is brought back now in case mmc_sdio_init_card is skipped.
-
-Signed-off-by: Ohad Ben-Cohen <ohad at wizery.com>
-Signed-off-by: Chris Ball <cjb at laptop.org>
----
- drivers/mmc/core/sdio.c  |   16 ++++++++++++++--
- include/linux/mmc/host.h |    5 +++++
- 2 files changed, 19 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
-index efef5f9..b424fbe 100644
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -627,15 +627,27 @@ static int mmc_sdio_suspend(struct mmc_host *host)
-
- static int mmc_sdio_resume(struct mmc_host *host)
- {
--	int i, err;
-+	int i, err = 0;
-
-	BUG_ON(!host);
-	BUG_ON(!host->card);
-
-	/* Basic card reinitialization. */
-	mmc_claim_host(host);
--	err = mmc_sdio_init_card(host, host->ocr, host->card,
-+
-+	/* No need to reinitialize powered-resumed nonremovable cards */
-+	if (mmc_card_is_removable(host) || !mmc_card_is_powered_resumed(host))
-+		err = mmc_sdio_init_card(host, host->ocr, host->card,
-				 (host->pm_flags & MMC_PM_KEEP_POWER));
-+	else if (mmc_card_is_powered_resumed(host)) {
-+		/* We may have switched to 1-bit mode during suspend */
-+		err = sdio_enable_4bit_bus(host->card);
-+		if (err > 0) {
-+			mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
-+			err = 0;
-+		}
-+	}
-+
-	if (!err && host->sdio_irqs)
-		mmc_signal_sdio_irq(host);
-	mmc_release_host(host);
-diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
-index 30f6fad..86d74a5 100644
---- a/include/linux/mmc/host.h
-+++ b/include/linux/mmc/host.h
-@@ -307,5 +307,10 @@ static inline int mmc_card_is_removable(struct mmc_host *host)
-	return !(host->caps & MMC_CAP_NONREMOVABLE) && mmc_assume_removable;
- }
-
-+static inline int mmc_card_is_powered_resumed(struct mmc_host *host)
-+{
-+	return host->pm_flags & MMC_PM_KEEP_POWER;
-+}
-+
- #endif
-
---
-1.7.1
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-fix-division-by-zero-in-MMC-core.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-fix-division-by-zero-in-MMC-core.patch
deleted file mode 100644
index 66fed25..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-fix-division-by-zero-in-MMC-core.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 6dc280ffc189b8d534e7e9ff758b12f31a8d3234 Mon Sep 17 00:00:00 2001
-From: Linus Walleij <linus.walleij at stericsson.com>
-Date: Wed, 5 Jan 2011 00:44:32 +0100
-Subject: [PATCH 5/6] mmc: fix division by zero in MMC core
-
-The card is not always clocked and the clock frequency zero is perfectly
-legal, thus this code in mmc_set_data_timeout() may cause a division by
-zero. It will be triggered more often if you're using software clock
-gating but can be triggered under other conditions too.
-
-Upstream status: accepted
-
-Reported-by: Pierre Tardy <tardyp at gmail.com>
-Signed-off-by: Linus Walleij <linus.walleij at stericsson.com>
-Reviewed-by: Chris Ball <cjb at laptop.org>
-Cc: <stable at kernel.org>
-Signed-off-by: Chris Ball <cjb at laptop.org>
-Signed-off-by: Eliad Peller <eliad at wizery.com>
----
- drivers/mmc/core/core.c |    5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
-index 55bc015..6448c6b 100644
---- a/drivers/mmc/core/core.c
-+++ b/drivers/mmc/core/core.c
-@@ -296,8 +296,9 @@ void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card)
- 		unsigned int timeout_us, limit_us;
- 
- 		timeout_us = data->timeout_ns / 1000;
--		timeout_us += data->timeout_clks * 1000 /
--			(card->host->ios.clock / 1000);
-+		if (card->host->ios.clock)
-+			timeout_us += data->timeout_clks * 1000 /
-+				(card->host->ios.clock / 1000);
- 
- 		if (data->flags & MMC_DATA_WRITE)
- 			/*
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-sdio-don-t-power-up-cards-on-system-suspend.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-sdio-don-t-power-up-cards-on-system-suspend.patch
deleted file mode 100644
index c135cbf..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0005-mmc-sdio-don-t-power-up-cards-on-system-suspend.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 3d72f4e09138025931b1e0cb2ef921478f7d6d11 Mon Sep 17 00:00:00 2001
-From: Ohad Ben-Cohen <ohad at wizery.com>
-Date: Sun, 28 Nov 2010 07:21:30 +0200
-Subject: [PATCH 3/6] mmc: sdio: don't power up cards on system suspend
-
-Initial SDIO runtime PM implementation took a conservative approach
-of powering up cards (and fully reinitializing them) on system suspend,
-just before the suspend handlers of the relevant drivers were executed.
-
-To avoid redundant power and reinitialization cycles, this patch removes
-this behavior: if a card is already powered off when system suspend kicks
-in, it is left at that state.
-
-If a card is active when a system sleep starts, everything is
-straightforward and works exactly like before. But if the card was
-already suspended before the sleep began, then when the MMC core powers
-it back up on resume, its run-time PM status has to be updated to reflect
-the actual post-system sleep status.
-
-The technique to do that is borrowed from the I2C runtime PM
-implementation (for more info see Documentation/power/runtime_pm.txt).
-
-Signed-off-by: Ohad Ben-Cohen <ohad at wizery.com>
-Reviewed-by: Chris Ball <cjb at laptop.org>
-Signed-off-by: Chris Ball <cjb at laptop.org>
----
- drivers/mmc/core/core.c     |   13 +++++++++++++
- drivers/mmc/core/sdio_bus.c |   32 --------------------------------
- 2 files changed, 13 insertions(+), 32 deletions(-)
-
-diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
-index 305e2a5..2762ad2 100644
---- a/drivers/mmc/core/core.c
-+++ b/drivers/mmc/core/core.c
-@@ -22,6 +22,7 @@
- #include <linux/scatterlist.h>
- #include <linux/log2.h>
- #include <linux/regulator/consumer.h>
-+#include <linux/pm_runtime.h>
-
- #include <linux/mmc/card.h>
- #include <linux/mmc/host.h>
-@@ -1725,6 +1726,18 @@ int mmc_resume_host(struct mmc_host *host)
-		if (!(host->pm_flags & MMC_PM_KEEP_POWER)) {
-			mmc_power_up(host);
-			mmc_select_voltage(host, host->ocr);
-+			/*
-+			 * Tell runtime PM core we just powered up the card,
-+			 * since it still believes the card is powered off.
-+			 * Note that currently runtime PM is only enabled
-+			 * for SDIO cards that are MMC_CAP_POWER_OFF_CARD
-+			 */
-+			if (mmc_card_sdio(host->card) &&
-+			    (host->caps & MMC_CAP_POWER_OFF_CARD)) {
-+				pm_runtime_disable(&host->card->dev);
-+				pm_runtime_set_active(&host->card->dev);
-+				pm_runtime_enable(&host->card->dev);
-+			}
-		}
-		BUG_ON(!host->bus_ops->resume);
-		err = host->bus_ops->resume(host);
-diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
-index 203da44..d29b9c3 100644
---- a/drivers/mmc/core/sdio_bus.c
-+++ b/drivers/mmc/core/sdio_bus.c
-@@ -197,44 +197,12 @@ out:
-
- #ifdef CONFIG_PM_RUNTIME
-
--static int sdio_bus_pm_prepare(struct device *dev)
--{
--	struct sdio_func *func = dev_to_sdio_func(dev);
--
--	/*
--	 * Resume an SDIO device which was suspended at run time at this
--	 * point, in order to allow standard SDIO suspend/resume paths
--	 * to keep working as usual.
--	 *
--	 * Ultimately, the SDIO driver itself will decide (in its
--	 * suspend handler, or lack thereof) whether the card should be
--	 * removed or kept, and if kept, at what power state.
--	 *
--	 * At this point, PM core have increased our use count, so it's
--	 * safe to directly resume the device. After system is resumed
--	 * again, PM core will drop back its runtime PM use count, and if
--	 * needed device will be suspended again.
--	 *
--	 * The end result is guaranteed to be a power state that is
--	 * coherent with the device's runtime PM use count.
--	 *
--	 * The return value of pm_runtime_resume is deliberately unchecked
--	 * since there is little point in failing system suspend if a
--	 * device can't be resumed.
--	 */
--	if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD)
--		pm_runtime_resume(dev);
--
--	return 0;
--}
--
- static const struct dev_pm_ops sdio_bus_pm_ops = {
-	SET_RUNTIME_PM_OPS(
-		pm_generic_runtime_suspend,
-		pm_generic_runtime_resume,
-		pm_generic_runtime_idle
-	)
--	.prepare = sdio_bus_pm_prepare,
- };
-
- #define SDIO_PM_OPS_PTR	(&sdio_bus_pm_ops)
---
-1.7.1
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-revert-duplicate-insertion-of-mmc_card_keep_power-fu.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-revert-duplicate-insertion-of-mmc_card_keep_power-fu.patch
deleted file mode 100644
index fc24053..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-revert-duplicate-insertion-of-mmc_card_keep_power-fu.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From ddcdd25ae15a5b6ec1d179ce018c09e0880f36a8 Mon Sep 17 00:00:00 2001
-From: Ido Reis <idor at ti.com>
-Date: Thu, 7 Jul 2011 00:21:55 +0300
-Subject: [PATCH 6/6] revert duplicate insertion of mmc_card_keep_power function in include/linux/mmc/host.h
-
-Upstream status: accepted
-
----
- include/linux/mmc/host.h |    5 -----
- 1 files changed, 0 insertions(+), 5 deletions(-)
-
-diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
-index db2548f..c797318 100644
---- a/include/linux/mmc/host.h
-+++ b/include/linux/mmc/host.h
-@@ -312,11 +312,6 @@ static inline int mmc_card_keep_power(struct mmc_host *host)
- 	return host->pm_flags & MMC_PM_KEEP_POWER;
- }
- 
--static inline int mmc_card_keep_power(struct mmc_host *host)
--{
--	return host->pm_flags & MMC_PM_KEEP_POWER;
--}
--
- static inline int mmc_card_wake_sdio_irq(struct mmc_host *host)
- {
- 	return host->pm_flags & MMC_PM_WAKE_SDIO_IRQ;
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-wl12xx-Backport-wl12xx-platform-data.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-wl12xx-Backport-wl12xx-platform-data.patch
deleted file mode 100644
index b977793..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0006-wl12xx-Backport-wl12xx-platform-data.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From c3c1429faed56c53d96bf5c98dcaa7140a616ea5 Mon Sep 17 00:00:00 2001
-From: Ido Yariv <ido at wizery.com>
-Date: Wed, 6 Apr 2011 00:36:41 +0300
-Subject: [PATCH 5/6] wl12xx: Backport wl12xx platform data
-
-In order to build a more recent wl12xx driver externally (using
-compat-wireless), the builtin platform data structure needs to match the
-one used in the driver.
-
-Fix this by backporting wl12xx.h from Luciano's tree.
-
-Signed-off-by: Ido Yariv <ido at wizery.com>
----
- include/linux/wl12xx.h |   27 +++++++++++++++++++++++++++
- 1 files changed, 27 insertions(+), 0 deletions(-)
-
-diff --git a/include/linux/wl12xx.h b/include/linux/wl12xx.h
-index 4f902e1..4b69739 100644
---- a/include/linux/wl12xx.h
-+++ b/include/linux/wl12xx.h
-@@ -24,14 +24,41 @@
- #ifndef _LINUX_WL12XX_H
- #define _LINUX_WL12XX_H
-
-+/* Reference clock values */
-+enum {
-+	WL12XX_REFCLOCK_19	= 0, /* 19.2 MHz */
-+	WL12XX_REFCLOCK_26	= 1, /* 26 MHz */
-+	WL12XX_REFCLOCK_38	= 2, /* 38.4 MHz */
-+	WL12XX_REFCLOCK_52	= 3, /* 52 MHz */
-+	WL12XX_REFCLOCK_38_XTAL = 4, /* 38.4 MHz, XTAL */
-+	WL12XX_REFCLOCK_26_XTAL = 5, /* 26 MHz, XTAL */
-+};
-+
-+/* TCXO clock values */
-+enum {
-+	WL12XX_TCXOCLOCK_19_2	= 0, /* 19.2MHz */
-+	WL12XX_TCXOCLOCK_26	= 1, /* 26 MHz */
-+	WL12XX_TCXOCLOCK_38_4	= 2, /* 38.4MHz */
-+	WL12XX_TCXOCLOCK_52	= 3, /* 52 MHz */
-+	WL12XX_TCXOCLOCK_16_368	= 4, /* 16.368 MHz */
-+	WL12XX_TCXOCLOCK_32_736	= 5, /* 32.736 MHz */
-+	WL12XX_TCXOCLOCK_16_8	= 6, /* 16.8 MHz */
-+	WL12XX_TCXOCLOCK_33_6	= 7, /* 33.6 MHz */
-+};
-+
- struct wl12xx_platform_data {
-	void (*set_power)(bool enable);
-	/* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */
-	int irq;
-	bool use_eeprom;
-	int board_ref_clock;
-+	int board_tcxo_clock;
-+	unsigned long platform_quirks;
- };
-
-+/* Platform does not support level trigger interrupts */
-+#define WL12XX_PLATFORM_QUIRK_EDGE_IRQ	BIT(0)
-+
- #ifdef CONFIG_WL12XX_PLATFORM_DATA
-
- int wl12xx_set_platform_data(const struct wl12xx_platform_data *data);
---
-1.7.1
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0007-activate-wireless-extensions.patch b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0007-activate-wireless-extensions.patch
deleted file mode 100644
index df13209..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/0007-activate-wireless-extensions.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 6133415cf067d656c40997e00eace06d07aeab34 Mon Sep 17 00:00:00 2001
-From: Eyal Reizer <eyalr at ti.com>
-Date: Mon, 16 May 2011 17:47:46 +0300
-Subject: [PATCH] PSP04.02.00.07.sdk: activate wireless extensions interface used by iwconfig
-
-Signed-off-by: Eyal Reizer <eyalr at ti.com>
----
- arch/arm/mach-omap2/Kconfig |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
-index dfa5464..8152b72 100644
---- a/arch/arm/mach-omap2/Kconfig
-+++ b/arch/arm/mach-omap2/Kconfig
-@@ -34,6 +34,7 @@ config ARCH_OMAP3
- 	select ARM_L1_CACHE_SHIFT_6 if !ARCH_OMAP4
- 	select ARCH_HAS_OPP
- 	select PM_OPP if PM
-	select WL12XX_PLATFORM_DATA
-+	select WIRELESS_EXT
- 
- config ARCH_OMAP4
- 	bool "TI OMAP4"
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/defconfig b/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/defconfig
deleted file mode 100644
index 97640a2..0000000
--- a/recipes-kernel/linux/linux-omap-psp-2.6.37/omap3/defconfig
+++ /dev/null
@@ -1,2505 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Tue Jun 28 07:29:21 2011
-#
-CONFIG_ARM=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_INIT_ENV_ARG_LIMIT=32
-CONFIG_CROSS_COMPILE=""
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-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=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_HAVE_GENERIC_HARDIRQS is not set
-# CONFIG_SPARSE_IRQ is not set
-
-#
-# RCU Subsystem
-#
-CONFIG_TINY_RCU=y
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-# CONFIG_CGROUPS is not set
-# CONFIG_NAMESPACES is not set
-# 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 is not set
-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=y
-CONFIG_KALLSYMS_EXTRA_PASS=y
-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=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_PROFILING=y
-CONFIG_TRACEPOINTS=y
-CONFIG_OPROFILE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_KPROBES=y
-CONFIG_KRETPROBES=y
-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 is not set
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SRCVERSION_ALL=y
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
-# 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=y
-CONFIG_OMAP_MUX_DEBUG=y
-CONFIG_OMAP_MUX_WARNINGS=y
-CONFIG_OMAP_MCBSP=y
-# CONFIG_OMAP_MBOX_FWK is not set
-CONFIG_OMAP_IOMMU=y
-# CONFIG_OMAP_IOMMU_DEBUG is not set
-# 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_TI81XX is not set
-CONFIG_ARCH_OMAP3430=y
-CONFIG_OMAP_PACKAGE_CBB=y
-
-#
-# OMAP Board Type
-#
-# CONFIG_MACH_OMAP3_BEAGLE is not set
-# 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 is not set
-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 is not set
-# 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 is not set
-# 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_PM_DISABLE_VT_SWITCH=y
-# 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=y
-CONFIG_ARM_ERRATA_460075=y
-# 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=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_HZ=128
-# CONFIG_THUMB2_KERNEL is not set
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-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=999999
-# 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 is not set
-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="root=/dev/mmcblk0p2 rootwait console=ttyO2,115200"
-# 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 is not set
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
-# CONFIG_CPU_IDLE is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-CONFIG_VFPv3=y
-CONFIG_NEON=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-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_PM_TEST_SUSPEND is not set
-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=y
-# CONFIG_XFRM_SUB_POLICY is not set
-CONFIG_XFRM_MIGRATE=y
-# CONFIG_XFRM_STATISTICS is not set
-CONFIG_NET_KEY=y
-CONFIG_NET_KEY_MIGRATE=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# 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 is not set
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETLABEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-CONFIG_NF_CONNTRACK=y
-# CONFIG_NF_CONNTRACK_MARK is not set
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CT_PROTO_DCCP is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_NETLINK is not set
-CONFIG_NETFILTER_XTABLES=y
-
-#
-# Xtables combined modules
-#
-# CONFIG_NETFILTER_XT_MARK is not set
-# CONFIG_NETFILTER_XT_CONNMARK is not set
-
-#
-# Xtables targets
-#
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TEE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-
-#
-# Xtables matches
-#
-# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_CPU is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_HL is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV4=y
-CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-CONFIG_IP_NF_FILTER=y
-# CONFIG_IP_NF_TARGET_REJECT is not set
-CONFIG_IP_NF_TARGET_LOG=y
-# CONFIG_IP_NF_TARGET_ULOG is not set
-CONFIG_NF_NAT=y
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_SECURITY is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_L2TP is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# 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 is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-CONFIG_DNS_RESOLVER=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_TCPPROBE is not set
-# CONFIG_NET_DROP_MONITOR is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-CONFIG_WIRELESS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT_SYSFS=y
-# CONFIG_LIB80211 is not set
-
-#
-# CFG80211 needs to be enabled for MAC80211
-#
-
-#
-# Some wireless drivers require a rate control algorithm
-#
-# CONFIG_WIMAX is not set
-CONFIG_RFKILL=y
-# CONFIG_RFKILL_INPUT is not set
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-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=y
-# 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 is not set
-CONFIG_MTD_OOPS=y
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# 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_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR 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_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
-CONFIG_MTD_ONENAND=y
-CONFIG_MTD_ONENAND_VERIFY_WRITE=y
-# CONFIG_MTD_ONENAND_GENERIC is not set
-CONFIG_MTD_ONENAND_OMAP2=y
-# CONFIG_MTD_ONENAND_OTP is not set
-# CONFIG_MTD_ONENAND_2X_PROGRAM is not set
-# CONFIG_MTD_ONENAND_SIM is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_UBI 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 is not set
-
-#
-# 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=32768
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD 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 is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-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 is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_SCAN_ASYNC=y
-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 is not set
-# 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 is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# 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 is not set
-# CONFIG_BLK_DEV_DM is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-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=y
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_BCM63XX_PHY is not set
-# 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 is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_ETHOC is not set
-# CONFIG_SMC911X is not set
-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 is not set
-# CONFIG_KS8851_MLL is not set
-CONFIG_NETDEV_1000=y
-# CONFIG_TI_DAVINCI_EMAC is not set
-# CONFIG_TI_DAVINCI_MDIO is not set
-# CONFIG_STMMAC_ETH is not set
-CONFIG_NETDEV_10000=y
-CONFIG_WLAN=y
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_WL12XX_PLATFORM_DATA=y
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-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 is not set
-# CONFIG_USB_NET_SMSC75XX is not set
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=y
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-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 is not set
-# CONFIG_USB_HSO is not set
-# CONFIG_USB_NET_INT51X1 is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_USB_SIERRA_NET is not set
-# CONFIG_WAN is not set
-
-#
-# CAIF transport drivers
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-# 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=y
-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=y
-# CONFIG_KEYBOARD_QT2160 is not set
-# 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_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# 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=y
-# 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=y
-CONFIG_TOUCHSCREEN_ADS7846=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_TSC2004 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-# CONFIG_TOUCHSCREEN_TPS6507X is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_AD714X is not set
-# 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 is not set
-CONFIG_INPUT_UINPUT=y
-# CONFIG_INPUT_PCF8574 is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT_ADXL34X is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# 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_TI81XX_HDMI 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 is not set
-CONFIG_I2C_HELPER_AUTO=y
-
-#
-# 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 is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-CONFIG_DEBUG_GPIO=y
-CONFIG_GPIO_SYSFS=y
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# 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=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_PDA_POWER is not set
-# CONFIG_TEST_POWER is not set
-# 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 is not set
-# CONFIG_CHARGER_TWL4030 is not set
-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 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ASC7621 is not set
-# 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 is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_JC42 is not set
-# 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 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_EMC1403 is not set
-# CONFIG_SENSORS_EMC2103 is not set
-# 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 is not set
-# CONFIG_SENSORS_AMC6821 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP102 is not set
-# 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 is not set
-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 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 is not set
-CONFIG_TWL4030_CORE=y
-CONFIG_TWL4030_POWER=y
-CONFIG_TWL4030_CODEC=y
-# CONFIG_TWL6030_PWM is not set
-# 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 is not set
-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_MEDIA_SUPPORT=y
-
-#
-# Multimedia core support
-#
-CONFIG_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L2_COMMON=y
-CONFIG_VIDEO_ALLOW_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2_SUBDEV_API=y
-# CONFIG_DVB_CORE is not set
-CONFIG_VIDEO_MEDIA=y
-
-#
-# Multimedia drivers
-#
-# CONFIG_IR_CORE is not set
-# CONFIG_MEDIA_ATTACH is not set
-CONFIG_MEDIA_TUNER=y
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=y
-CONFIG_MEDIA_TUNER_TDA8290=y
-CONFIG_MEDIA_TUNER_TDA827X=y
-CONFIG_MEDIA_TUNER_TDA18271=y
-CONFIG_MEDIA_TUNER_TDA9887=y
-CONFIG_MEDIA_TUNER_TEA5761=y
-CONFIG_MEDIA_TUNER_TEA5767=y
-CONFIG_MEDIA_TUNER_MT20XX=y
-CONFIG_MEDIA_TUNER_XC2028=y
-CONFIG_MEDIA_TUNER_XC5000=y
-CONFIG_MEDIA_TUNER_MC44S803=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEOBUF_GEN=y
-CONFIG_VIDEOBUF_DMA_CONTIG=y
-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
-
-#
-# 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 is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_WM8775 is not set
-# 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_MT9T001 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_MT9V032 is not set
-# CONFIG_VIDEO_MT9V113 is not set
-CONFIG_VIDEO_MT9T111=y
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA717X is not set
-# CONFIG_VIDEO_SAA7191 is not set
-CONFIG_VIDEO_TVP514X=y
-# 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 is not set
-
-#
-# MPEG video encoders
-#
-# CONFIG_VIDEO_CX2341X is not set
-
-#
-# 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_VPSS_SYSTEM is not set
-# CONFIG_VIDEO_VPFE_CAPTURE is not set
-CONFIG_VIDEO_OMAP2_VOUT=y
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SR030PC30 is not set
-CONFIG_VIDEO_OMAP3=y
-# CONFIG_VIDEO_OMAP3_DEBUG is not set
-# CONFIG_SOC_CAMERA is not set
-CONFIG_V4L_USB_DRIVERS=y
-CONFIG_USB_VIDEO_CLASS=y
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-CONFIG_USB_GSPCA=m
-# CONFIG_USB_M5602 is not set
-# CONFIG_USB_STV06XX is not set
-# CONFIG_USB_GL860 is not set
-# CONFIG_USB_GSPCA_BENQ is not set
-# CONFIG_USB_GSPCA_CONEX is not set
-# CONFIG_USB_GSPCA_CPIA1 is not set
-# CONFIG_USB_GSPCA_ETOMS is not set
-# CONFIG_USB_GSPCA_FINEPIX is not set
-# CONFIG_USB_GSPCA_JEILINJ is not set
-# CONFIG_USB_GSPCA_KONICA is not set
-# CONFIG_USB_GSPCA_MARS is not set
-# CONFIG_USB_GSPCA_MR97310A is not set
-# CONFIG_USB_GSPCA_OV519 is not set
-# CONFIG_USB_GSPCA_OV534 is not set
-# CONFIG_USB_GSPCA_OV534_9 is not set
-# CONFIG_USB_GSPCA_PAC207 is not set
-# CONFIG_USB_GSPCA_PAC7302 is not set
-# CONFIG_USB_GSPCA_PAC7311 is not set
-# CONFIG_USB_GSPCA_SN9C2028 is not set
-# CONFIG_USB_GSPCA_SN9C20X is not set
-# CONFIG_USB_GSPCA_SONIXB is not set
-# CONFIG_USB_GSPCA_SONIXJ is not set
-# CONFIG_USB_GSPCA_SPCA500 is not set
-# CONFIG_USB_GSPCA_SPCA501 is not set
-# CONFIG_USB_GSPCA_SPCA505 is not set
-# CONFIG_USB_GSPCA_SPCA506 is not set
-# CONFIG_USB_GSPCA_SPCA508 is not set
-# CONFIG_USB_GSPCA_SPCA561 is not set
-# CONFIG_USB_GSPCA_SPCA1528 is not set
-# CONFIG_USB_GSPCA_SQ905 is not set
-# CONFIG_USB_GSPCA_SQ905C is not set
-# CONFIG_USB_GSPCA_SQ930X is not set
-# CONFIG_USB_GSPCA_STK014 is not set
-# CONFIG_USB_GSPCA_STV0680 is not set
-# CONFIG_USB_GSPCA_SUNPLUS is not set
-# CONFIG_USB_GSPCA_T613 is not set
-# CONFIG_USB_GSPCA_TV8532 is not set
-# CONFIG_USB_GSPCA_VC032X is not set
-# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
-# CONFIG_USB_GSPCA_ZC3XX is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_HDPVR is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USB_STKWEBCAM is not set
-# CONFIG_USB_S2255 is not set
-# CONFIG_V4L_MEM2MEM_DRIVERS is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# 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 is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# 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=y
-
-#
-# 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=4
-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_VENC_OUT_TYPE_SVIDEO=y
-# CONFIG_OMAP2_VENC_OUT_TYPE_COMPOSITE is not set
-# 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=1
-CONFIG_FB_OMAP2=y
-CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
-CONFIG_FB_OMAP2_NUM_FBS=1
-
-#
-# 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 is not set
-# CONFIG_PANEL_TPO_TD043MTEA1 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-# CONFIG_LCD_L4F00242T03 is not set
-# CONFIG_LCD_LMS283GF05 is not set
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-CONFIG_LCD_PLATFORM=y
-# CONFIG_LCD_S6E63M0 is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_GENERIC=m
-# CONFIG_BACKLIGHT_ADP8860 is not set
-
-#
-# Display device support
-#
-CONFIG_DISPLAY_SUPPORT=y
-
-#
-# Display hardware drivers
-#
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-# CONFIG_SOUND_OSS_CORE is not set
-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 is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-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 is not set
-# 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 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=y
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-CONFIG_SND_USB_AUDIO=y
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_OMAP_SOC=y
-CONFIG_SND_OMAP_SOC_MCBSP=y
-CONFIG_SND_OMAP_SOC_OMAP3EVM=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 is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_ELECOM is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MAGICMOUSE is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_TOPSEED is not set
-# 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 is not set
-# 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_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_HWA_HCD is not set
-CONFIG_USB_MUSB_HDRC=y
-
-#
-# Platform Glue Layer
-#
-# CONFIG_USB_MUSB_TUSB6010_GLUE is not set
-CONFIG_USB_MUSB_OMAP2PLUS_GLUE=y
-# CONFIG_USB_MUSB_AM35X_GLUE is not set
-# CONFIG_USB_MUSB_DAVINCI is not set
-# CONFIG_USB_MUSB_DA8XX is not set
-# CONFIG_USB_MUSB_TUSB6010 is not set
-CONFIG_USB_MUSB_OMAP2PLUS=y
-# CONFIG_USB_MUSB_AM35X is not set
-# CONFIG_USB_MUSB_TI81XX is not set
-# CONFIG_USB_MUSB_BLACKFIN is not set
-# CONFIG_USB_MUSB_UX500 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_HW=y
-# CONFIG_USB_TI_CPPI_DMA_HW is not set
-# CONFIG_USB_TI_CPPI41_DMA_HW is not set
-CONFIG_USB_INVENTRA_DMA=y
-CONFIG_MUSB_USE_SYSTEM_DMA_WORKAROUND=y
-# CONFIG_USB_TI_CPPI_DMA is not set
-# CONFIG_USB_TI_CPPI41_DMA is not set
-# CONFIG_USB_TUSB_OMAP_DMA is not set
-CONFIG_USB_MUSB_DEBUG=y
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_TMC is not set
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-CONFIG_USB_TEST=y
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_YUREX is not set
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_DEBUG_FS is not set
-CONFIG_USB_GADGET_VBUS_DRAW=2
-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=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_ETH_EEM is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FUNCTIONFS 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 is not set
-# CONFIG_USB_G_DBGP is not set
-# CONFIG_USB_G_WEBCAM is not set
-
-#
-# OTG and related infrastructure
-#
-CONFIG_USB_OTG_UTILS=y
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_ISP1301_OMAP is not set
-# CONFIG_USB_ULPI is not set
-# CONFIG_TWL4030_USB is not set
-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=y
-CONFIG_MMC_OMAP_HS=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# 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 is not set
-# 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 is not set
-CONFIG_RTC_DRV_TWL4030=y
-# 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 is not set
-# CONFIG_STAGING 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=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_FILE_LOCKING=y
-CONFIG_FSNOTIFY=y
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_FANOTIFY is not set
-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 is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_ECRYPT_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-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=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-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 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_CEPH_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS 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 is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# 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 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_DLM 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 is not set
-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_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-CONFIG_DEBUG_SPINLOCK=y
-CONFIG_DEBUG_MUTEXES=y
-CONFIG_BKL=y
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=y
-# CONFIG_PROVE_RCU is not set
-# CONFIG_SPARSE_RCU_POINTER is not set
-CONFIG_LOCKDEP=y
-CONFIG_LOCK_STAT=y
-# CONFIG_DEBUG_LOCKDEP is not set
-CONFIG_TRACE_IRQFLAGS=y
-CONFIG_DEBUG_SPINLOCK_SLEEP=y
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_INFO_REDUCED 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_KPROBES_SANITY_TEST 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_NOP_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_RING_BUFFER=y
-CONFIG_EVENT_TRACING=y
-CONFIG_CONTEXT_SWITCH_TRACER=y
-CONFIG_RING_BUFFER_ALLOW_SWAP=y
-CONFIG_TRACING=y
-CONFIG_TRACING_SUPPORT=y
-CONFIG_FTRACE=y
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_IRQSOFF_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_KPROBE_EVENT=y
-# CONFIG_RING_BUFFER_BENCHMARK is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST 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=y
-# CONFIG_EARLY_PRINTK is not set
-# CONFIG_DEBUG_ICEDCC 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=y
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_NETWORK is not set
-# CONFIG_SECURITY_PATH is not set
-# CONFIG_SECURITY_TOMOYO is not set
-# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_IMA is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-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 is not set
-# CONFIG_CRYPTO_NULL is not set
-CONFIG_CRYPTO_WORKQUEUE=y
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=y
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_ARC4=y
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYPTO_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-# CONFIG_CRYPTO_DEV_OMAP_SHAM is not set
-# CONFIG_CRYPTO_DEV_OMAP_AES is not set
-
-#
-# OCF Configuration
-#
-CONFIG_OCF_OCF=y
-CONFIG_OCF_RANDOMHARVEST=y
-CONFIG_OCF_FIPS=y
-CONFIG_OCF_CRYPTODEV=m
-# CONFIG_OCF_CRYPTOSOFT is not set
-# CONFIG_OCF_BENCH is not set
-CONFIG_BINARY_PRINTF=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC16=y
-# CONFIG_CRC_T10DIF is not set
-# CONFIG_CRC_ITU_T is not set
-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_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_NLATTR=y
diff --git a/recipes-kernel/linux/linux-omap-psp_2.6.37.bb b/recipes-kernel/linux/linux-omap-psp_2.6.37.bb
deleted file mode 100644
index 8f6a450..0000000
--- a/recipes-kernel/linux/linux-omap-psp_2.6.37.bb
+++ /dev/null
@@ -1,103 +0,0 @@
-require linux.inc
-require setup-defconfig.inc
-
-DESCRIPTION = "Linux kernel for OMAP3 EVM from PSP, based on linux-omap3 kernel"
-
-COMPATIBLE_MACHINE = "omap3"
-
-# SRCREV corresponds to tag v2.6.37_OMAPPSP_04.02.00.07
-SRCREV= "adcd067326836777c049e3cb32a5b7d9d401fc31"
-
-BRANCH = "OMAPPSP_04.02.00.07"
-
-# The main PR is now using MACHINE_KERNEL_PR, for omap3 devices
-# see conf/machine/include/omap3.inc
-MACHINE_KERNEL_PR_append = "b"
-PR = "${MACHINE_KERNEL_PR}"
-
-SRC_URI = "git://arago-project.org/git/projects/linux-omap3.git;protocol=git;branch=${BRANCH} \
-           file://defconfig"
-
-# The following patches below have been upstreamed to linux kernel 2.6.39 tree
-# and will not be needed once we move to this kernel.
-# The only exception is "0002-allow-selecting-WL12XX_PLATFROM_DATA-independently.patch"
-# which is needed for building against a compat-wireless package
-SRC_URI += " \
-    file://0001-linux-omap3-Add-OCF-support-to-2.6.37-kernel.patch \
-    file://0001-omap3evm-add-support-for-the-WL12xx-WLAN-module.patch \
-    file://0002-allow-selecting-WL12XX_PLATFROM_DATA-independently.patch \
-    file://0003-mmc-skip-detection-of-nonremovable-cards-on-rescan.patch \
-    file://0004-mmc-sdio-don-t-reinitialize-nonremovable-powered-res.patch \
-    file://0005-mmc-sdio-don-t-power-up-cards-on-system-suspend.patch \
-    file://0006-wl12xx-Backport-wl12xx-platform-data.patch \
-    file://0007-activate-wireless-extensions.patch \
-"
-
-# Update the kernel to support suspend/resume when the file system is located
-# on the SD card.  This is also being submitted to the PSP team for inclusion
-# in future releases.
-SRC_URI += " \
-    file://0001-Fix-matrix-suspend.patch \
-"
-
-# Update the OCF kernel patch to remove non-existing components for
-# non-TI hardware.  This allows the make clean target to work.
-# Update the defconfig for omap3 to enable OCF and WLAN by default
-SRC_URI += " \
-    file://0001-OCF-support-remove-support-for-non-TI-hardware.patch \
-    file://0002-omap3_evm_defconfig-add-OCF-driver-support.patch \
-    file://0003-omap3_evm_defconfig-add-WLAN-config-options.patch \
-"
-
-# Enable clock pad register in mt9t111 sensor driver. This fixes the issue where
-# sensor sync pulses were not generated during first loopback after boot-up.
-SRC_URI += " \
-    file://0001-mt9t111-enable-clock-pad-register-in-configuration.patch \
-"
-
-# The following patches add support for wake on wlan (WoWlan)
-# which is supported in nlcp R4 release
-SRC_URI += "file://0001-omap3evm-add-wake-on-wlan-support.patch \
-    file://0001-nlcp-sdio-fixes-for-wowlan-support.patch \
-    file://0002-mmc-sdio-support-suspend-resume-while-runtime-suspen.patch \
-    file://0003-mmc_card_keep_power-cleanups.patch \
-    file://0004-mmc-do-not-switch-to-1-bit-mode-if-not-required.patch \
-    file://0005-mmc-fix-division-by-zero-in-MMC-core.patch \
-    file://0006-revert-duplicate-insertion-of-mmc_card_keep_power-fu.patch \
-"
-
-# The following patches allow for NOR to be enabled and built
-# easily.
-SRC_URI += " \
-    file://0001-omap3-am3517evm-Allow-for-NAND-to-really-be-disabled.patch \
-    file://0002-omap3-am3517evm-Update-NOR-partition-table.patch \
-    file://0003-AM3517-Add-am3517_evn_nor_defconfig.patch \
-"
-
-# The following patch sets the dto timeout for SD cards to the max of 14.
-# This has been found to make SD cards work more reliably in the omap3 systems
-SRC_URI += " \
-    file://0001-omap_hsmmc-make-default-dto-value-14.patch \
-"
-
-# Add ABB support to the Linux kernel to enable 1GHz OPP and to allow
-# booting at 1GHz
-SRC_URI += " \
-    file://0001-am37x-Adding-ABB-Support-for-1GHz-OPP.patch \
-"
-
-# Fix USB role switching when leaving USB cable connected
-SRC_URI += " \
-    file://0001-usb-musb-am35x-set-default-VBUS-timeout-value.patch \
-    file://0002-usb-musb-am35x-fix-role-switching-issue.patch \
-"
-
-# Fix alignment issue with gcc-4.7
-SRC_URI += " \
-    file://0001-arm-fix-builds-with-gcc-4.7.patch \
-"
-
-# Updated PIO mode for MUSB help description
-SRC_URI_append_am3517-evm = " file://0001-musb-update-PIO-mode-help-information-in-Kconfig.patch"
-
-S = "${WORKDIR}/git"
diff --git a/recipes-kernel/linux/linux-omap/0001-BeagleBoard-Adjust-USER-button-pin-for-xM.patch b/recipes-kernel/linux/linux-omap/0001-BeagleBoard-Adjust-USER-button-pin-for-xM.patch
deleted file mode 100644
index 44397d4..0000000
--- a/recipes-kernel/linux/linux-omap/0001-BeagleBoard-Adjust-USER-button-pin-for-xM.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 3b1dc08ab568d1fdbc2a3731d7643cfeb48023e8 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Thu, 10 Mar 2011 14:16:08 +0100
-Subject: [PATCH] BeagleBoard: Adjust USER button pin for xM
-
-Signed-off-by: Koen Kooi <koen at dominion.thruhere.net>
----
- 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 731f4b5..fae3104 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -949,6 +949,11 @@ static void __init omap3_beagle_init(void)
- 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
- 	omap3_beagle_init_rev();
- 	omap3_beagle_i2c_init();
-+
-+	if (cpu_is_omap3630()) {
-+		gpio_buttons[0].gpio = 4;
-+	}
-+
- 	platform_add_devices(omap3_beagle_devices,
- 			ARRAY_SIZE(omap3_beagle_devices));
- 	omap_serial_init();
--- 
-1.7.0
-
diff --git a/recipes-kernel/linux/linux-omap/0001-beagleboard-hack-in-support-from-xM-rev-C.patch b/recipes-kernel/linux/linux-omap/0001-beagleboard-hack-in-support-from-xM-rev-C.patch
deleted file mode 100644
index 77c2928..0000000
--- a/recipes-kernel/linux/linux-omap/0001-beagleboard-hack-in-support-from-xM-rev-C.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From d9c289c5f98bb109aa7a9e5a802638ba89639e70 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Thu, 10 Mar 2011 13:15:38 +0100
-Subject: [PATCH] beagleboard: hack in support from xM rev C
-
-Signed-off-by: Koen Kooi <koen at dominion.thruhere.net>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   20 +++++++++++++-------
- 1 files changed, 13 insertions(+), 7 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 6abb79a..731f4b5 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -64,6 +64,7 @@
-  *	C4	= GPIO173, GPIO172, GPIO171: 1 0 1
-  *	XMA	= GPIO173, GPIO172, GPIO171: 0 0 0
-  *	XMB	= GPIO173, GPIO172, GPIO171: 0 0 1
-+ *  XMC = GPIO173, GPIO172, GPIO171: 0 1 0
-  */
- enum {
- 	OMAP3BEAGLE_BOARD_UNKN = 0,
-@@ -71,6 +72,7 @@ enum {
- 	OMAP3BEAGLE_BOARD_C1_3,
- 	OMAP3BEAGLE_BOARD_C4,
- 	OMAP3BEAGLE_BOARD_XM,
-+	OMAP3BEAGLE_BOARD_XMC,
- };
- 
- static u8 omap3_beagle_version;
-@@ -129,9 +131,13 @@ static void __init omap3_beagle_init_rev(void)
- 		printk(KERN_INFO "OMAP3 Beagle Rev: xM B\n");
- 		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
- 		break;
-+	case 2:
-+		printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
-+		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
-+		break;
- 	default:
--		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
--		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
-+		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd, assuming xM C or newer\n", beagle_rev);
-+		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
- 	}
- 
- 	return;
-@@ -484,7 +490,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
- {
- 	int r;
- 
--	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) {
- 		mmc[0].gpio_wp = -EINVAL;
- 	} else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
- 		(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
-@@ -517,7 +523,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
- 	/* REVISIT: need ehci-omap hooks for external VBUS
- 	 * power switch and overcurrent detect
- 	 */
--	if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM && omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XMC) {
- 		r = gpio_request(gpio + 1, "EHCI_nOC");
- 		if (!r) {
- 			r = gpio_direction_input(gpio + 1);
-@@ -539,7 +545,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
- 		gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
- 
- 	/* DVI reset GPIO is different between beagle revisions */
--	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)
- 		beagle_dvi_device.reset_gpio = 129;
- 	else
- 		beagle_dvi_device.reset_gpio = 170;
-@@ -553,7 +559,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
- 	 * P7/P8 revisions(prototype): Camera EN
- 	 * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
- 	 */
--	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) {
- 		r = gpio_request(gpio + 1, "nDVI_PWR_EN");
- 		if (!r) {
- 			r = gpio_direction_output(gpio + 1, 0);
-@@ -899,7 +905,7 @@ static void __init beagle_opp_init(void)
- 	}
- 
- 	/* Custom OPP enabled for XM */
--	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) {
- 		struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
- 		struct omap_hwmod *dh = omap_hwmod_lookup("iva");
- 		struct device *dev;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/0001-board-omap3beagle-whitespace-cleanup.patch b/recipes-kernel/linux/linux-omap/0001-board-omap3beagle-whitespace-cleanup.patch
deleted file mode 100644
index 6910557..0000000
--- a/recipes-kernel/linux/linux-omap/0001-board-omap3beagle-whitespace-cleanup.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From e5e52482147151aaaafbd388d1e5978268e51d24 Mon Sep 17 00:00:00 2001
-Message-Id: <e5e52482147151aaaafbd388d1e5978268e51d24.1307392642.git.dvhart at linux.intel.com>
-From: Darren Hart <dvhart at linux.intel.com>
-Date: Mon, 6 Jun 2011 10:17:56 -0700
-Subject: [PATCH 1/2] board-omap3beagle: whitespace cleanup
-
-Eliminate leading and trailing whitespace.
-Indent with tabs.
-
-Signed-off-by: Darren Hart <dvhart at linux.intel.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   28 ++++++++++++++--------------
- 1 files changed, 14 insertions(+), 14 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index b035bb5..b618cb6 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -167,12 +167,12 @@ struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
- 	.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,
-- 	},
-+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,
-@@ -181,8 +181,8 @@ struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
- 		.gpio_cd	= -EINVAL,
- 		.nonremovable	= true,
- 	},
-- 	{}	/* Terminator */
-- };
-+	{}	/* Terminator */
-+};
- 
- static struct regulator_consumer_supply beagle_vmmc2_supply = {
- 	.supply         = "vmmc",
-@@ -455,7 +455,7 @@ 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, "bbtoys-wifi")) { 
-+	if(!strcmp(expansionboard_name, "bbtoys-wifi")) {
- 		omap2_hsmmc_init(mmcbbt);
- 		/* link regulators to MMC adapters */
- 		beagle_vmmc1_supply.dev = mmcbbt[0].dev;
-@@ -648,9 +648,9 @@ static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = {
- };
- 
- static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
--       {
--               I2C_BOARD_INFO("eeprom", 0x50),
--       },
-+	{
-+		I2C_BOARD_INFO("eeprom", 0x50),
-+	},
- };
- 
- #if defined(CONFIG_RTC_DRV_DS1307) || \
-@@ -888,7 +888,7 @@ 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")) 
-+	if(!strcmp(expansionboard_name, "zippy"))
- 	{
- 		printk(KERN_INFO "Beagle expansionboard: initializing enc28j60\n");
- 		omap3beagle_enc28j60_init();
-@@ -897,7 +897,7 @@ static void __init omap3_beagle_init(void)
- 		mmc[1].gpio_cd = 162;
- 	}
- 	
--	if(!strcmp(expansionboard_name, "zippy2")) 
-+	if(!strcmp(expansionboard_name, "zippy2"))
- 	{
- 		printk(KERN_INFO "Beagle expansionboard: initializing ks_8851\n");
- 		omap3beagle_ks8851_init();
--- 
-1.7.1
-
diff --git a/recipes-kernel/linux/linux-omap/0001-omap3-allow-1GHz-mpurates.patch b/recipes-kernel/linux/linux-omap/0001-omap3-allow-1GHz-mpurates.patch
deleted file mode 100644
index f84163c..0000000
--- a/recipes-kernel/linux/linux-omap/0001-omap3-allow-1GHz-mpurates.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 095749d8941257799eaf5b2509918373f1a08152 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Thu, 10 Mar 2011 14:03:08 +0100
-Subject: [PATCH] omap3: allow 1GHz mpurates
-
-Signed-off-by: Koen Kooi <koen at dominion.thruhere.net>
----
- arch/arm/plat-omap/clock.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/plat-omap/clock.c b/arch/arm/plat-omap/clock.c
-index fc62fb5..f3e3d29 100644
---- a/arch/arm/plat-omap/clock.c
-+++ b/arch/arm/plat-omap/clock.c
-@@ -181,7 +181,7 @@ static int __init omap_clk_setup(char *str)
- 	if (!mpurate)
- 		return 1;
- 
--	if (mpurate < 1000)
-+	if (mpurate < 2000)
- 		mpurate *= 1000000;
- 
- 	return 1;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/0001-xM-audio-fix-from-Ashok.patch b/recipes-kernel/linux/linux-omap/0001-xM-audio-fix-from-Ashok.patch
deleted file mode 100644
index 1254c80..0000000
--- a/recipes-kernel/linux/linux-omap/0001-xM-audio-fix-from-Ashok.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From d53f988fc10fe22ec7e64457eac22f264bb72491 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson at gmail.com>
-Date: Thu, 13 Jan 2011 11:37:56 -0600
-Subject: [PATCH] xM audio fix from Ashok
-
-Signed-off-by: Robert Nelson <robertcnelson at gmail.com>
----
- sound/soc/omap/omap-mcbsp.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
-index 7e84f24..1038686 100644
---- a/sound/soc/omap/omap-mcbsp.c
-+++ b/sound/soc/omap/omap-mcbsp.c
-@@ -332,6 +332,9 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
- 	} else if (cpu_is_omap343x()) {
- 		dma = omap24xx_dma_reqs[bus_id][substream->stream];
- 		port = omap34xx_mcbsp_port[bus_id][substream->stream];
-+	} else if (cpu_is_omap3630()) {
-+		dma = omap24xx_dma_reqs[bus_id][substream->stream];
-+		port = omap34xx_mcbsp_port[bus_id][substream->stream];
- 	} else {
- 		return -ENODEV;
- 	}
--- 
-1.7.1
-
diff --git a/recipes-kernel/linux/linux-omap/0002-board-omap3beagle-allow-for-building-without-wl1271.patch b/recipes-kernel/linux/linux-omap/0002-board-omap3beagle-allow-for-building-without-wl1271.patch
deleted file mode 100644
index 51978e2..0000000
--- a/recipes-kernel/linux/linux-omap/0002-board-omap3beagle-allow-for-building-without-wl1271.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 1b9bc1583d882866d64420df39bf5df4bce22bd6 Mon Sep 17 00:00:00 2001
-Message-Id: <1b9bc1583d882866d64420df39bf5df4bce22bd6.1307392642.git.dvhart at linux.intel.com>
-In-Reply-To: <e5e52482147151aaaafbd388d1e5978268e51d24.1307392642.git.dvhart at linux.intel.com>
-References: <e5e52482147151aaaafbd388d1e5978268e51d24.1307392642.git.dvhart at linux.intel.com>
-From: Darren Hart <dvhart at linux.intel.com>
-Date: Mon, 6 Jun 2011 10:19:00 -0700
-Subject: [PATCH 2/2] board-omap3beagle: allow for building without wl1271
-
-While the header file wl12xx.h is ifdef'd to include if the wl1271 driver is
-built, the init routine calls into it regardless. Ideally, the module would
-perform its own initialization at load time and we wouldn't need to ifdef these
-calls in the general board initialization. For now, follow the existing practice
-in this file and ifdef the wl1271 init block.
-
-Signed-off-by: Darren Hart <dvhart at linux.intel.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index b618cb6..caaed82 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -937,6 +937,7 @@ static void __init omap3_beagle_init(void)
- 		gpio_export(162, 1);
- 	}
- 
-+#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE)
- 	if(!strcmp(expansionboard_name, "bbtoys-wifi"))
- 	{
- 		if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
-@@ -944,6 +945,7 @@ static void __init omap3_beagle_init(void)
- 		printk(KERN_INFO "Beagle expansionboard: registering wl12xx platform device\n");
- 		platform_device_register(&omap_vwlan_device);
- 	}
-+#endif
- 
- 	usb_musb_init(&musb_board_data);
- 	usb_ehci_init(&ehci_pdata);
--- 
-1.7.1
-
diff --git a/recipes-kernel/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch b/recipes-kernel/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch
deleted file mode 100644
index 42bfa4e..0000000
--- a/recipes-kernel/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 3d2f0e2f29320d9c6a6e4d8d5aeff9127a2106cb Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at beagleboard.org>
-Date: Tue, 11 Jan 2011 17:13:35 +0000
-Subject: [PATCH 01/28] omap3: beaglexm: fix EHCI power up GPIO dir
-
-EHCI enable power pin is inverted (active high) in comparison
-to vanilla beagle which is active low. Handle this case conditionally.
-
-Without this fix, Beagle XM 4 port EHCI will not function and no
-networking will be available
-
-[nm at ti.com: split up, added descriptive changelogs]
-Signed-off-by: Nishanth Menon <nm at ti.com>
-Signed-off-by: Koen Kooi <koen at beagleboard.org>
-Signed-off-by: Tony Lindgren <tony at atomide.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 6c12760..af1166b 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -297,9 +297,15 @@ 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);
- 
- 	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
- 	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch b/recipes-kernel/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch
deleted file mode 100644
index 1808a86..0000000
--- a/recipes-kernel/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From e1dd1afba99853083da545f632a1f7c6899ae379 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at beagleboard.org>
-Date: Tue, 11 Jan 2011 17:13:36 +0000
-Subject: [PATCH 02/28] omap3: beaglexm: fix DVI reset GPIO
-
-GPIO reset line for Beagle XM is different from vanilla beagle
-so we populate it as part of gpio update routine.
-
-This in part fixes the issue of display not functioning on beagle XM
-platform.
-
-[nm at ti.com: split up, added descriptive changelogs]
-Signed-off-by: Nishanth Menon <nm at ti.com>
-Signed-off-by: Koen Kooi <koen at beagleboard.org>
-Signed-off-by: Tony Lindgren <tony at atomide.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |    8 +++++++-
- 1 files changed, 7 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index af1166b..673deb9 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -199,7 +199,7 @@ static struct omap_dss_device beagle_dvi_device = {
- 	.name = "dvi",
- 	.driver_name = "generic_panel",
- 	.phy.dpi.data_lines = 24,
--	.reset_gpio = 170,
-+	.reset_gpio = -EINVAL,
- 	.platform_enable = beagle_enable_dvi,
- 	.platform_disable = beagle_disable_dvi,
- };
-@@ -307,6 +307,12 @@ static int beagle_twl_gpio_setup(struct device *dev,
- 	else
- 		gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
- 
-+	/* DVI reset GPIO is different between beagle revisions */
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
-+		beagle_dvi_device.reset_gpio = 129;
-+	else
-+		beagle_dvi_device.reset_gpio = 170;
-+
- 	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
- 	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch b/recipes-kernel/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch
deleted file mode 100644
index 90446e4..0000000
--- a/recipes-kernel/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 4004c3e68b973f4cb736048b1e90ee3b511f5865 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at beagleboard.org>
-Date: Wed, 12 Jan 2011 00:23:29 +0000
-Subject: [PATCH 03/28] omap3: beaglexm: fix power on of DVI
-
-TFP410 DVI chip is used to provide display out.
-This chip is controlled by 2 lines:
-LDO which supplies the power is controlled over gpio + 2
-and the enable of the chip itself is done over gpio + 1
-NOTE: the LDO is necessary for LED, serial blocks as well.
-
-gpio + 1 was used to sense USB overcurrent in vanilla beagle.
-
-Without this fix, the display would not function as the LDO
-remains shut down.
-
-[nm at ti.com: split up, added descriptive changelogs]
-Signed-off-by: Nishanth Menon <nm at ti.com>
-Signed-off-by: Koen Kooi <koen at beagleboard.org>
-Signed-off-by: Tony Lindgren <tony at atomide.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   42 ++++++++++++++++++++++++++++--
- 1 files changed, 39 insertions(+), 3 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 673deb9..2ed8040 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -273,6 +273,8 @@ static struct gpio_led gpio_leds[];
- static int beagle_twl_gpio_setup(struct device *dev,
- 		unsigned gpio, unsigned ngpio)
- {
-+	int r;
-+
- 	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
- 		mmc[0].gpio_wp = -EINVAL;
- 	} else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
-@@ -293,9 +295,16 @@ static int beagle_twl_gpio_setup(struct device *dev,
- 	/* REVISIT: need ehci-omap hooks for external VBUS
- 	 * power switch and overcurrent detect
- 	 */
--
--	gpio_request(gpio + 1, "EHCI_nOC");
--	gpio_direction_input(gpio + 1);
-+	if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
-+		r = gpio_request(gpio + 1, "EHCI_nOC");
-+		if (!r) {
-+			r = gpio_direction_input(gpio + 1);
-+			if (r)
-+				gpio_free(gpio + 1);
-+		}
-+		if (r)
-+			pr_err("%s: unable to configure EHCI_nOC\n", __func__);
-+	}
- 
- 	/*
- 	 * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
-@@ -316,6 +325,33 @@ static int beagle_twl_gpio_setup(struct device *dev,
- 	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
- 	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
- 
-+	/*
-+	 * gpio + 1 on Xm controls the TFP410's enable line (active low)
-+	 * gpio + 2 control varies depending on the board rev as follows:
-+	 * P7/P8 revisions(prototype): Camera EN
-+	 * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
-+	 */
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+		r = gpio_request(gpio + 1, "nDVI_PWR_EN");
-+		if (!r) {
-+			r = gpio_direction_output(gpio + 1, 0);
-+			if (r)
-+				gpio_free(gpio + 1);
-+		}
-+		if (r)
-+			pr_err("%s: unable to configure nDVI_PWR_EN\n",
-+				__func__);
-+		r = gpio_request(gpio + 2, "DVI_LDO_EN");
-+		if (!r) {
-+			r = gpio_direction_output(gpio + 2, 1);
-+			if (r)
-+				gpio_free(gpio + 2);
-+		}
-+		if (r)
-+			pr_err("%s: unable to configure DVI_LDO_EN\n",
-+				__func__);
-+	}
-+
- 	return 0;
- }
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch b/recipes-kernel/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch
deleted file mode 100644
index 4337161..0000000
--- a/recipes-kernel/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 24b7a742b27ed2c05c6bc7800b0299a77af37a82 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson at gmail.com>
-Date: Tue, 9 Nov 2010 08:34:55 -0600
-Subject: [PATCH 04/28] 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 at gmail.com>
-Signed-off-by: Koen Kooi <koen at 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 2ed8040..f9fb64b 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-kernel/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch b/recipes-kernel/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
deleted file mode 100644
index 21d8d8f..0000000
--- a/recipes-kernel/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-From a564ca287c115928a9e7febf7c99bbab582290e6 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Wed, 6 Oct 2010 10:19:34 +0200
-Subject: [PATCH 05/28] 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 at 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 f9fb64b..d777b3b 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 */
- };
- 
-@@ -457,7 +550,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,
-@@ -472,10 +565,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));
-@@ -609,6 +716,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);
-@@ -623,6 +739,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();
-@@ -634,6 +768,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-kernel/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch b/recipes-kernel/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
deleted file mode 100644
index 3c8547a..0000000
--- a/recipes-kernel/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 0c2c9a4d7fd299444b66e08aa34acc868261003f Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Sun, 5 Dec 2010 13:25:00 +0100
-Subject: [PATCH 06/28] 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 at 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 d777b3b..64a181e 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -757,6 +757,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-kernel/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch b/recipes-kernel/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch
deleted file mode 100644
index 575ee6f..0000000
--- a/recipes-kernel/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From ed12d865de851c5aed3ae7685337551b831bb045 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Mon, 8 Mar 2010 14:38:31 +0100
-Subject: [PATCH 07/28] modedb.c: add proper 720p60 mode
-
-Signed-off-by: Koen Kooi <koen at 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-kernel/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch b/recipes-kernel/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch
deleted file mode 100644
index 7e77641..0000000
--- a/recipes-kernel/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 13235700be3729d183143bdb75ee58742372d6aa Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Mon, 4 Jan 2010 19:20:25 -0800
-Subject: [PATCH 08/28] 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-kernel/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch b/recipes-kernel/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch
deleted file mode 100644
index e665e23..0000000
--- a/recipes-kernel/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 8b0c56b910811acd23c15bed273b3dbd959ef96a Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Mon, 26 Apr 2010 11:17:26 -0700
-Subject: [PATCH 09/28] 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-kernel/linux/linux-omap/base/0010-Miracle-patch.patch b/recipes-kernel/linux/linux-omap/base/0010-Miracle-patch.patch
deleted file mode 100644
index c5eba83..0000000
--- a/recipes-kernel/linux/linux-omap/base/0010-Miracle-patch.patch
+++ /dev/null
@@ -1,504 +0,0 @@
-From ce4f1f734efd638af01f1849ffffdc2746ad4a55 Mon Sep 17 00:00:00 2001
-From: Mike Galbraith <efault at gmx.de>
-Date: Fri, 19 Nov 2010 12:52:42 +0100
-Subject: [PATCH 10/28] 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 at 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 at 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 01ece1b..1031923 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-kernel/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch b/recipes-kernel/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch
deleted file mode 100644
index b89302b..0000000
--- a/recipes-kernel/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 8b34449d7eb89e1ae1c1c84f90ef5ea1e397787e Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at dominion.thruhere.net>
-Date: Tue, 23 Nov 2010 11:40:20 +0100
-Subject: [PATCH 11/28] 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 at 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-kernel/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch b/recipes-kernel/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
deleted file mode 100644
index 7413b5f..0000000
--- a/recipes-kernel/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From cd8a01e55dc674bba0030b99bff4f58d587aaecd Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Mon, 10 May 2010 20:44:09 -0700
-Subject: [PATCH 12/28] OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
-
-Signed-off-by: Koen Kooi <koen at 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-kernel/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch b/recipes-kernel/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
deleted file mode 100644
index af12b2c..0000000
--- a/recipes-kernel/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From f7d71be36165002251727019b1a03a19938bfa64 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen at beagleboard.org>
-Date: Mon, 20 Dec 2010 11:57:56 +0100
-Subject: [PATCH 13/28] omap3: beagleboard: add WIP support for beagleboardtoys WL12xx board
-
-Based on a patch by Luciano Coelho <luciano.coelho at nokia.com>
-
-Signed-off-by: Koen Kooi <koen at beagleboard.org>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   84 ++++++++++++++++++++++++++++++-
- 1 files changed, 83 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 64a181e..59b26da 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 | MMC_CAP_POWER_OFF_CARD,
-+		.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>
-@@ -384,11 +445,24 @@ 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, "bbtoys-wifi")) { 
-+		omap2_hsmmc_init(mmcbbt);
-+		/* link regulators to MMC adapters */
-+		beagle_vmmc1_supply.dev = mmcbbt[0].dev;
-+		beagle_vsim_supply.dev = mmcbbt[0].dev;
-+	} else {
-+		omap2_hsmmc_init(mmc);
-+		/* link regulators to MMC adapters */
-+		beagle_vmmc1_supply.dev = mmc[0].dev;
-+		beagle_vsim_supply.dev = mmc[0].dev;
-+	}
-+#else
- 	omap2_hsmmc_init(mmc);
--
- 	/* link regulators to MMC adapters */
- 	beagle_vmmc1_supply.dev = mmc[0].dev;
- 	beagle_vsim_supply.dev = mmc[0].dev;
-+#endif
- 
- 	/* REVISIT: need ehci-omap hooks for external VBUS
- 	 * power switch and overcurrent detect
-@@ -788,6 +862,14 @@ static void __init omap3_beagle_init(void)
- 		gpio_export(162, 1);
- 	}
- 
-+	if(!strcmp(expansionboard_name, "bbtoys-wifi"))
-+	{
-+		if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
-+			pr_err("error setting wl12xx data\n");
-+		printk(KERN_INFO "Beagle expansionboard: registering wl12xx platform device\n");
-+		platform_device_register(&omap_vwlan_device);
-+	}
-+
- 	usb_musb_init(&musb_board_data);
- 	usb_ehci_init(&ehci_pdata);
- 	omap3beagle_flash_init();
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch b/recipes-kernel/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
deleted file mode 100644
index 2eac323..0000000
--- a/recipes-kernel/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From a47bbc5c9742e4ce250ee3bfba62732f3fea40b7 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <sakoman at gmail.com>
-Date: Tue, 15 Dec 2009 15:17:44 -0800
-Subject: [PATCH 14/28] drivers: net: smsc911x: return ENODEV if device is not found
-
-Signed-off-by: Steve Sakoman <sakoman at 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-kernel/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch b/recipes-kernel/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
deleted file mode 100644
index 74691ab..0000000
--- a/recipes-kernel/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 713eb96dd137e1436198aa07094049ae0e0f9f1f Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <sakoman at gmail.com>
-Date: Tue, 15 Dec 2009 15:24:10 -0800
-Subject: [PATCH 15/28] drivers: input: touchscreen: ads7846: return ENODEV if device is not found
-
-Signed-off-by: Steve Sakoman <sakoman at 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-kernel/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch b/recipes-kernel/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch
deleted file mode 100644
index 081aa5b..0000000
--- a/recipes-kernel/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From de63bf4fdf6c64e543c207792cb2d8ebcd089342 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Thu, 17 Dec 2009 12:45:20 -0800
-Subject: [PATCH 16/28] 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-kernel/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch b/recipes-kernel/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch
deleted file mode 100644
index 2f3d1a4..0000000
--- a/recipes-kernel/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 18934b05f81025c1254d64c1774832e95187cbd9 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Sat, 23 Jan 2010 06:26:54 -0800
-Subject: [PATCH 17/28] 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-kernel/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch b/recipes-kernel/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch
deleted file mode 100644
index a55136d..0000000
--- a/recipes-kernel/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch
+++ /dev/null
@@ -1,740 +0,0 @@
-From 562dc52ebe3df1e5d23416e78306db7c568dc427 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Thu, 17 Dec 2009 14:19:34 -0800
-Subject: [PATCH 18/28] 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 at 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 at 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-kernel/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch b/recipes-kernel/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
deleted file mode 100644
index b24e4dd..0000000
--- a/recipes-kernel/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From a33c4e0fb917ca059e900c2851849ba604758ff9 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Thu, 17 Dec 2009 14:27:15 -0800
-Subject: [PATCH 19/28] 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-kernel/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch b/recipes-kernel/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
deleted file mode 100644
index 7028c17..0000000
--- a/recipes-kernel/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From fe51c97f26f8d6798909b1f22a5fb4ca84684f36 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Thu, 17 Dec 2009 14:32:36 -0800
-Subject: [PATCH 20/28] 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 f699701..9259780 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -604,6 +604,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,
-@@ -612,6 +616,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-kernel/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch b/recipes-kernel/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
deleted file mode 100644
index 823ab9f..0000000
--- a/recipes-kernel/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-From f8049ce6302904c1d08d8813f8a60b10b8a476e7 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Tue, 23 Feb 2010 14:40:27 -0800
-Subject: [PATCH 21/28] 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 at 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-kernel/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch b/recipes-kernel/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
deleted file mode 100644
index c302942..0000000
--- a/recipes-kernel/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
+++ /dev/null
@@ -1,299 +0,0 @@
-From 93032782a4803072d7ab1e22da029325f8f3cf44 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Thu, 17 Dec 2009 15:05:30 -0800
-Subject: [PATCH 22/28] 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 at 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-kernel/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch b/recipes-kernel/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
deleted file mode 100644
index 12f7d7b..0000000
--- a/recipes-kernel/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From f046a207183e3e338c7e851085265f0df95f4cc2 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Tue, 19 Jan 2010 21:19:15 -0800
-Subject: [PATCH 23/28] 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-kernel/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch b/recipes-kernel/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
deleted file mode 100644
index f012a91..0000000
--- a/recipes-kernel/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 66bba5baf225a1420c734aa0268e7dd37fc3f73b Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Sun, 24 Jan 2010 09:33:56 -0800
-Subject: [PATCH 24/28] 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-kernel/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch b/recipes-kernel/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch
deleted file mode 100644
index 419e764..0000000
--- a/recipes-kernel/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From ae08111e55d17183382dd06d161066adf9f80f3c Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Thu, 4 Feb 2010 12:26:22 -0800
-Subject: [PATCH 25/28] 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-kernel/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch b/recipes-kernel/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
deleted file mode 100644
index b002f28..0000000
--- a/recipes-kernel/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From dd53a7c1ab8addfd2a943ea44b5ccc5700648323 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Wed, 24 Feb 2010 10:37:22 -0800
-Subject: [PATCH 26/28] 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 9259780..ad0c1d8 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -785,7 +785,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-kernel/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch b/recipes-kernel/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
deleted file mode 100644
index 8f672d9..0000000
--- a/recipes-kernel/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From ec3e66ef2e222feb0408f16a3498be1ea9b6a9c0 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Mon, 10 May 2010 13:59:14 -0700
-Subject: [PATCH 27/28] 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-kernel/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch b/recipes-kernel/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
deleted file mode 100644
index ff2ab55..0000000
--- a/recipes-kernel/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
+++ /dev/null
@@ -1,355 +0,0 @@
-From 9b2bfa418f2e1b7ed3e210cb7cba3cdd67f9925f Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve at sakoman.com>
-Date: Fri, 18 Dec 2009 06:39:24 -0800
-Subject: [PATCH 28/28] 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-kernel/linux/linux-omap/beagleboard/defconfig b/recipes-kernel/linux/linux-omap/beagleboard/defconfig
deleted file mode 100644
index 738d894..0000000
--- a/recipes-kernel/linux/linux-omap/beagleboard/defconfig
+++ /dev/null
@@ -1,3361 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Thu Jan 27 16:18:14 2011
-#
-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_IOMMU=m
-CONFIG_OMAP_IOMMU_DEBUG=m
-# 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 is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# 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_BT_WILINK=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=y
-# 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_HT=y
-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
-
-#
-# 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_TWL4030_MADC=m
-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_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L2_COMMON=y
-CONFIG_VIDEO_ALLOW_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2_SUBDEV_API=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_VIDEO_OMAP3=y
-# CONFIG_VIDEO_OMAP3_DEBUG is not set
-# 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
-
-#
-# Texas Instruments WL128x FM driver (ST based)
-#
-CONFIG_RADIO_WL128X=m
-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
-
-#
-# DVB-S (satellite) frontends
-#
-CONFIG_DVB_CX24123=m
-CONFIG_DVB_MT312=m
-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_TDA10086=m
-CONFIG_DVB_TUNER_ITD1000=m
-CONFIG_DVB_TUNER_CX24113=m
-CONFIG_DVB_TDA826X=m
-CONFIG_DVB_CX24116=m
-CONFIG_DVB_SI21XX=m
-CONFIG_DVB_DS3000=m
-
-#
-# DVB-T (terrestrial) frontends
-#
-CONFIG_DVB_CX22702=m
-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
-
-#
-# DVB-C (cable) frontends
-#
-CONFIG_DVB_TDA10023=m
-CONFIG_DVB_STV0297=m
-
-#
-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-#
-CONFIG_DVB_NXT200X=m
-CONFIG_DVB_BCM3510=m
-CONFIG_DVB_LGDT330X=m
-CONFIG_DVB_LGDT3305=m
-CONFIG_DVB_S5H1409=m
-CONFIG_DVB_S5H1411=m
-
-#
-# ISDB-T (terrestrial) frontends
-#
-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_ISL6421=m
-CONFIG_DVB_LGS8GXX=m
-CONFIG_DVB_ATBM8830=m
-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_LGPHILIPS_LB035Q02 is not set
-# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
-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-kernel/linux/linux-omap/beagleboard/logo_linux_clut224.ppm b/recipes-kernel/linux/linux-omap/beagleboard/logo_linux_clut224.ppm
deleted file mode 100644
index d29fc1c..0000000
--- a/recipes-kernel/linux/linux-omap/beagleboard/logo_linux_clut224.ppm
+++ /dev/null
@@ -1,73147 +0,0 @@
-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
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-53
-248
-138
-64
-250
-139
-73
-247
-143
-74
-247
-143
-74
-249
-146
-83
-249
-146
-83
-249
-146
-83
-247
-143
-74
-250
-139
-73
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-53
-248
-138
-64
-250
-139
-73
-247
-143
-74
-247
-143
-74
-250
-139
-73
-248
-138
-64
-247
-130
-53
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-60
-248
-138
-64
-247
-143
-74
-247
-143
-74
-247
-143
-74
-250
-139
-73
-247
-130
-60
-247
-130
-53
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-130
-60
-250
-139
-73
-247
-143
-74
-247
-143
-74
-247
-143
-74
-248
-138
-64
-247
-130
-60
-247
-130
-53
-247
-118
-39
-247
-111
-26
-247
-111
-26
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-60
-248
-138
-64
-247
-143
-74
-247
-143
-74
-247
-143
-74
-250
-139
-73
-247
-130
-60
-247
-130
-53
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-130
-53
-247
-130
-60
-250
-139
-73
-249
-146
-83
-249
-152
-92
-249
-159
-103
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-247
-165
-111
-247
-165
-111
-249
-159
-103
-249
-152
-92
-249
-146
-83
-250
-139
-73
-247
-130
-60
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-247
-143
-74
-247
-150
-84
-246
-156
-93
-249
-159
-103
-249
-159
-103
-246
-156
-93
-247
-150
-84
-250
-139
-73
-247
-130
-60
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-123
-41
-248
-138
-64
-247
-143
-74
-249
-152
-92
-249
-159
-103
-249
-159
-103
-249
-159
-103
-246
-156
-93
-247
-150
-84
-250
-139
-73
-247
-130
-53
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-248
-138
-64
-249
-146
-83
-249
-152
-92
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-152
-92
-249
-146
-83
-248
-138
-64
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-248
-138
-64
-247
-143
-74
-249
-152
-92
-249
-159
-103
-249
-159
-103
-249
-159
-103
-246
-156
-93
-247
-150
-84
-250
-139
-73
-247
-130
-53
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-60
-250
-139
-73
-247
-150
-84
-249
-159
-103
-247
-165
-111
-249
-174
-124
-248
-180
-134
-252
-185
-144
-240
-181
-138
-219
-170
-138
-219
-170
-138
-230
-173
-136
-240
-181
-138
-248
-180
-134
-249
-174
-124
-247
-165
-111
-249
-159
-103
-249
-146
-83
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-247
-130
-60
-247
-143
-74
-249
-159
-103
-214
-151
-109
-121
-100
-85
-65
-67
-64
-74
-68
-68
-129
-102
-78
-214
-151
-109
-246
-156
-93
-247
-143
-74
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-111
-26
-246
-116
-28
-247
-123
-41
-248
-138
-64
-249
-146
-83
-249
-159
-103
-204
-141
-99
-102
-91
-75
-65
-67
-64
-81
-77
-76
-146
-111
-88
-238
-159
-107
-249
-152
-92
-250
-139
-73
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-248
-138
-64
-247
-150
-84
-245
-162
-103
-162
-125
-96
-81
-77
-76
-55
-66
-67
-99
-90
-79
-187
-140
-108
-249
-159
-103
-247
-150
-84
-248
-138
-64
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-111
-26
-246
-116
-28
-247
-123
-41
-248
-138
-64
-249
-146
-83
-249
-159
-103
-187
-140
-108
-102
-91
-75
-58
-69
-70
-76
-78
-76
-146
-111
-88
-238
-159
-107
-249
-152
-92
-250
-139
-73
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-53
-248
-138
-64
-249
-146
-83
-249
-159
-103
-251
-168
-115
-248
-180
-134
-239
-182
-144
-186
-157
-134
-124
-111
-99
-82
-69
-65
-65
-58
-56
-55
-48
-48
-65
-58
-56
-65
-58
-56
-65
-58
-56
-99
-90
-79
-158
-130
-108
-230
-173
-136
-250
-176
-132
-247
-165
-111
-249
-152
-92
-247
-143
-74
-247
-130
-53
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-250
-139
-73
-246
-156
-93
-214
-151
-109
-74
-68
-68
-56
-64
-60
-95
-87
-59
-88
-82
-59
-56
-64
-60
-81
-77
-76
-238
-159
-107
-249
-152
-92
-248
-138
-64
-247
-130
-53
-246
-116
-28
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-249
-159
-103
-187
-140
-108
-51
-62
-63
-69
-69
-61
-95
-87
-59
-83
-78
-61
-48
-58
-59
-121
-100
-85
-247
-165
-111
-247
-150
-84
-248
-138
-64
-247
-123
-41
-246
-116
-28
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-247
-130
-60
-247
-150
-84
-247
-165
-111
-139
-115
-96
-48
-58
-59
-95
-78
-64
-118
-86
-65
-81
-73
-62
-48
-58
-59
-162
-125
-96
-249
-159
-103
-249
-146
-83
-247
-130
-60
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-249
-159
-103
-187
-140
-108
-48
-58
-59
-76
-70
-64
-118
-86
-65
-95
-78
-64
-51
-62
-63
-121
-100
-85
-247
-165
-111
-247
-150
-84
-248
-138
-64
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-247
-143
-74
-249
-152
-92
-247
-165
-111
-250
-176
-132
-251
-192
-154
-167
-142
-123
-65
-58
-56
-35
-31
-30
-71
-60
-43
-108
-87
-46
-129
-106
-52
-137
-110
-49
-156
-125
-62
-187
-166
-150
-129
-106
-52
-101
-83
-47
-59
-50
-39
-55
-48
-48
-139
-115
-96
-240
-181
-138
-249
-174
-124
-249
-159
-103
-247
-143
-74
-247
-130
-53
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-247
-130
-60
-247
-150
-84
-247
-165
-111
-124
-111
-99
-56
-64
-60
-137
-110
-49
-171
-129
-45
-171
-129
-45
-129
-106
-52
-51
-62
-63
-162
-125
-96
-247
-165
-111
-249
-146
-83
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-245
-169
-119
-81
-77
-76
-69
-69
-61
-152
-119
-47
-171
-129
-45
-171
-129
-45
-105
-93
-60
-48
-58
-59
-187
-140
-108
-249
-159
-103
-247
-143
-74
-247
-130
-53
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-246
-116
-28
-247
-130
-53
-250
-139
-73
-249
-159
-103
-210
-156
-119
-51
-62
-63
-112
-85
-63
-234
-126
-45
-234
-126
-45
-225
-124
-48
-95
-78
-64
-63
-74
-74
-234
-168
-124
-246
-156
-93
-250
-139
-73
-247
-123
-41
-246
-116
-28
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-245
-169
-119
-81
-77
-76
-81
-73
-62
-212
-120
-56
-234
-126
-45
-234
-126
-45
-135
-94
-64
-41
-58
-57
-187
-140
-108
-249
-159
-103
-247
-143
-74
-247
-130
-53
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-249
-146
-83
-249
-159
-103
-249
-174
-124
-249
-189
-146
-236
-186
-153
-99
-90
-79
-47
-40
-38
-85
-71
-43
-145
-114
-49
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-160
-120
-43
-195
-167
-113
-216
-194
-154
-168
-127
-42
-168
-127
-42
-123
-102
-54
-59
-50
-39
-82
-69
-65
-230
-173
-136
-249
-174
-124
-249
-159
-103
-247
-143
-74
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-246
-156
-93
-245
-169
-119
-84
-85
-82
-83
-78
-61
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-75
-74
-61
-101
-100
-92
-249
-174
-124
-246
-156
-93
-248
-138
-64
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-249
-159
-103
-210
-156
-119
-48
-58
-59
-105
-93
-60
-171
-129
-45
-158
-125
-46
-161
-127
-40
-152
-119
-47
-62
-63
-61
-139
-115
-96
-251
-168
-115
-247
-150
-84
-247
-130
-60
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-249
-146
-83
-247
-165
-111
-158
-130
-108
-51
-62
-63
-188
-112
-56
-234
-125
-52
-224
-123
-55
-234
-126
-45
-163
-104
-61
-48
-58
-59
-210
-156
-119
-247
-165
-111
-249
-146
-83
-247
-130
-60
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-247
-165
-111
-210
-156
-119
-55
-66
-67
-146
-97
-64
-234
-126
-45
-224
-123
-55
-234
-125
-52
-199
-115
-54
-62
-63
-61
-139
-115
-96
-251
-168
-115
-247
-150
-84
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-249
-146
-83
-249
-159
-103
-250
-176
-132
-219
-170
-138
-150
-125
-114
-65
-58
-56
-24
-22
-23
-59
-50
-39
-152
-119
-47
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-160
-120
-43
-158
-125
-46
-227
-196
-175
-192
-155
-91
-160
-120
-43
-171
-129
-45
-158
-125
-46
-85
-71
-43
-65
-58
-56
-219
-170
-138
-249
-174
-124
-246
-156
-93
-250
-139
-73
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-247
-103
-7
-246
-109
-10
-246
-116
-28
-247
-130
-53
-247
-143
-74
-249
-159
-103
-230
-173
-136
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-252
-185
-144
-247
-165
-111
-249
-146
-83
-247
-130
-60
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-203
-161
-131
-43
-57
-62
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-133
-120
-107
-250
-176
-132
-246
-156
-93
-248
-138
-64
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-154
-133
-118
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-183
-110
-59
-51
-62
-63
-186
-157
-134
-250
-176
-132
-246
-156
-93
-250
-139
-73
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-250
-139
-73
-246
-156
-93
-249
-174
-124
-209
-171
-139
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-133
-120
-107
-249
-174
-124
-246
-156
-93
-248
-138
-64
-247
-123
-41
-247
-111
-26
-246
-109
-10
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-249
-159
-103
-250
-176
-132
-158
-130
-108
-47
-40
-38
-59
-50
-39
-85
-71
-43
-85
-71
-43
-59
-50
-39
-35
-31
-30
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-152
-119
-47
-192
-155
-91
-224
-207
-180
-158
-125
-46
-160
-120
-43
-168
-127
-42
-171
-129
-45
-71
-60
-43
-82
-69
-65
-239
-182
-144
-249
-174
-124
-249
-152
-92
-248
-138
-64
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-249
-146
-83
-247
-165
-111
-239
-182
-144
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-250
-197
-158
-250
-176
-132
-249
-159
-103
-247
-143
-74
-247
-130
-60
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-60
-249
-146
-83
-249
-159
-103
-248
-180
-134
-212
-173
-150
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-137
-127
-115
-248
-180
-134
-249
-159
-103
-247
-143
-74
-247
-130
-53
-247
-118
-39
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-130
-53
-250
-139
-73
-249
-159
-103
-250
-176
-132
-167
-142
-123
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-187
-166
-150
-249
-189
-146
-251
-168
-115
-249
-152
-92
-250
-139
-73
-247
-130
-53
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-53
-248
-138
-64
-247
-150
-84
-247
-165
-111
-252
-185
-144
-212
-173
-150
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-133
-120
-107
-248
-180
-134
-249
-159
-103
-250
-139
-73
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-103
-7
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-250
-139
-73
-249
-159
-103
-250
-176
-132
-167
-142
-123
-24
-22
-23
-85
-71
-43
-158
-125
-46
-171
-129
-45
-171
-129
-45
-171
-129
-45
-85
-71
-43
-35
-31
-30
-145
-114
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-152
-119
-47
-216
-194
-154
-195
-167
-113
-152
-119
-47
-158
-125
-46
-168
-127
-42
-158
-125
-46
-59
-50
-39
-139
-115
-96
-252
-185
-144
-247
-165
-111
-247
-150
-84
-247
-130
-60
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-60
-247
-150
-84
-251
-168
-115
-236
-186
-153
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-251
-209
-178
-249
-189
-146
-249
-174
-124
-249
-159
-103
-249
-146
-83
-248
-138
-64
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-118
-39
-246
-116
-28
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-248
-138
-64
-247
-143
-74
-246
-156
-93
-249
-174
-124
-251
-192
-154
-207
-178
-158
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-249
-189
-146
-247
-165
-111
-247
-150
-84
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-123
-41
-247
-130
-60
-247
-143
-74
-249
-159
-103
-252
-185
-144
-167
-142
-123
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-51
-62
-63
-187
-166
-150
-250
-200
-166
-248
-180
-134
-247
-165
-111
-249
-152
-92
-247
-143
-74
-247
-130
-60
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-60
-250
-139
-73
-249
-152
-92
-247
-165
-111
-248
-180
-134
-250
-197
-158
-207
-178
-158
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-252
-185
-144
-249
-159
-103
-247
-143
-74
-247
-130
-53
-246
-116
-28
-246
-109
-10
-247
-103
-7
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-118
-39
-247
-118
-39
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-247
-150
-84
-251
-168
-115
-230
-173
-136
-47
-40
-38
-59
-50
-39
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-161
-127
-40
-171
-129
-45
-59
-50
-39
-71
-60
-43
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-152
-119
-47
-170
-137
-67
-239
-227
-208
-170
-137
-67
-160
-120
-43
-158
-125
-46
-171
-129
-45
-123
-102
-54
-47
-40
-38
-209
-171
-139
-248
-180
-134
-247
-165
-111
-249
-146
-83
-247
-130
-60
-247
-123
-41
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-111
-26
-247
-123
-41
-247
-130
-60
-247
-150
-84
-249
-174
-124
-236
-186
-153
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-255
-215
-190
-253
-204
-176
-249
-189
-146
-249
-174
-124
-247
-165
-111
-246
-156
-93
-249
-146
-83
-247
-143
-74
-248
-138
-64
-247
-130
-60
-247
-130
-53
-247
-123
-41
-246
-116
-28
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-53
-248
-138
-64
-250
-139
-73
-247
-143
-74
-249
-146
-83
-247
-150
-84
-249
-146
-83
-249
-146
-83
-247
-143
-74
-248
-138
-64
-247
-130
-60
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-53
-248
-138
-64
-250
-139
-73
-247
-143
-74
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-247
-143
-74
-247
-143
-74
-250
-139
-73
-250
-139
-73
-248
-138
-64
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-60
-250
-139
-73
-247
-143
-74
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-247
-143
-74
-247
-143
-74
-247
-143
-74
-247
-143
-74
-247
-150
-84
-249
-159
-103
-249
-174
-124
-252
-185
-144
-250
-200
-166
-217
-187
-166
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-251
-192
-154
-249
-174
-124
-246
-156
-93
-247
-143
-74
-248
-138
-64
-247
-130
-60
-247
-130
-60
-248
-138
-64
-250
-139
-73
-247
-143
-74
-249
-146
-83
-247
-150
-84
-249
-146
-83
-249
-146
-83
-247
-143
-74
-248
-138
-64
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-130
-60
-250
-139
-73
-247
-150
-84
-251
-168
-115
-249
-189
-146
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-187
-166
-150
-253
-212
-188
-250
-197
-158
-248
-180
-134
-251
-168
-115
-249
-159
-103
-247
-150
-84
-247
-143
-74
-250
-139
-73
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-53
-248
-138
-64
-250
-139
-73
-247
-143
-74
-249
-146
-83
-247
-150
-84
-247
-150
-84
-249
-146
-83
-247
-143
-74
-250
-139
-73
-247
-130
-60
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-109
-10
-246
-109
-10
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-53
-247
-130
-60
-248
-138
-64
-247
-143
-74
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-247
-143
-74
-247
-143
-74
-247
-143
-74
-250
-139
-73
-250
-139
-73
-250
-139
-73
-248
-138
-64
-248
-138
-64
-248
-138
-64
-248
-138
-64
-248
-138
-64
-248
-138
-64
-250
-139
-73
-250
-139
-73
-250
-139
-73
-250
-139
-73
-247
-143
-74
-247
-143
-74
-250
-139
-73
-250
-139
-73
-248
-138
-64
-248
-138
-64
-247
-130
-60
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-60
-247
-130
-60
-248
-138
-64
-250
-139
-73
-247
-143
-74
-247
-150
-84
-249
-159
-103
-251
-168
-115
-248
-180
-134
-250
-197
-158
-253
-212
-188
-207
-178
-158
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-249
-189
-146
-247
-165
-111
-247
-143
-74
-247
-130
-53
-246
-116
-28
-246
-109
-10
-247
-103
-7
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-111
-26
-247
-118
-39
-247
-123
-41
-247
-130
-53
-247
-130
-60
-250
-139
-73
-247
-143
-74
-249
-146
-83
-247
-150
-84
-247
-150
-84
-249
-146
-83
-247
-143
-74
-250
-139
-73
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-118
-39
-247
-118
-39
-247
-118
-39
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-248
-138
-64
-248
-138
-64
-250
-139
-73
-250
-139
-73
-247
-143
-74
-247
-143
-74
-250
-139
-73
-250
-139
-73
-248
-138
-64
-247
-130
-60
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-60
-248
-138
-64
-250
-139
-73
-247
-143
-74
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-249
-146
-83
-247
-143
-74
-247
-143
-74
-250
-139
-73
-250
-139
-73
-248
-138
-64
-247
-130
-60
-247
-130
-53
-247
-123
-41
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-249
-159
-103
-252
-185
-144
-139
-115
-96
-35
-31
-30
-129
-106
-52
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-117
-98
-55
-35
-31
-30
-152
-119
-47
-168
-127
-42
-168
-127
-42
-160
-120
-43
-168
-127
-42
-171
-129
-45
-152
-119
-47
-216
-194
-154
-224
-207
-180
-160
-120
-43
-160
-120
-43
-137
-110
-49
-102
-91
-75
-35
-31
-30
-115
-102
-92
-250
-200
-166
-250
-176
-132
-249
-159
-103
-249
-146
-83
-247
-130
-60
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-116
-28
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-236
-186
-153
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-255
-215
-190
-255
-215
-190
-253
-204
-176
-250
-197
-158
-252
-185
-144
-249
-174
-124
-251
-168
-115
-249
-159
-103
-246
-156
-93
-247
-150
-84
-250
-139
-73
-247
-130
-60
-247
-130
-53
-247
-123
-41
-247
-118
-39
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-53
-248
-138
-64
-249
-146
-83
-249
-152
-92
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-249
-159
-103
-247
-150
-84
-247
-143
-74
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-246
-116
-28
-246
-116
-28
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-60
-250
-139
-73
-249
-146
-83
-249
-152
-92
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-247
-165
-111
-247
-165
-111
-249
-159
-103
-249
-159
-103
-246
-156
-93
-247
-150
-84
-249
-146
-83
-247
-143
-74
-248
-138
-64
-247
-130
-60
-247
-130
-60
-247
-130
-60
-248
-138
-64
-250
-139
-73
-249
-146
-83
-249
-152
-92
-249
-159
-103
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-247
-165
-111
-249
-159
-103
-247
-165
-111
-251
-168
-115
-250
-176
-132
-252
-185
-144
-250
-200
-166
-255
-215
-190
-217
-187
-166
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-137
-127
-115
-250
-200
-166
-250
-176
-132
-247
-165
-111
-249
-152
-92
-247
-150
-84
-249
-146
-83
-247
-150
-84
-249
-152
-92
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-249
-159
-103
-246
-156
-93
-247
-150
-84
-247
-143
-74
-250
-139
-73
-247
-143
-74
-249
-146
-83
-249
-159
-103
-249
-174
-124
-251
-192
-154
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-173
-106
-60
-51
-62
-63
-187
-166
-150
-255
-215
-190
-253
-212
-188
-250
-200
-166
-249
-189
-146
-248
-180
-134
-249
-174
-124
-247
-165
-111
-249
-159
-103
-249
-152
-92
-247
-143
-74
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-246
-116
-28
-247
-111
-26
-246
-116
-28
-247
-118
-39
-247
-123
-41
-247
-130
-53
-248
-138
-64
-247
-143
-74
-249
-152
-92
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-249
-159
-103
-249
-152
-92
-247
-143
-74
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-53
-248
-138
-64
-247
-143
-74
-247
-150
-84
-249
-159
-103
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-247
-165
-111
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-246
-156
-93
-246
-156
-93
-246
-156
-93
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-152
-92
-249
-152
-92
-247
-150
-84
-249
-146
-83
-249
-146
-83
-249
-146
-83
-247
-150
-84
-249
-152
-92
-246
-156
-93
-249
-159
-103
-247
-165
-111
-249
-174
-124
-250
-176
-132
-249
-189
-146
-250
-200
-166
-253
-212
-188
-255
-215
-190
-207
-178
-158
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-249
-189
-146
-247
-165
-111
-247
-143
-74
-247
-130
-53
-246
-116
-28
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-53
-248
-138
-64
-247
-143
-74
-247
-150
-84
-249
-159
-103
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-249
-159
-103
-249
-152
-92
-249
-146
-83
-250
-139
-73
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-60
-248
-138
-64
-247
-143
-74
-249
-146
-83
-249
-152
-92
-246
-156
-93
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-249
-159
-103
-246
-156
-93
-249
-152
-92
-247
-150
-84
-249
-146
-83
-247
-143
-74
-247
-143
-74
-247
-143
-74
-249
-146
-83
-247
-150
-84
-246
-156
-93
-249
-159
-103
-247
-165
-111
-247
-165
-111
-251
-168
-115
-251
-168
-115
-251
-168
-115
-247
-165
-111
-247
-165
-111
-247
-165
-111
-249
-159
-103
-249
-159
-103
-246
-156
-93
-247
-150
-84
-247
-143
-74
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-103
-7
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-236
-186
-153
-47
-40
-38
-59
-50
-39
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-47
-40
-38
-108
-87
-46
-168
-127
-42
-111
-94
-57
-76
-70
-64
-59
-50
-39
-101
-83
-47
-160
-120
-43
-170
-137
-67
-253
-255
-252
-195
-167
-113
-145
-114
-49
-69
-69
-61
-120
-114
-108
-35
-31
-30
-47
-40
-38
-217
-187
-166
-250
-197
-158
-250
-176
-132
-249
-159
-103
-249
-146
-83
-248
-138
-64
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-130
-53
-250
-139
-73
-246
-156
-93
-250
-176
-132
-232
-190
-161
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-255
-215
-190
-255
-215
-190
-245
-212
-186
-227
-196
-175
-212
-173
-150
-209
-171
-139
-219
-170
-138
-240
-181
-138
-250
-176
-132
-251
-168
-115
-249
-159
-103
-247
-150
-84
-250
-139
-73
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-130
-53
-247
-130
-53
-248
-138
-64
-249
-146
-83
-246
-156
-93
-247
-165
-111
-249
-174
-124
-248
-180
-134
-240
-181
-138
-219
-170
-138
-203
-161
-131
-203
-161
-131
-219
-170
-138
-240
-181
-138
-250
-176
-132
-249
-174
-124
-249
-159
-103
-249
-152
-92
-247
-143
-74
-247
-130
-60
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-53
-248
-138
-64
-249
-146
-83
-246
-156
-93
-247
-165
-111
-249
-174
-124
-245
-179
-138
-230
-173
-136
-203
-161
-131
-203
-161
-131
-219
-170
-138
-239
-182
-144
-251
-192
-154
-249
-189
-146
-252
-185
-144
-252
-185
-144
-248
-180
-134
-245
-169
-119
-234
-168
-124
-247
-165
-111
-249
-159
-103
-249
-152
-92
-247
-150
-84
-247
-150
-84
-247
-150
-84
-249
-152
-92
-249
-159
-103
-247
-165
-111
-249
-174
-124
-248
-180
-134
-230
-173
-136
-219
-170
-138
-203
-161
-131
-209
-171
-139
-239
-182
-144
-251
-192
-154
-249
-189
-146
-249
-189
-146
-252
-185
-144
-252
-185
-144
-249
-189
-146
-236
-186
-153
-250
-200
-166
-255
-215
-190
-255
-215
-190
-217
-187
-166
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-137
-127
-115
-253
-204
-176
-252
-185
-144
-249
-174
-124
-247
-165
-111
-247
-165
-111
-247
-165
-111
-251
-168
-115
-249
-174
-124
-248
-180
-134
-230
-173
-136
-219
-170
-138
-203
-161
-131
-209
-171
-139
-230
-173
-136
-245
-179
-138
-250
-176
-132
-251
-168
-115
-249
-159
-103
-249
-159
-103
-246
-156
-93
-249
-159
-103
-251
-168
-115
-248
-180
-134
-250
-197
-158
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-173
-106
-60
-51
-62
-63
-187
-166
-150
-255
-215
-190
-255
-215
-190
-234
-204
-183
-207
-178
-158
-209
-171
-139
-209
-171
-139
-230
-173
-136
-248
-180
-134
-249
-174
-124
-247
-165
-111
-249
-152
-92
-247
-143
-74
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-130
-53
-248
-138
-64
-247
-143
-74
-249
-152
-92
-247
-165
-111
-249
-174
-124
-248
-180
-134
-240
-181
-138
-219
-170
-138
-203
-161
-131
-203
-161
-131
-219
-170
-138
-240
-181
-138
-248
-180
-134
-249
-174
-124
-247
-165
-111
-249
-152
-92
-247
-143
-74
-248
-138
-64
-247
-130
-53
-247
-123
-41
-247
-123
-41
-247
-123
-41
-247
-130
-53
-247
-130
-60
-247
-143
-74
-249
-152
-92
-249
-159
-103
-249
-174
-124
-250
-176
-132
-240
-181
-138
-219
-170
-138
-203
-161
-131
-203
-161
-131
-230
-173
-136
-251
-192
-154
-249
-189
-146
-249
-189
-146
-252
-185
-144
-252
-185
-144
-248
-180
-134
-234
-168
-124
-250
-176
-132
-248
-180
-134
-250
-176
-132
-250
-176
-132
-250
-176
-132
-248
-180
-134
-248
-180
-134
-230
-173
-136
-240
-181
-138
-252
-185
-144
-252
-185
-144
-252
-185
-144
-252
-185
-144
-248
-180
-134
-234
-168
-124
-234
-168
-124
-249
-174
-124
-251
-168
-115
-247
-165
-111
-247
-165
-111
-247
-165
-111
-251
-168
-115
-249
-174
-124
-250
-176
-132
-248
-180
-134
-230
-173
-136
-219
-170
-138
-209
-171
-139
-207
-178
-158
-227
-196
-175
-253
-212
-188
-255
-215
-190
-217
-187
-166
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-249
-189
-146
-247
-165
-111
-247
-143
-74
-247
-130
-53
-246
-116
-28
-247
-111
-26
-246
-109
-10
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-247
-143
-74
-249
-152
-92
-249
-159
-103
-249
-174
-124
-248
-180
-134
-240
-181
-138
-219
-170
-138
-203
-161
-131
-203
-161
-131
-219
-170
-138
-240
-181
-138
-248
-180
-134
-249
-174
-124
-247
-165
-111
-249
-159
-103
-247
-150
-84
-249
-146
-83
-247
-143
-74
-247
-143
-74
-249
-146
-83
-249
-152
-92
-249
-159
-103
-247
-165
-111
-234
-168
-124
-234
-168
-124
-248
-180
-134
-252
-185
-144
-252
-185
-144
-252
-185
-144
-248
-180
-134
-250
-176
-132
-234
-168
-124
-249
-174
-124
-251
-168
-115
-247
-165
-111
-247
-165
-111
-249
-159
-103
-247
-165
-111
-251
-168
-115
-249
-174
-124
-250
-176
-132
-248
-180
-134
-230
-173
-136
-203
-161
-131
-203
-161
-131
-219
-170
-138
-239
-182
-144
-251
-192
-154
-249
-189
-146
-252
-185
-144
-252
-185
-144
-248
-180
-134
-234
-168
-124
-238
-159
-107
-247
-165
-111
-249
-152
-92
-247
-143
-74
-247
-130
-60
-247
-123
-41
-246
-116
-28
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-246
-116
-28
-247
-130
-53
-247
-143
-74
-247
-165
-111
-252
-185
-144
-154
-133
-118
-24
-22
-23
-108
-87
-46
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-71
-60
-43
-85
-71
-43
-101
-83
-47
-89
-84
-82
-152
-147
-147
-24
-22
-23
-24
-22
-23
-108
-87
-46
-168
-127
-42
-224
-207
-180
-253
-255
-252
-209
-171
-139
-101
-83
-47
-24
-22
-23
-35
-31
-30
-35
-31
-30
-167
-142
-123
-253
-212
-188
-250
-197
-158
-248
-180
-134
-247
-165
-111
-247
-150
-84
-250
-139
-73
-247
-130
-60
-247
-130
-60
-248
-138
-64
-249
-146
-83
-249
-159
-103
-250
-176
-132
-232
-190
-161
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-97
-98
-96
-217
-187
-166
-137
-127
-115
-91
-92
-89
-55
-66
-67
-48
-58
-59
-48
-58
-59
-55
-66
-67
-84
-85
-82
-133
-120
-107
-209
-171
-139
-248
-180
-134
-251
-168
-115
-249
-159
-103
-247
-150
-84
-247
-143
-74
-250
-139
-73
-250
-139
-73
-249
-146
-83
-249
-152
-92
-247
-165
-111
-249
-174
-124
-245
-179
-138
-178
-146
-122
-124
-111
-99
-76
-78
-76
-51
-62
-63
-48
-58
-59
-48
-58
-59
-58
-69
-70
-91
-92
-89
-144
-125
-110
-203
-161
-131
-248
-180
-134
-249
-174
-124
-249
-159
-103
-247
-150
-84
-247
-143
-74
-248
-138
-64
-248
-138
-64
-250
-139
-73
-249
-146
-83
-246
-156
-93
-247
-165
-111
-250
-176
-132
-230
-173
-136
-154
-133
-118
-101
-100
-92
-58
-69
-70
-48
-58
-59
-48
-58
-59
-51
-62
-63
-84
-85
-82
-137
-127
-115
-217
-187
-166
-253
-212
-188
-227
-196
-175
-144
-125
-110
-89
-84
-82
-81
-77
-76
-115
-102
-92
-210
-156
-119
-249
-174
-124
-251
-168
-115
-251
-168
-115
-251
-168
-115
-249
-174
-124
-250
-176
-132
-252
-185
-144
-195
-157
-134
-124
-111
-99
-76
-78
-76
-51
-62
-63
-48
-58
-59
-48
-58
-59
-70
-79
-77
-120
-114
-108
-187
-166
-150
-253
-212
-188
-253
-212
-188
-172
-150
-134
-101
-100
-92
-77
-85
-81
-101
-100
-92
-176
-156
-141
-255
-215
-190
-217
-187
-166
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-253
-212
-188
-250
-197
-158
-252
-185
-144
-248
-180
-134
-248
-180
-134
-252
-185
-144
-239
-182
-144
-167
-142
-123
-109
-106
-99
-70
-79
-77
-48
-58
-59
-48
-58
-59
-48
-58
-59
-58
-69
-70
-91
-92
-89
-150
-125
-114
-219
-170
-138
-248
-180
-134
-249
-174
-124
-249
-174
-124
-249
-174
-124
-250
-176
-132
-249
-189
-146
-253
-204
-176
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-183
-110
-59
-51
-62
-63
-176
-156
-141
-187
-166
-150
-109
-106
-99
-63
-74
-74
-43
-57
-62
-43
-57
-62
-43
-57
-62
-63
-74
-74
-109
-106
-99
-178
-146
-122
-245
-179
-138
-249
-174
-124
-249
-159
-103
-247
-150
-84
-247
-143
-74
-248
-138
-64
-248
-138
-64
-248
-138
-64
-247
-143
-74
-247
-150
-84
-249
-159
-103
-249
-174
-124
-252
-185
-144
-195
-157
-134
-124
-111
-99
-77
-85
-81
-51
-62
-63
-41
-58
-57
-43
-57
-62
-51
-62
-63
-77
-85
-81
-124
-111
-99
-195
-157
-134
-252
-185
-144
-249
-174
-124
-249
-159
-103
-247
-150
-84
-247
-143
-74
-248
-138
-64
-247
-130
-60
-248
-138
-64
-250
-139
-73
-247
-150
-84
-249
-159
-103
-251
-168
-115
-248
-180
-134
-203
-161
-131
-124
-111
-99
-77
-85
-81
-48
-58
-59
-43
-57
-62
-43
-57
-62
-63
-74
-74
-109
-106
-99
-187
-166
-150
-253
-212
-188
-253
-212
-188
-187
-166
-150
-109
-106
-99
-77
-85
-81
-84
-85
-82
-150
-125
-114
-232
-190
-161
-253
-204
-176
-253
-204
-176
-172
-150
-134
-101
-100
-92
-77
-85
-81
-91
-92
-89
-137
-127
-115
-227
-196
-175
-253
-212
-188
-186
-157
-134
-109
-106
-99
-77
-85
-81
-84
-85
-82
-124
-111
-99
-219
-170
-138
-249
-189
-146
-249
-189
-146
-249
-189
-146
-251
-192
-154
-250
-197
-158
-186
-157
-134
-109
-106
-99
-70
-79
-77
-43
-57
-62
-43
-57
-62
-41
-58
-57
-63
-74
-74
-101
-100
-92
-176
-156
-141
-194
-173
-157
-55
-66
-67
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-249
-189
-146
-247
-165
-111
-247
-143
-74
-247
-130
-53
-247
-118
-39
-247
-111
-26
-246
-109
-10
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-249
-146
-83
-249
-159
-103
-249
-174
-124
-252
-185
-144
-203
-161
-131
-133
-120
-107
-84
-85
-82
-55
-66
-67
-43
-57
-62
-41
-58
-57
-51
-62
-63
-77
-85
-81
-124
-111
-99
-178
-146
-122
-239
-182
-144
-250
-176
-132
-249
-174
-124
-247
-165
-111
-249
-159
-103
-249
-159
-103
-247
-165
-111
-249
-174
-124
-210
-156
-119
-124
-111
-99
-77
-85
-81
-77
-85
-81
-109
-106
-99
-194
-173
-157
-253
-212
-188
-217
-187
-166
-133
-120
-107
-89
-84
-82
-76
-78
-76
-101
-100
-92
-178
-146
-122
-249
-189
-146
-252
-185
-144
-252
-185
-144
-252
-185
-144
-251
-192
-154
-236
-186
-153
-167
-142
-123
-101
-100
-92
-63
-74
-74
-41
-58
-57
-43
-57
-62
-51
-62
-63
-77
-85
-81
-137
-127
-115
-217
-187
-166
-253
-212
-188
-227
-196
-175
-144
-125
-110
-84
-85
-82
-76
-78
-76
-115
-102
-92
-204
-141
-99
-249
-159
-103
-247
-143
-74
-247
-130
-60
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-250
-197
-158
-82
-69
-65
-47
-40
-38
-152
-119
-47
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-101
-83
-47
-59
-50
-39
-101
-83
-47
-24
-22
-23
-35
-31
-30
-24
-22
-23
-24
-22
-23
-108
-87
-46
-168
-127
-42
-195
-167
-113
-253
-255
-252
-253
-255
-252
-239
-227
-208
-186
-157
-134
-162
-125
-96
-105
-93
-60
-47
-40
-38
-150
-125
-114
-217
-187
-166
-250
-200
-166
-252
-185
-144
-251
-168
-115
-246
-156
-93
-249
-146
-83
-247
-143
-74
-249
-146
-83
-249
-152
-92
-247
-165
-111
-252
-185
-144
-232
-190
-161
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-55
-66
-67
-58
-69
-70
-56
-64
-60
-83
-78
-61
-105
-93
-60
-117
-98
-55
-117
-98
-55
-105
-93
-60
-83
-78
-61
-56
-64
-60
-55
-66
-67
-144
-125
-110
-239
-182
-144
-250
-176
-132
-247
-165
-111
-249
-159
-103
-246
-156
-93
-249
-159
-103
-247
-165
-111
-249
-174
-124
-252
-185
-144
-195
-157
-134
-89
-84
-82
-48
-58
-59
-63
-69
-60
-95
-87
-59
-111
-94
-57
-123
-102
-54
-117
-98
-55
-105
-93
-60
-83
-78
-61
-56
-64
-60
-51
-62
-63
-124
-111
-99
-219
-170
-138
-248
-180
-134
-251
-168
-115
-249
-159
-103
-249
-152
-92
-249
-152
-92
-246
-156
-93
-247
-165
-111
-249
-174
-124
-252
-185
-144
-167
-142
-123
-70
-79
-77
-51
-62
-63
-75
-74
-61
-100
-89
-56
-117
-98
-55
-123
-102
-54
-105
-93
-60
-83
-78
-61
-51
-62
-63
-63
-74
-74
-172
-150
-134
-109
-106
-99
-51
-62
-63
-83
-78
-61
-95
-87
-59
-65
-67
-64
-65
-67
-64
-209
-171
-139
-249
-189
-146
-249
-189
-146
-249
-189
-146
-250
-197
-158
-212
-173
-150
-109
-106
-99
-48
-58
-59
-63
-69
-60
-95
-87
-59
-111
-94
-57
-123
-102
-54
-117
-98
-55
-95
-87
-59
-62
-63
-61
-48
-58
-59
-137
-127
-115
-146
-135
-124
-48
-58
-59
-75
-74
-61
-95
-87
-59
-75
-74
-61
-48
-58
-59
-161
-144
-134
-217
-187
-166
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-255
-215
-190
-251
-209
-178
-250
-200
-166
-250
-200
-166
-250
-200
-166
-172
-150
-134
-77
-85
-81
-48
-58
-59
-69
-69
-61
-95
-87
-59
-111
-94
-57
-123
-102
-54
-117
-98
-55
-100
-89
-56
-75
-74
-61
-56
-64
-60
-55
-66
-67
-133
-120
-107
-236
-186
-153
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-253
-212
-188
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-173
-106
-60
-51
-62
-63
-63
-74
-74
-48
-58
-59
-76
-70
-64
-118
-86
-65
-146
-97
-64
-155
-100
-63
-146
-97
-64
-118
-86
-65
-76
-70
-64
-43
-57
-62
-91
-92
-89
-203
-161
-131
-248
-180
-134
-251
-168
-115
-249
-159
-103
-249
-152
-92
-247
-150
-84
-249
-152
-92
-249
-159
-103
-251
-168
-115
-248
-180
-134
-209
-171
-139
-101
-100
-92
-43
-57
-62
-69
-69
-61
-106
-82
-65
-135
-94
-64
-155
-100
-63
-155
-100
-63
-135
-94
-64
-106
-82
-65
-65
-67
-64
-43
-57
-62
-101
-100
-92
-209
-171
-139
-248
-180
-134
-251
-168
-115
-249
-159
-103
-249
-152
-92
-247
-150
-84
-247
-150
-84
-246
-156
-93
-247
-165
-111
-250
-176
-132
-219
-170
-138
-124
-111
-99
-48
-58
-59
-62
-63
-61
-106
-82
-65
-139
-96
-61
-155
-100
-63
-146
-97
-64
-125
-90
-64
-76
-70
-64
-41
-58
-57
-120
-114
-108
-172
-150
-134
-51
-62
-63
-69
-69
-61
-112
-85
-63
-95
-78
-64
-51
-62
-63
-120
-114
-108
-245
-212
-186
-146
-135
-124
-43
-57
-62
-81
-73
-62
-118
-86
-65
-95
-78
-64
-56
-64
-60
-101
-100
-92
-133
-120
-107
-43
-57
-62
-76
-70
-64
-112
-85
-63
-106
-82
-65
-62
-63
-61
-77
-85
-81
-227
-196
-175
-253
-212
-188
-253
-212
-188
-217
-187
-166
-109
-106
-99
-41
-58
-57
-69
-69
-61
-112
-85
-63
-139
-96
-61
-155
-100
-63
-146
-97
-64
-118
-86
-65
-81
-73
-62
-48
-58
-59
-58
-69
-70
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-249
-146
-83
-247
-130
-53
-247
-118
-39
-247
-111
-26
-247
-111
-26
-246
-116
-28
-247
-123
-41
-248
-138
-64
-249
-146
-83
-249
-159
-103
-250
-176
-132
-219
-170
-138
-124
-111
-99
-43
-57
-62
-62
-63
-61
-106
-82
-65
-135
-94
-64
-155
-100
-63
-155
-100
-63
-139
-96
-61
-106
-82
-65
-69
-69
-61
-43
-57
-62
-91
-92
-89
-195
-157
-134
-251
-192
-154
-252
-185
-144
-248
-180
-134
-248
-180
-134
-252
-185
-144
-203
-161
-131
-63
-74
-74
-62
-63
-61
-106
-82
-65
-112
-85
-63
-69
-69
-61
-55
-66
-67
-146
-135
-124
-63
-74
-74
-56
-64
-60
-95
-78
-64
-112
-85
-63
-76
-70
-64
-48
-58
-59
-172
-150
-134
-253
-204
-176
-251
-209
-178
-251
-209
-178
-187
-166
-150
-77
-85
-81
-48
-58
-59
-81
-73
-62
-125
-90
-64
-146
-97
-64
-155
-100
-63
-139
-96
-61
-95
-78
-64
-56
-64
-60
-58
-69
-70
-161
-144
-134
-109
-106
-99
-51
-62
-63
-95
-78
-64
-112
-85
-63
-65
-67
-64
-65
-67
-64
-204
-141
-99
-246
-156
-93
-250
-139
-73
-247
-130
-53
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-246
-116
-28
-247
-130
-53
-247
-143
-74
-249
-159
-103
-252
-185
-144
-209
-171
-139
-24
-22
-23
-85
-71
-43
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-137
-110
-49
-47
-40
-38
-137
-110
-49
-101
-83
-47
-59
-50
-39
-59
-50
-39
-101
-83
-47
-158
-125
-46
-160
-120
-43
-192
-155
-91
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-237
-233
-225
-152
-147
-147
-81
-77
-76
-55
-48
-48
-115
-102
-92
-212
-173
-150
-251
-192
-154
-249
-174
-124
-247
-165
-111
-249
-159
-103
-249
-159
-103
-247
-165
-111
-249
-174
-124
-249
-189
-146
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-43
-57
-62
-95
-87
-59
-145
-114
-49
-168
-127
-42
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-145
-114
-49
-95
-87
-59
-48
-58
-59
-109
-106
-99
-236
-186
-153
-252
-185
-144
-248
-180
-134
-250
-176
-132
-250
-176
-132
-252
-185
-144
-251
-192
-154
-150
-125
-114
-48
-58
-59
-69
-69
-61
-117
-98
-55
-158
-125
-46
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-152
-119
-47
-100
-89
-56
-56
-64
-60
-63
-74
-74
-186
-157
-134
-249
-189
-146
-248
-180
-134
-249
-174
-124
-249
-174
-124
-250
-176
-132
-252
-185
-144
-251
-192
-154
-133
-120
-107
-48
-58
-59
-75
-74
-61
-137
-110
-49
-168
-127
-42
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-145
-114
-49
-75
-74
-61
-43
-57
-62
-51
-62
-63
-123
-102
-54
-171
-129
-45
-171
-129
-45
-145
-114
-49
-56
-64
-60
-133
-120
-107
-253
-212
-188
-251
-209
-178
-253
-212
-188
-194
-173
-157
-63
-74
-74
-56
-64
-60
-111
-94
-57
-158
-125
-46
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-158
-125
-46
-105
-93
-60
-51
-62
-63
-43
-57
-62
-88
-82
-59
-168
-127
-42
-171
-129
-45
-168
-127
-42
-88
-82
-59
-63
-74
-74
-187
-166
-150
-55
-66
-67
-111
-94
-57
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-133
-120
-107
-48
-58
-59
-75
-74
-61
-129
-106
-52
-158
-125
-46
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-171
-129
-45
-168
-127
-42
-145
-114
-49
-95
-87
-59
-51
-62
-63
-77
-85
-81
-212
-173
-150
-253
-204
-176
-253
-204
-176
-251
-209
-178
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-41
-58
-57
-69
-69
-61
-155
-100
-63
-214
-121
-50
-234
-126
-45
-234
-126
-45
-234
-126
-45
-234
-126
-45
-234
-126
-45
-224
-123
-55
-155
-100
-63
-69
-69
-61
-51
-62
-63
-178
-146
-122
-249
-189
-146
-250
-176
-132
-251
-168
-115
-251
-168
-115
-249
-174
-124
-250
-176
-132
-249
-189
-146
-167
-142
-123
-55
-66
-67
-65
-67
-64
-146
-97
-64
-212
-120
-56
-234
-126
-45
-234
-125
-52
-234
-126
-45
-234
-125
-52
-234
-126
-45
-234
-125
-52
-209
-117
-53
-146
-97
-64
-65
-67
-64
-55
-66
-67
-178
-146
-122
-249
-189
-146
-250
-176
-132
-251
-168
-115
-247
-165
-111
-251
-168
-115
-249
-174
-124
-252
-185
-144
-203
-161
-131
-63
-74
-74
-56
-64
-60
-125
-90
-64
-209
-117
-53
-234
-126
-45
-234
-126
-45
-234
-125
-52
-234
-126
-45
-234
-126
-45
-214
-121
-50
-146
-97
-64
-56
-64
-60
-41
-58
-57
-81
-73
-62
-209
-117
-53
-234
-126
-45
-234
-126
-45
-125
-90
-64
-51
-62
-63
-176
-156
-141
-55
-66
-67
-106
-82
-65
-225
-124
-48
-234
-126
-45
-234
-126
-45
-146
-97
-64
-41
-58
-57
-43
-57
-62
-125
-90
-64
-214
-121
-50
-234
-126
-45
-234
-126
-45
-183
-110
-59
-56
-64
-60
-137
-127
-115
-255
-215
-190
-194
-173
-157
-63
-74
-74
-62
-63
-61
-146
-97
-64
-214
-121
-50
-234
-125
-52
-234
-126
-45
-234
-125
-52
-234
-125
-52
-234
-126
-45
-225
-124
-48
-173
-106
-60
-81
-73
-62
-35
-56
-60
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-249
-146
-83
-247
-130
-53
-247
-118
-39
-246
-116
-28
-246
-116
-28
-247
-123
-41
-247
-130
-60
-249
-146
-83
-247
-165
-111
-248
-180
-134
-186
-157
-134
-58
-69
-70
-56
-64
-60
-135
-94
-64
-199
-115
-54
-234
-125
-52
-234
-126
-45
-234
-125
-52
-234
-125
-52
-234
-126
-45
-234
-125
-52
-212
-120
-56
-155
-100
-63
-76
-70
-64
-51
-62
-63
-146
-135
-124
-251
-209
-178
-253
-204
-176
-250
-200
-166
-253
-204
-176
-101
-100
-92
-69
-69
-61
-194
-112
-58
-234
-126
-45
-234
-126
-45
-199
-115
-54
-65
-67
-64
-35
-56
-60
-81
-73
-62
-194
-112
-58
-234
-125
-52
-234
-126
-45
-214
-121
-50
-95
-78
-64
-63
-74
-74
-238
-205
-179
-255
-215
-190
-161
-144
-134
-43
-57
-62
-81
-73
-62
-173
-106
-60
-225
-124
-48
-234
-126
-45
-234
-126
-45
-234
-125
-52
-234
-126
-45
-234
-126
-45
-194
-112
-58
-95
-78
-64
-41
-58
-57
-48
-58
-59
-155
-100
-63
-234
-126
-45
-234
-126
-45
-199
-115
-54
-69
-69
-61
-99
-90
-79
-251
-168
-115
-247
-150
-84
-247
-130
-60
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-60
-247
-150
-84
-249
-174
-124
-251
-192
-154
-124
-111
-99
-35
-31
-30
-137
-110
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-47
-40
-38
-108
-87
-46
-175
-132
-40
-161
-127
-40
-168
-127
-42
-171
-129
-45
-158
-125
-46
-152
-119
-47
-203
-161
-131
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-186
-181
-179
-89
-84
-82
-47
-40
-38
-139
-115
-96
-236
-186
-153
-252
-185
-144
-250
-176
-132
-249
-174
-124
-250
-176
-132
-252
-185
-144
-250
-197
-158
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-111
-94
-57
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-111
-94
-57
-48
-58
-59
-109
-106
-99
-253
-204
-176
-250
-200
-166
-250
-200
-166
-250
-200
-166
-253
-204
-176
-137
-127
-115
-43
-57
-62
-88
-82
-59
-158
-125
-46
-171
-129
-45
-161
-127
-40
-158
-125
-46
-158
-125
-46
-168
-127
-42
-161
-127
-40
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-145
-114
-49
-69
-69
-61
-51
-62
-63
-187
-166
-150
-250
-200
-166
-250
-197
-158
-251
-192
-154
-250
-197
-158
-253
-204
-176
-133
-120
-107
-48
-58
-59
-95
-87
-59
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-158
-125
-46
-75
-74
-61
-62
-63
-61
-168
-127
-42
-161
-127
-40
-158
-125
-46
-171
-129
-45
-83
-78
-61
-91
-92
-89
-255
-215
-190
-255
-215
-190
-207
-178
-158
-58
-69
-70
-63
-69
-60
-145
-114
-49
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-105
-93
-60
-43
-57
-62
-137
-110
-49
-171
-129
-45
-158
-125
-46
-171
-129
-45
-137
-110
-49
-51
-62
-63
-146
-135
-124
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-152
-119
-47
-65
-67
-64
-137
-127
-115
-255
-215
-190
-255
-215
-190
-245
-212
-186
-120
-114
-108
-48
-58
-59
-100
-89
-56
-168
-127
-42
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-129
-106
-52
-61
-67
-58
-63
-74
-74
-207
-178
-158
-255
-215
-190
-255
-215
-190
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-95
-78
-64
-209
-117
-53
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-209
-117
-53
-89
-75
-66
-51
-62
-63
-187
-166
-150
-250
-197
-158
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-161
-144
-134
-41
-58
-57
-95
-78
-64
-199
-115
-54
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-199
-115
-54
-89
-75
-66
-41
-58
-57
-167
-142
-123
-250
-200
-166
-251
-192
-154
-252
-185
-144
-249
-189
-146
-250
-197
-158
-212
-173
-150
-63
-74
-74
-69
-69
-61
-183
-110
-59
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-163
-104
-61
-41
-58
-57
-135
-94
-64
-234
-126
-45
-224
-123
-55
-234
-125
-52
-188
-112
-56
-51
-62
-63
-109
-106
-99
-51
-62
-63
-188
-112
-56
-234
-126
-45
-224
-123
-55
-234
-125
-52
-188
-112
-56
-43
-57
-62
-112
-85
-63
-234
-126
-45
-227
-126
-50
-224
-123
-55
-227
-126
-50
-234
-126
-45
-95
-78
-64
-109
-106
-99
-217
-187
-166
-58
-69
-70
-69
-69
-61
-188
-112
-56
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-214
-121
-50
-95
-78
-64
-146
-97
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-249
-146
-83
-247
-130
-53
-247
-123
-41
-247
-118
-39
-247
-123
-41
-247
-130
-53
-247
-143
-74
-249
-159
-103
-250
-176
-132
-186
-157
-134
-51
-62
-63
-81
-73
-62
-188
-112
-56
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-212
-120
-56
-106
-82
-65
-41
-58
-57
-146
-135
-124
-255
-215
-190
-255
-215
-190
-234
-204
-183
-63
-74
-74
-125
-90
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-234
-125
-52
-89
-75
-66
-62
-63
-61
-199
-115
-54
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-163
-104
-61
-48
-58
-59
-217
-187
-166
-172
-150
-134
-41
-58
-57
-106
-82
-65
-214
-121
-50
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-225
-124
-48
-81
-73
-62
-69
-69
-61
-227
-126
-50
-227
-126
-50
-224
-123
-55
-238
-123
-45
-125
-90
-64
-55
-66
-67
-250
-176
-132
-246
-156
-93
-250
-139
-73
-247
-123
-41
-247
-111
-26
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-250
-139
-73
-249
-159
-103
-248
-180
-134
-232
-190
-161
-47
-40
-38
-71
-60
-43
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-71
-60
-43
-71
-60
-43
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-160
-120
-43
-170
-137
-67
-237
-233
-225
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-186
-181
-179
-74
-68
-68
-89
-75
-66
-212
-173
-150
-250
-197
-158
-251
-192
-154
-249
-189
-146
-251
-192
-154
-253
-204
-176
-234
-204
-183
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-152
-119
-47
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-111
-94
-57
-48
-58
-59
-161
-144
-134
-255
-215
-190
-255
-215
-190
-255
-215
-190
-172
-150
-134
-48
-58
-59
-95
-87
-59
-168
-127
-42
-168
-127
-42
-158
-125
-46
-161
-127
-40
-171
-129
-45
-158
-125
-46
-152
-119
-47
-152
-119
-47
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-152
-119
-47
-69
-69
-61
-58
-69
-70
-217
-187
-166
-255
-215
-190
-255
-215
-190
-255
-215
-190
-172
-150
-134
-43
-57
-62
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-171
-129
-45
-171
-129
-45
-158
-125
-46
-168
-127
-42
-137
-110
-49
-83
-78
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-84
-85
-82
-255
-215
-190
-238
-205
-179
-84
-85
-82
-62
-63
-61
-145
-114
-49
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-161
-127
-40
-158
-125
-46
-88
-82
-59
-152
-119
-47
-161
-127
-40
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-152
-119
-47
-63
-69
-60
-137
-127
-115
-255
-215
-190
-255
-215
-190
-137
-127
-115
-48
-58
-59
-105
-93
-60
-171
-129
-45
-161
-127
-40
-158
-125
-46
-168
-127
-42
-168
-127
-42
-158
-125
-46
-152
-119
-47
-152
-119
-47
-168
-127
-42
-171
-129
-45
-158
-125
-46
-158
-125
-46
-171
-129
-45
-145
-114
-49
-62
-63
-61
-70
-79
-77
-227
-196
-175
-255
-215
-190
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-212
-120
-56
-214
-121
-50
-227
-126
-50
-224
-123
-55
-227
-126
-50
-234
-126
-45
-234
-126
-45
-234
-125
-52
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-76
-70
-64
-70
-79
-77
-234
-204
-183
-253
-212
-188
-251
-209
-178
-253
-212
-188
-187
-166
-150
-43
-57
-62
-95
-78
-64
-225
-124
-48
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-234
-126
-45
-234
-126
-45
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-214
-121
-50
-95
-78
-64
-48
-58
-59
-194
-173
-157
-253
-212
-188
-251
-209
-178
-251
-209
-178
-245
-212
-186
-91
-92
-89
-62
-63
-61
-188
-112
-56
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-234
-125
-52
-234
-126
-45
-227
-126
-50
-224
-123
-55
-234
-126
-45
-125
-90
-64
-146
-97
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-97
-98
-96
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-224
-123
-55
-212
-120
-56
-183
-110
-59
-214
-121
-50
-227
-126
-50
-224
-123
-55
-227
-126
-50
-227
-126
-50
-234
-126
-45
-95
-78
-64
-84
-85
-82
-91
-92
-89
-62
-63
-61
-188
-112
-56
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-234
-126
-45
-234
-126
-45
-227
-126
-50
-224
-123
-55
-227
-126
-50
-224
-123
-55
-209
-117
-53
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-249
-146
-83
-247
-130
-60
-247
-123
-41
-247
-123
-41
-247
-130
-53
-248
-138
-64
-249
-152
-92
-249
-174
-124
-209
-171
-139
-58
-69
-70
-81
-73
-62
-209
-117
-53
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-234
-125
-52
-234
-125
-52
-234
-125
-52
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-112
-85
-63
-41
-58
-57
-172
-150
-134
-255
-215
-190
-227
-196
-175
-63
-74
-74
-135
-94
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-194
-112
-58
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-238
-128
-40
-163
-104
-61
-55
-66
-67
-161
-144
-134
-58
-69
-70
-95
-78
-64
-225
-124
-48
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-234
-126
-45
-234
-126
-45
-234
-125
-52
-227
-126
-50
-234
-125
-52
-173
-106
-60
-118
-86
-65
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-146
-97
-64
-51
-62
-63
-252
-185
-144
-249
-159
-103
-247
-143
-74
-247
-130
-53
-246
-116
-28
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-249
-146
-83
-251
-168
-115
-251
-192
-154
-154
-133
-118
-24
-22
-23
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-108
-87
-46
-47
-40
-38
-158
-125
-46
-158
-125
-46
-158
-125
-46
-160
-120
-43
-156
-125
-62
-224
-207
-180
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-152
-147
-147
-35
-31
-30
-55
-48
-48
-154
-133
-118
-217
-187
-166
-253
-204
-176
-253
-204
-176
-253
-212
-188
-234
-204
-183
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-158
-125
-46
-168
-127
-42
-158
-125
-46
-123
-102
-54
-105
-93
-60
-111
-94
-57
-129
-106
-52
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-83
-78
-61
-58
-69
-70
-227
-196
-175
-255
-215
-190
-217
-187
-166
-58
-69
-70
-75
-74
-61
-168
-127
-42
-161
-127
-40
-158
-125
-46
-168
-127
-42
-152
-119
-47
-105
-93
-60
-69
-69
-61
-62
-63
-61
-62
-63
-61
-75
-74
-61
-117
-98
-55
-161
-127
-40
-161
-127
-40
-158
-125
-46
-171
-129
-45
-145
-114
-49
-56
-64
-60
-97
-98
-96
-245
-212
-186
-255
-215
-190
-227
-196
-175
-63
-74
-74
-75
-74
-61
-158
-125
-46
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-158
-125
-46
-129
-106
-52
-111
-94
-57
-105
-93
-60
-129
-106
-52
-158
-125
-46
-168
-127
-42
-161
-127
-40
-152
-119
-47
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-84
-85
-82
-255
-215
-190
-161
-144
-134
-48
-58
-59
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-117
-98
-55
-105
-93
-60
-117
-98
-55
-145
-114
-49
-171
-129
-45
-168
-127
-42
-152
-119
-47
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-255
-215
-190
-194
-173
-157
-48
-58
-59
-88
-82
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-152
-119
-47
-95
-87
-59
-69
-69
-61
-62
-63
-61
-62
-63
-61
-83
-78
-61
-123
-102
-54
-168
-127
-42
-161
-127
-40
-158
-125
-46
-171
-129
-45
-129
-106
-52
-51
-62
-63
-120
-114
-108
-255
-215
-190
-255
-215
-190
-161
-144
-134
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-227
-126
-50
-227
-126
-50
-188
-112
-56
-146
-97
-64
-135
-94
-64
-146
-97
-64
-199
-115
-54
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-173
-106
-60
-48
-58
-59
-146
-135
-124
-255
-215
-190
-255
-215
-190
-234
-204
-183
-77
-85
-81
-76
-70
-64
-214
-121
-50
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-214
-121
-50
-163
-104
-61
-135
-94
-64
-135
-94
-64
-163
-104
-61
-224
-123
-55
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-212
-120
-56
-76
-70
-64
-77
-85
-81
-238
-205
-179
-255
-215
-190
-255
-215
-190
-161
-144
-134
-48
-58
-59
-155
-100
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-199
-115
-54
-155
-100
-63
-135
-94
-64
-146
-97
-64
-188
-112
-56
-227
-126
-50
-227
-126
-50
-214
-121
-50
-209
-117
-53
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-125
-52
-227
-126
-50
-224
-123
-55
-227
-126
-50
-227
-126
-50
-199
-115
-54
-125
-90
-64
-51
-62
-63
-55
-66
-67
-41
-58
-57
-146
-97
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-209
-117
-53
-155
-100
-63
-135
-94
-64
-139
-96
-61
-183
-110
-59
-227
-126
-50
-227
-126
-50
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-249
-146
-83
-247
-130
-60
-247
-130
-53
-247
-130
-53
-247
-130
-60
-249
-146
-83
-247
-165
-111
-252
-185
-144
-101
-100
-92
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-173
-106
-60
-135
-94
-64
-135
-94
-64
-163
-104
-61
-214
-121
-50
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-81
-73
-62
-58
-69
-70
-227
-196
-175
-234
-204
-183
-63
-74
-74
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-224
-123
-55
-227
-126
-50
-234
-125
-52
-212
-120
-56
-155
-100
-63
-69
-69
-61
-76
-78
-76
-84
-85
-82
-65
-67
-64
-209
-117
-53
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-183
-110
-59
-139
-96
-61
-135
-94
-64
-155
-100
-63
-209
-117
-53
-234
-125
-52
-224
-123
-55
-212
-120
-56
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-251
-192
-154
-251
-168
-115
-249
-146
-83
-247
-130
-53
-247
-118
-39
-246
-109
-10
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-250
-176
-132
-232
-190
-161
-65
-58
-56
-59
-50
-39
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-47
-40
-38
-129
-106
-52
-168
-127
-42
-160
-120
-43
-158
-125
-46
-224
-207
-180
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-219
-212
-208
-62
-63
-61
-35
-31
-30
-91
-92
-89
-164
-158
-157
-186
-181
-179
-82
-69
-65
-176
-156
-141
-255
-215
-190
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-129
-106
-52
-65
-67
-64
-48
-58
-59
-55
-66
-67
-55
-66
-67
-48
-58
-59
-83
-78
-61
-145
-114
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-137
-110
-49
-51
-62
-63
-146
-135
-124
-255
-215
-190
-120
-114
-108
-56
-64
-60
-145
-114
-49
-171
-129
-45
-158
-125
-46
-168
-127
-42
-152
-119
-47
-69
-69
-61
-43
-57
-62
-109
-106
-99
-146
-135
-124
-137
-127
-115
-91
-92
-89
-43
-57
-62
-88
-82
-59
-158
-125
-46
-161
-127
-40
-158
-125
-46
-171
-129
-45
-117
-98
-55
-48
-58
-59
-172
-150
-134
-255
-215
-190
-146
-135
-124
-51
-62
-63
-137
-110
-49
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-75
-74
-61
-48
-58
-59
-55
-66
-67
-55
-66
-67
-48
-58
-59
-69
-69
-61
-137
-110
-49
-168
-127
-42
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-234
-204
-183
-70
-79
-77
-83
-78
-61
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-111
-94
-57
-56
-64
-60
-43
-57
-62
-58
-69
-70
-48
-58
-59
-56
-64
-60
-100
-89
-56
-158
-125
-46
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-111
-94
-57
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-137
-127
-115
-255
-215
-190
-97
-98
-96
-62
-63
-61
-152
-119
-47
-168
-127
-42
-158
-125
-46
-168
-127
-42
-137
-110
-49
-62
-63
-61
-51
-62
-63
-120
-114
-108
-146
-135
-124
-137
-127
-115
-84
-85
-82
-43
-57
-62
-95
-87
-59
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-100
-89
-56
-43
-57
-62
-194
-173
-157
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-118
-86
-65
-51
-62
-63
-43
-57
-62
-58
-69
-70
-41
-58
-57
-56
-64
-60
-146
-97
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-106
-82
-65
-63
-74
-74
-234
-204
-183
-255
-215
-190
-161
-144
-134
-48
-58
-59
-173
-106
-60
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-183
-110
-59
-76
-70
-64
-43
-57
-62
-55
-66
-67
-55
-66
-67
-48
-58
-59
-81
-73
-62
-183
-110
-59
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-126
-45
-163
-104
-61
-48
-58
-59
-161
-144
-134
-255
-215
-190
-234
-204
-183
-63
-74
-74
-95
-78
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-135
-94
-64
-62
-63
-61
-43
-57
-62
-58
-69
-70
-43
-57
-62
-51
-62
-63
-125
-90
-64
-225
-124
-48
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-97
-98
-96
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-125
-52
-227
-126
-50
-173
-106
-60
-95
-78
-64
-56
-64
-60
-51
-62
-63
-120
-114
-108
-70
-79
-77
-89
-75
-66
-225
-124
-48
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-163
-104
-61
-65
-67
-64
-41
-58
-57
-55
-66
-67
-51
-62
-63
-48
-58
-59
-106
-82
-65
-209
-117
-53
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-249
-146
-83
-248
-138
-64
-247
-130
-53
-247
-130
-60
-250
-139
-73
-246
-156
-93
-250
-176
-132
-186
-157
-134
-41
-58
-57
-146
-97
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-199
-115
-54
-89
-75
-66
-48
-58
-59
-51
-62
-63
-55
-66
-67
-43
-57
-62
-76
-70
-64
-173
-106
-60
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-137
-127
-115
-234
-204
-183
-63
-74
-74
-135
-94
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-199
-115
-54
-125
-90
-64
-69
-69
-61
-41
-58
-57
-97
-98
-96
-146
-135
-124
-51
-62
-63
-146
-97
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-214
-121
-50
-106
-82
-65
-48
-58
-59
-51
-62
-63
-55
-66
-67
-41
-58
-57
-65
-67
-64
-163
-104
-61
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-55
-66
-67
-250
-197
-158
-251
-168
-115
-247
-150
-84
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-246
-116
-28
-247
-130
-53
-247
-143
-74
-249
-159
-103
-252
-185
-144
-154
-133
-118
-24
-22
-23
-108
-87
-46
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-71
-60
-43
-85
-71
-43
-171
-129
-45
-160
-120
-43
-216
-194
-154
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-237
-233
-225
-65
-58
-56
-62
-63
-61
-219
-212
-208
-253
-255
-252
-237
-233
-225
-120
-114
-108
-35
-31
-30
-55
-48
-48
-227
-196
-175
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-129
-106
-52
-51
-62
-63
-84
-85
-82
-187
-166
-150
-227
-196
-175
-227
-196
-175
-161
-144
-134
-51
-62
-63
-69
-69
-61
-152
-119
-47
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-91
-92
-89
-217
-187
-166
-55
-66
-67
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-75
-74
-61
-58
-69
-70
-187
-166
-150
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-161
-144
-134
-43
-57
-62
-100
-89
-56
-171
-129
-45
-158
-125
-46
-158
-125
-46
-161
-127
-40
-75
-74
-61
-84
-85
-82
-234
-204
-183
-76
-78
-76
-88
-82
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-62
-63
-61
-63
-74
-74
-176
-156
-141
-227
-196
-175
-227
-196
-175
-176
-156
-141
-70
-79
-77
-62
-63
-61
-145
-114
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-97
-98
-96
-172
-150
-134
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-105
-93
-60
-43
-57
-62
-120
-114
-108
-207
-178
-158
-227
-196
-175
-217
-187
-166
-120
-114
-108
-41
-58
-57
-95
-87
-59
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-56
-64
-60
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-146
-135
-124
-207
-178
-158
-48
-58
-59
-111
-94
-57
-171
-129
-45
-158
-125
-46
-168
-127
-42
-152
-119
-47
-62
-63
-61
-70
-79
-77
-207
-178
-158
-255
-215
-190
-255
-215
-190
-255
-215
-190
-238
-205
-179
-137
-127
-115
-43
-57
-62
-117
-98
-55
-168
-127
-42
-158
-125
-46
-168
-127
-42
-152
-119
-47
-62
-63
-61
-109
-106
-99
-255
-215
-190
-161
-144
-134
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-106
-82
-65
-41
-58
-57
-137
-127
-115
-217
-187
-166
-227
-196
-175
-207
-178
-158
-109
-106
-99
-41
-58
-57
-146
-97
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-176
-156
-141
-245
-212
-186
-70
-79
-77
-95
-78
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-188
-112
-56
-56
-64
-60
-70
-79
-77
-176
-156
-141
-227
-196
-175
-227
-196
-175
-176
-156
-141
-63
-74
-74
-62
-63
-61
-194
-112
-58
-227
-126
-50
-224
-123
-55
-227
-126
-50
-227
-126
-50
-95
-78
-64
-77
-85
-81
-245
-212
-186
-172
-150
-134
-48
-58
-59
-173
-106
-60
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-135
-94
-64
-35
-56
-60
-120
-114
-108
-207
-178
-158
-227
-196
-175
-217
-187
-166
-133
-120
-107
-35
-56
-60
-118
-86
-65
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-95
-78
-64
-48
-58
-59
-70
-79
-77
-146
-135
-124
-217
-187
-166
-207
-178
-158
-51
-62
-63
-155
-100
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-163
-104
-61
-48
-58
-59
-91
-92
-89
-194
-173
-157
-227
-196
-175
-217
-187
-166
-146
-135
-124
-43
-57
-62
-89
-75
-66
-214
-121
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-247
-165
-111
-247
-150
-84
-248
-138
-64
-247
-130
-60
-248
-138
-64
-249
-146
-83
-247
-165
-111
-239
-182
-144
-91
-92
-89
-76
-70
-64
-224
-123
-55
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-76
-70
-64
-55
-66
-67
-172
-150
-134
-227
-196
-175
-227
-196
-175
-187
-166
-150
-77
-85
-81
-51
-62
-63
-173
-106
-60
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-118
-86
-65
-58
-69
-70
-217
-187
-166
-70
-79
-77
-135
-94
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-225
-124
-48
-125
-90
-64
-56
-64
-60
-55
-66
-67
-120
-114
-108
-187
-166
-150
-245
-212
-186
-120
-114
-108
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-227
-126
-50
-225
-124
-48
-95
-78
-64
-43
-57
-62
-146
-135
-124
-217
-187
-166
-227
-196
-175
-194
-173
-157
-91
-92
-89
-48
-58
-59
-163
-104
-61
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-197
-158
-249
-174
-124
-247
-150
-84
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-249
-146
-83
-251
-168
-115
-239
-182
-144
-65
-58
-56
-59
-50
-39
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-108
-87
-46
-47
-40
-38
-152
-119
-47
-170
-137
-67
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-174
-168
-167
-24
-22
-23
-109
-106
-99
-152
-147
-147
-97
-98
-96
-47
-40
-38
-24
-22
-23
-35
-31
-30
-35
-31
-30
-176
-156
-141
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-69
-69
-61
-76
-78
-76
-227
-196
-175
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-187
-166
-150
-51
-62
-63
-95
-87
-59
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-117
-98
-55
-55
-66
-67
-109
-106
-99
-48
-58
-59
-137
-110
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-117
-98
-55
-48
-58
-59
-187
-166
-150
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-137
-127
-115
-51
-62
-63
-145
-114
-49
-168
-127
-42
-158
-125
-46
-171
-129
-45
-117
-98
-55
-55
-66
-67
-137
-127
-115
-55
-66
-67
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-55
-66
-67
-207
-178
-158
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-217
-187
-166
-58
-69
-70
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-91
-92
-89
-109
-106
-99
-69
-69
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-120
-114
-108
-245
-212
-186
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-137
-127
-115
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-146
-135
-124
-146
-135
-124
-62
-63
-61
-152
-119
-47
-168
-127
-42
-158
-125
-46
-168
-127
-42
-100
-89
-56
-51
-62
-63
-207
-178
-158
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-109
-106
-99
-63
-69
-60
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-100
-89
-56
-51
-62
-63
-227
-196
-175
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-155
-100
-63
-41
-58
-57
-146
-135
-124
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-109
-106
-99
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-224
-123
-55
-76
-70
-64
-109
-106
-99
-194
-173
-157
-43
-57
-62
-163
-104
-61
-234
-125
-52
-224
-123
-55
-224
-123
-55
-225
-124
-48
-89
-75
-66
-63
-74
-74
-217
-187
-166
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-217
-187
-166
-58
-69
-70
-95
-78
-64
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-155
-100
-63
-43
-57
-62
-207
-178
-158
-109
-106
-99
-76
-70
-64
-224
-123
-55
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-51
-62
-63
-120
-114
-108
-253
-212
-188
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-137
-127
-115
-48
-58
-59
-173
-106
-60
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-188
-112
-56
-62
-63
-61
-58
-69
-70
-161
-144
-134
-234
-204
-183
-255
-215
-190
-255
-215
-190
-137
-127
-115
-62
-63
-61
-209
-117
-53
-227
-126
-50
-224
-123
-55
-227
-126
-50
-212
-120
-56
-69
-69
-61
-77
-85
-81
-234
-204
-183
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-176
-156
-141
-35
-56
-60
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-251
-168
-115
-247
-150
-84
-250
-139
-73
-248
-138
-64
-250
-139
-73
-249
-152
-92
-249
-174
-124
-209
-171
-139
-43
-57
-62
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-112
-85
-63
-51
-62
-63
-194
-173
-157
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-227
-196
-175
-70
-79
-77
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-48
-58
-59
-146
-135
-124
-77
-85
-81
-135
-94
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-214
-121
-50
-95
-78
-64
-35
-56
-60
-120
-114
-108
-217
-187
-166
-255
-215
-190
-255
-215
-190
-227
-196
-175
-58
-69
-70
-125
-90
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-41
-58
-57
-172
-150
-134
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-234
-204
-183
-77
-85
-81
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-51
-62
-63
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-178
-146
-122
-24
-22
-23
-101
-83
-47
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-152
-119
-47
-47
-40
-38
-123
-102
-54
-209
-171
-139
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-164
-158
-157
-24
-22
-23
-24
-22
-23
-24
-22
-23
-24
-22
-23
-24
-22
-23
-35
-31
-30
-35
-31
-30
-47
-40
-38
-194
-173
-157
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-129
-106
-52
-48
-58
-59
-176
-156
-141
-255
-215
-190
-255
-215
-190
-253
-212
-188
-255
-215
-190
-255
-215
-190
-255
-215
-190
-120
-114
-108
-56
-64
-60
-152
-119
-47
-161
-127
-40
-158
-125
-46
-168
-127
-42
-137
-110
-49
-51
-62
-63
-48
-58
-59
-75
-74
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-63
-74
-74
-194
-173
-157
-207
-178
-158
-207
-178
-158
-207
-178
-158
-207
-178
-158
-207
-178
-158
-207
-178
-158
-172
-150
-134
-48
-58
-59
-111
-94
-57
-171
-129
-45
-158
-125
-46
-168
-127
-42
-152
-119
-47
-56
-64
-60
-51
-62
-63
-56
-64
-60
-152
-119
-47
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-146
-135
-124
-255
-215
-190
-255
-215
-190
-253
-212
-188
-253
-212
-188
-255
-215
-190
-255
-215
-190
-146
-135
-124
-51
-62
-63
-145
-114
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-70
-79
-77
-63
-74
-74
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-171
-129
-45
-95
-87
-59
-55
-66
-67
-227
-196
-175
-255
-215
-190
-255
-215
-190
-253
-212
-188
-255
-215
-190
-255
-215
-190
-234
-204
-183
-70
-79
-77
-88
-82
-59
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-56
-64
-60
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-97
-98
-96
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-69
-69
-61
-84
-85
-82
-207
-178
-158
-207
-178
-158
-207
-178
-158
-207
-178
-158
-207
-178
-158
-207
-178
-158
-217
-187
-166
-146
-135
-124
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-168
-127
-42
-129
-106
-52
-51
-62
-63
-187
-166
-150
-176
-156
-141
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-89
-75
-66
-70
-79
-77
-245
-212
-186
-255
-215
-190
-255
-215
-190
-253
-212
-188
-255
-215
-190
-255
-215
-190
-217
-187
-166
-43
-57
-62
-125
-90
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-106
-82
-65
-77
-85
-81
-133
-120
-107
-62
-63
-61
-209
-117
-53
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-48
-58
-59
-161
-144
-134
-255
-215
-190
-255
-215
-190
-253
-212
-188
-253
-212
-188
-255
-215
-190
-255
-215
-190
-146
-135
-124
-48
-58
-59
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-62
-63
-61
-133
-120
-107
-77
-85
-81
-118
-86
-65
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-125
-90
-64
-55
-66
-67
-227
-196
-175
-255
-215
-190
-255
-215
-190
-253
-212
-188
-255
-215
-190
-255
-215
-190
-234
-204
-183
-63
-74
-74
-106
-82
-65
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-97
-98
-96
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-224
-123
-55
-89
-75
-66
-63
-74
-74
-217
-187
-166
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-91
-92
-89
-95
-78
-64
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-146
-97
-64
-43
-57
-62
-187
-166
-150
-255
-215
-190
-255
-215
-190
-253
-212
-188
-255
-215
-190
-255
-215
-190
-255
-215
-190
-101
-100
-92
-76
-70
-64
-224
-123
-55
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-251
-168
-115
-247
-150
-84
-250
-139
-73
-250
-139
-73
-247
-143
-74
-249
-159
-103
-250
-176
-132
-154
-133
-118
-51
-62
-63
-183
-110
-59
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-62
-63
-61
-133
-120
-107
-255
-215
-190
-255
-215
-190
-253
-212
-188
-253
-212
-188
-255
-215
-190
-255
-215
-190
-176
-156
-141
-43
-57
-62
-163
-104
-61
-234
-125
-52
-224
-123
-55
-227
-126
-50
-214
-121
-50
-76
-70
-64
-91
-92
-89
-70
-79
-77
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-146
-97
-64
-35
-56
-60
-161
-144
-134
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-194
-173
-157
-48
-58
-59
-163
-104
-61
-234
-126
-45
-224
-123
-55
-227
-126
-50
-214
-121
-50
-76
-70
-64
-97
-98
-96
-255
-215
-190
-255
-215
-190
-255
-215
-190
-253
-212
-188
-255
-215
-190
-255
-215
-190
-187
-166
-150
-43
-57
-62
-163
-104
-61
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-159
-103
-248
-180
-134
-124
-111
-99
-35
-31
-30
-137
-110
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-59
-50
-39
-85
-71
-43
-216
-194
-154
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-207
-202
-200
-47
-40
-38
-24
-22
-23
-35
-31
-30
-35
-31
-30
-35
-31
-30
-35
-31
-30
-24
-22
-23
-65
-58
-56
-238
-205
-179
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-100
-89
-56
-63
-74
-74
-227
-196
-175
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-251
-209
-178
-255
-215
-190
-194
-173
-157
-48
-58
-59
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-43
-57
-62
-95
-87
-59
-168
-127
-42
-158
-125
-46
-161
-127
-40
-158
-125
-46
-63
-69
-60
-43
-57
-62
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-43
-57
-62
-88
-82
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-75
-74
-61
-43
-57
-62
-75
-74
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-117
-98
-55
-51
-62
-63
-217
-187
-166
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-204
-176
-255
-215
-190
-217
-187
-166
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-48
-58
-59
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-69
-69
-61
-109
-106
-99
-255
-215
-190
-253
-212
-188
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-212
-188
-255
-215
-190
-120
-114
-108
-63
-69
-60
-158
-125
-46
-161
-127
-40
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-120
-114
-108
-70
-79
-77
-105
-93
-60
-171
-129
-45
-158
-125
-46
-168
-127
-42
-152
-119
-47
-56
-64
-60
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-51
-62
-63
-43
-57
-62
-111
-94
-57
-171
-129
-45
-158
-125
-46
-161
-127
-40
-152
-119
-47
-62
-63
-61
-146
-135
-124
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-62
-63
-61
-146
-135
-124
-255
-215
-190
-253
-212
-188
-250
-200
-166
-250
-200
-166
-253
-204
-176
-253
-212
-188
-253
-212
-188
-97
-98
-96
-89
-75
-66
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-139
-96
-61
-51
-62
-63
-63
-74
-74
-89
-75
-66
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-125
-52
-135
-94
-64
-55
-66
-67
-217
-187
-166
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-204
-176
-255
-215
-190
-217
-187
-166
-51
-62
-63
-139
-96
-61
-234
-126
-45
-224
-123
-55
-227
-126
-50
-225
-124
-48
-81
-73
-62
-58
-69
-70
-51
-62
-63
-146
-97
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-224
-123
-55
-81
-73
-62
-109
-106
-99
-255
-215
-190
-253
-212
-188
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-212
-188
-255
-215
-190
-120
-114
-108
-69
-69
-61
-212
-120
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-234
-125
-52
-224
-123
-55
-227
-126
-50
-194
-112
-58
-51
-62
-63
-146
-135
-124
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-234
-204
-183
-70
-79
-77
-118
-86
-65
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-106
-82
-65
-77
-85
-81
-245
-212
-186
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-251
-209
-178
-255
-215
-190
-176
-156
-141
-56
-64
-60
-188
-112
-56
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-251
-168
-115
-249
-152
-92
-247
-143
-74
-247
-143
-74
-247
-150
-84
-249
-159
-103
-248
-180
-134
-120
-114
-108
-69
-69
-61
-212
-120
-56
-227
-126
-50
-224
-123
-55
-234
-125
-52
-155
-100
-63
-43
-57
-62
-194
-173
-157
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-204
-176
-255
-215
-190
-234
-204
-183
-63
-74
-74
-112
-85
-63
-234
-125
-52
-227
-126
-50
-224
-123
-55
-234
-125
-52
-106
-82
-65
-58
-69
-70
-55
-66
-67
-135
-94
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-95
-78
-64
-77
-85
-81
-245
-212
-186
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-48
-58
-59
-172
-150
-134
-255
-215
-190
-251
-209
-178
-250
-200
-166
-250
-200
-166
-253
-204
-176
-255
-215
-190
-245
-212
-186
-63
-74
-74
-112
-85
-63
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-250
-139
-73
-249
-159
-103
-252
-185
-144
-82
-69
-65
-47
-40
-38
-158
-125
-46
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-85
-71
-43
-59
-50
-39
-216
-194
-154
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-164
-158
-157
-47
-40
-38
-24
-22
-23
-24
-22
-23
-24
-22
-23
-35
-31
-30
-65
-67
-64
-65
-58
-56
-227
-196
-175
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-84
-85
-82
-255
-215
-190
-251
-209
-178
-250
-197
-158
-251
-192
-154
-251
-192
-154
-250
-200
-166
-253
-212
-188
-227
-196
-175
-58
-69
-70
-105
-93
-60
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-75
-74
-61
-41
-58
-57
-111
-94
-57
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-137
-110
-49
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-41
-58
-57
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-95
-87
-59
-70
-79
-77
-245
-212
-186
-253
-212
-188
-250
-200
-166
-251
-192
-154
-251
-192
-154
-250
-200
-166
-253
-212
-188
-238
-205
-179
-70
-79
-77
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-48
-58
-59
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-168
-127
-42
-152
-119
-47
-56
-64
-60
-146
-135
-124
-255
-215
-190
-253
-204
-176
-250
-197
-158
-251
-192
-154
-251
-192
-154
-253
-204
-176
-255
-215
-190
-172
-150
-134
-51
-62
-63
-145
-114
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-97
-98
-96
-55
-66
-67
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-123
-102
-54
-117
-98
-55
-145
-114
-49
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-69
-69
-61
-137
-127
-115
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-183
-110
-59
-51
-62
-63
-187
-166
-150
-255
-215
-190
-253
-204
-176
-251
-192
-154
-251
-192
-154
-250
-197
-158
-253
-204
-176
-255
-215
-190
-137
-127
-115
-65
-67
-64
-209
-117
-53
-227
-126
-50
-224
-123
-55
-234
-125
-52
-163
-104
-61
-43
-57
-62
-41
-58
-57
-106
-82
-65
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-106
-82
-65
-77
-85
-81
-245
-212
-186
-251
-209
-178
-250
-197
-158
-249
-189
-146
-251
-192
-154
-250
-197
-158
-251
-209
-178
-238
-205
-179
-77
-85
-81
-112
-85
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-106
-82
-65
-41
-58
-57
-48
-58
-59
-163
-104
-61
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-62
-63
-61
-146
-135
-124
-255
-215
-190
-253
-204
-176
-250
-197
-158
-251
-192
-154
-251
-192
-154
-253
-204
-176
-255
-215
-190
-176
-156
-141
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-234
-125
-52
-224
-123
-55
-227
-126
-50
-183
-110
-59
-48
-58
-59
-176
-156
-141
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-227
-196
-175
-58
-69
-70
-139
-96
-61
-234
-125
-52
-224
-123
-55
-227
-126
-50
-214
-121
-50
-76
-70
-64
-120
-114
-108
-255
-215
-190
-253
-204
-176
-250
-197
-158
-251
-192
-154
-251
-192
-154
-250
-200
-166
-255
-215
-190
-207
-178
-158
-48
-58
-59
-163
-104
-61
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-192
-154
-249
-174
-124
-246
-156
-93
-247
-150
-84
-249
-146
-83
-249
-152
-92
-251
-168
-115
-249
-189
-146
-97
-98
-96
-89
-75
-66
-225
-124
-48
-227
-126
-50
-224
-123
-55
-234
-126
-45
-125
-90
-64
-58
-69
-70
-227
-196
-175
-253
-212
-188
-250
-200
-166
-251
-192
-154
-249
-189
-146
-250
-197
-158
-251
-209
-178
-255
-215
-190
-97
-98
-96
-89
-75
-66
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-125
-90
-64
-43
-57
-62
-43
-57
-62
-135
-94
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-137
-127
-115
-69
-69
-61
-212
-120
-56
-227
-126
-50
-224
-123
-55
-234
-126
-45
-155
-100
-63
-43
-57
-62
-207
-178
-158
-255
-215
-190
-250
-200
-166
-251
-192
-154
-251
-192
-154
-250
-197
-158
-251
-209
-178
-255
-215
-190
-109
-106
-99
-89
-75
-66
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-247
-143
-74
-249
-159
-103
-252
-185
-144
-55
-48
-48
-59
-50
-39
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-156
-125
-62
-101
-83
-47
-59
-50
-39
-209
-171
-139
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-219
-212
-208
-137
-127
-115
-101
-100
-92
-120
-114
-108
-186
-181
-179
-152
-147
-147
-55
-48
-48
-227
-196
-175
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-97
-98
-96
-255
-215
-190
-253
-204
-176
-251
-192
-154
-249
-189
-146
-249
-189
-146
-250
-197
-158
-251
-209
-178
-234
-204
-183
-70
-79
-77
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-161
-127
-40
-75
-74
-61
-41
-58
-57
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-75
-74
-61
-41
-58
-57
-88
-82
-59
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-88
-82
-59
-77
-85
-81
-245
-212
-186
-251
-209
-178
-250
-197
-158
-249
-189
-146
-249
-189
-146
-250
-197
-158
-251
-209
-178
-245
-212
-186
-84
-85
-82
-88
-82
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-43
-57
-62
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-56
-64
-60
-161
-144
-134
-255
-215
-190
-250
-200
-166
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-255
-215
-190
-187
-166
-150
-51
-62
-63
-137
-110
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-65
-67
-64
-91
-92
-89
-55
-66
-67
-129
-106
-52
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-158
-125
-46
-63
-69
-60
-137
-127
-115
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-173
-106
-60
-48
-58
-59
-187
-166
-150
-255
-215
-190
-250
-200
-166
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-41
-58
-57
-118
-86
-65
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-95
-78
-64
-91
-92
-89
-255
-215
-190
-253
-204
-176
-251
-192
-154
-252
-185
-144
-252
-185
-144
-251
-192
-154
-253
-204
-176
-245
-212
-186
-91
-92
-89
-106
-82
-65
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-112
-85
-63
-41
-58
-57
-48
-58
-59
-173
-106
-60
-234
-125
-52
-224
-123
-55
-227
-126
-50
-199
-115
-54
-56
-64
-60
-161
-144
-134
-255
-215
-190
-250
-200
-166
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-255
-215
-190
-187
-166
-150
-48
-58
-59
-183
-110
-59
-234
-125
-52
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-176
-156
-141
-255
-215
-190
-253
-212
-188
-251
-209
-178
-253
-212
-188
-217
-187
-166
-55
-66
-67
-146
-97
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-214
-121
-50
-69
-69
-61
-137
-127
-115
-255
-215
-190
-253
-204
-176
-251
-192
-154
-249
-189
-146
-249
-189
-146
-250
-200
-166
-253
-212
-188
-217
-187
-166
-51
-62
-63
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-250
-197
-158
-249
-174
-124
-249
-159
-103
-249
-152
-92
-249
-152
-92
-249
-159
-103
-249
-174
-124
-250
-197
-158
-91
-92
-89
-95
-78
-64
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-125
-52
-125
-90
-64
-70
-79
-77
-234
-204
-183
-251
-209
-178
-250
-197
-158
-249
-189
-146
-252
-185
-144
-251
-192
-154
-253
-204
-176
-255
-215
-190
-120
-114
-108
-81
-73
-62
-224
-123
-55
-227
-126
-50
-224
-123
-55
-234
-126
-45
-135
-94
-64
-41
-58
-57
-41
-58
-57
-135
-94
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-253
-212
-188
-253
-212
-188
-251
-209
-178
-251
-209
-178
-255
-215
-190
-137
-127
-115
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-234
-125
-52
-146
-97
-64
-51
-62
-63
-227
-196
-175
-253
-212
-188
-250
-197
-158
-249
-189
-146
-249
-189
-146
-251
-192
-154
-253
-204
-176
-255
-215
-190
-120
-114
-108
-81
-73
-62
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-139
-96
-61
-51
-62
-63
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-250
-139
-73
-249
-159
-103
-252
-185
-144
-55
-48
-48
-59
-50
-39
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-154
-125
-71
-170
-137
-67
-108
-87
-46
-59
-50
-39
-192
-155
-91
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-186
-181
-179
-47
-40
-38
-65
-58
-56
-245
-212
-186
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-84
-85
-82
-253
-212
-188
-251
-209
-178
-250
-197
-158
-251
-192
-154
-251
-192
-154
-250
-200
-166
-253
-212
-188
-234
-204
-183
-63
-74
-74
-100
-89
-56
-171
-129
-45
-158
-125
-46
-158
-125
-46
-161
-127
-40
-75
-74
-61
-41
-58
-57
-111
-94
-57
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-111
-94
-57
-56
-64
-60
-43
-57
-62
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-95
-87
-59
-70
-79
-77
-245
-212
-186
-251
-209
-178
-250
-197
-158
-251
-192
-154
-251
-192
-154
-250
-197
-158
-251
-209
-178
-245
-212
-186
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-43
-57
-62
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-158
-125
-46
-152
-119
-47
-56
-64
-60
-161
-144
-134
-255
-215
-190
-253
-204
-176
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-255
-215
-190
-176
-156
-141
-51
-62
-63
-137
-110
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-91
-92
-89
-55
-66
-67
-123
-102
-54
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-145
-114
-49
-100
-89
-56
-48
-58
-59
-187
-166
-150
-176
-156
-141
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-176
-156
-141
-255
-215
-190
-250
-200
-166
-251
-192
-154
-251
-192
-154
-250
-197
-158
-253
-204
-176
-255
-215
-190
-146
-135
-124
-62
-63
-61
-209
-117
-53
-227
-126
-50
-224
-123
-55
-234
-125
-52
-163
-104
-61
-48
-58
-59
-41
-58
-57
-112
-85
-63
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-106
-82
-65
-84
-85
-82
-255
-215
-190
-251
-209
-178
-250
-197
-158
-249
-189
-146
-249
-189
-146
-250
-197
-158
-251
-209
-178
-238
-205
-179
-84
-85
-82
-106
-82
-65
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-106
-82
-65
-41
-58
-57
-48
-58
-59
-173
-106
-60
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-62
-63
-61
-146
-135
-124
-255
-215
-190
-253
-204
-176
-251
-192
-154
-249
-189
-146
-251
-192
-154
-250
-200
-166
-255
-215
-190
-176
-156
-141
-51
-62
-63
-183
-110
-59
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-176
-156
-141
-253
-212
-188
-253
-204
-176
-250
-200
-166
-253
-204
-176
-217
-187
-166
-55
-66
-67
-146
-97
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-214
-121
-50
-76
-70
-64
-120
-114
-108
-255
-215
-190
-253
-204
-176
-250
-197
-158
-251
-192
-154
-251
-192
-154
-250
-200
-166
-253
-212
-188
-207
-178
-158
-48
-58
-59
-163
-104
-61
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-250
-200
-166
-248
-180
-134
-251
-168
-115
-247
-165
-111
-247
-165
-111
-251
-168
-115
-248
-180
-134
-250
-200
-166
-91
-92
-89
-89
-75
-66
-225
-124
-48
-227
-126
-50
-224
-123
-55
-234
-126
-45
-125
-90
-64
-63
-74
-74
-227
-196
-175
-251
-209
-178
-250
-197
-158
-249
-189
-146
-249
-189
-146
-250
-197
-158
-253
-204
-176
-255
-215
-190
-109
-106
-99
-89
-75
-66
-225
-124
-48
-227
-126
-50
-224
-123
-55
-234
-125
-52
-125
-90
-64
-43
-57
-62
-41
-58
-57
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-253
-212
-188
-253
-204
-176
-250
-200
-166
-250
-200
-166
-251
-209
-178
-137
-127
-115
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-234
-125
-52
-155
-100
-63
-43
-57
-62
-217
-187
-166
-253
-212
-188
-250
-200
-166
-251
-192
-154
-249
-189
-146
-250
-197
-158
-253
-204
-176
-255
-215
-190
-120
-114
-108
-81
-73
-62
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-250
-139
-73
-249
-159
-103
-248
-180
-134
-76
-70
-64
-47
-40
-38
-152
-119
-47
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-156
-125
-62
-154
-125
-71
-170
-137
-67
-101
-83
-47
-59
-50
-39
-170
-137
-67
-255
-238
-227
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-152
-147
-147
-35
-31
-30
-24
-22
-23
-115
-102
-92
-255
-215
-190
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-171
-129
-45
-105
-93
-60
-58
-69
-70
-227
-196
-175
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-204
-176
-255
-215
-190
-207
-178
-158
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-69
-69
-61
-43
-57
-62
-100
-89
-56
-171
-129
-45
-158
-125
-46
-161
-127
-40
-158
-125
-46
-75
-74
-61
-48
-58
-59
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-48
-58
-59
-101
-100
-92
-91
-92
-89
-75
-74
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-111
-94
-57
-55
-66
-67
-227
-196
-175
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-204
-176
-255
-215
-190
-227
-196
-175
-51
-62
-63
-105
-93
-60
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-48
-58
-59
-48
-58
-59
-123
-102
-54
-168
-127
-42
-158
-125
-46
-161
-127
-40
-158
-125
-46
-69
-69
-61
-120
-114
-108
-255
-215
-190
-251
-209
-178
-250
-200
-166
-250
-197
-158
-250
-200
-166
-251
-209
-178
-255
-215
-190
-146
-135
-124
-56
-64
-60
-152
-119
-47
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-109
-106
-99
-63
-74
-74
-111
-94
-57
-171
-129
-45
-158
-125
-46
-161
-127
-40
-152
-119
-47
-69
-69
-61
-51
-62
-63
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-56
-64
-60
-51
-62
-63
-48
-58
-59
-120
-114
-108
-245
-212
-186
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-62
-63
-61
-137
-127
-115
-255
-215
-190
-251
-209
-178
-250
-200
-166
-250
-200
-166
-250
-200
-166
-253
-212
-188
-255
-215
-190
-109
-106
-99
-81
-73
-62
-224
-123
-55
-227
-126
-50
-224
-123
-55
-234
-125
-52
-155
-100
-63
-48
-58
-59
-43
-57
-62
-95
-78
-64
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-125
-90
-64
-63
-74
-74
-227
-196
-175
-253
-212
-188
-250
-200
-166
-250
-197
-158
-250
-197
-158
-253
-204
-176
-255
-215
-190
-227
-196
-175
-55
-66
-67
-125
-90
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-89
-75
-66
-48
-58
-59
-48
-58
-59
-155
-100
-63
-234
-126
-45
-224
-123
-55
-227
-126
-50
-214
-121
-50
-76
-70
-64
-120
-114
-108
-255
-215
-190
-251
-209
-178
-250
-200
-166
-250
-197
-158
-250
-200
-166
-251
-209
-178
-255
-215
-190
-137
-127
-115
-62
-63
-61
-209
-117
-53
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-97
-98
-96
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-48
-58
-59
-176
-156
-141
-251
-209
-178
-250
-200
-166
-250
-197
-158
-250
-200
-166
-227
-196
-175
-63
-74
-74
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-95
-78
-64
-91
-92
-89
-253
-212
-188
-253
-212
-188
-250
-200
-166
-250
-200
-166
-250
-200
-166
-251
-209
-178
-255
-215
-190
-172
-150
-134
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-251
-209
-178
-251
-192
-154
-250
-176
-132
-249
-174
-124
-249
-174
-124
-248
-180
-134
-251
-192
-154
-251
-209
-178
-109
-106
-99
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-146
-97
-64
-43
-57
-62
-217
-187
-166
-255
-215
-190
-253
-204
-176
-250
-197
-158
-250
-197
-158
-250
-200
-166
-253
-212
-188
-245
-212
-186
-70
-79
-77
-106
-82
-65
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-112
-85
-63
-51
-62
-63
-51
-62
-63
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-245
-212
-186
-250
-200
-166
-251
-192
-154
-250
-197
-158
-253
-204
-176
-146
-135
-124
-65
-67
-64
-209
-117
-53
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-187
-166
-150
-255
-215
-190
-253
-204
-176
-250
-200
-166
-250
-197
-158
-250
-200
-166
-253
-212
-188
-255
-215
-190
-84
-85
-82
-95
-78
-64
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-109
-10
-247
-111
-26
-247
-123
-41
-248
-138
-64
-249
-152
-92
-249
-174
-124
-121
-100
-85
-35
-31
-30
-108
-87
-46
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-156
-125
-62
-154
-125
-71
-154
-125
-71
-171
-129
-45
-85
-71
-43
-71
-60
-43
-171
-129
-45
-224
-207
-180
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-237
-233
-225
-174
-168
-167
-81
-77
-76
-24
-22
-23
-35
-31
-30
-35
-31
-30
-187
-166
-150
-255
-215
-190
-255
-215
-190
-234
-204
-183
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-129
-106
-52
-51
-62
-63
-176
-156
-141
-255
-215
-190
-255
-215
-190
-253
-212
-188
-253
-212
-188
-255
-215
-190
-255
-215
-190
-146
-135
-124
-51
-62
-63
-145
-114
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-152
-119
-47
-56
-64
-60
-43
-57
-62
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-48
-58
-59
-146
-135
-124
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-172
-150
-134
-172
-150
-134
-146
-135
-124
-146
-135
-124
-194
-173
-157
-245
-212
-186
-137
-127
-115
-63
-69
-60
-158
-125
-46
-161
-127
-40
-158
-125
-46
-168
-127
-42
-137
-110
-49
-51
-62
-63
-161
-144
-134
-255
-215
-190
-255
-215
-190
-253
-212
-188
-253
-212
-188
-255
-215
-190
-255
-215
-190
-161
-144
-134
-48
-58
-59
-137
-110
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-55
-66
-67
-51
-62
-63
-105
-93
-60
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-70
-79
-77
-245
-212
-186
-255
-215
-190
-253
-212
-188
-251
-209
-178
-253
-212
-188
-255
-215
-190
-255
-215
-190
-91
-92
-89
-75
-74
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-133
-120
-107
-84
-85
-82
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-75
-74
-61
-55
-66
-67
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-161
-144
-134
-172
-150
-134
-172
-150
-134
-137
-127
-115
-146
-135
-124
-207
-178
-158
-245
-212
-186
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-76
-78
-76
-245
-212
-186
-255
-215
-190
-253
-212
-188
-253
-212
-188
-253
-212
-188
-255
-215
-190
-227
-196
-175
-58
-69
-70
-118
-86
-65
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-125
-90
-64
-63
-74
-74
-97
-98
-96
-76
-70
-64
-214
-121
-50
-227
-126
-50
-224
-123
-55
-234
-125
-52
-163
-104
-61
-48
-58
-59
-187
-166
-150
-255
-215
-190
-255
-215
-190
-251
-209
-178
-251
-209
-178
-255
-215
-190
-255
-215
-190
-176
-156
-141
-48
-58
-59
-173
-106
-60
-227
-126
-50
-224
-123
-55
-227
-126
-50
-212
-120
-56
-69
-69
-61
-101
-100
-92
-63
-74
-74
-125
-90
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-106
-82
-65
-63
-74
-74
-234
-204
-183
-255
-215
-190
-253
-212
-188
-253
-212
-188
-253
-212
-188
-255
-215
-190
-245
-212
-186
-70
-79
-77
-89
-75
-66
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-234
-125
-52
-183
-110
-59
-51
-62
-63
-176
-156
-141
-253
-204
-176
-251
-192
-154
-251
-192
-154
-251
-192
-154
-250
-200
-166
-77
-85
-81
-106
-82
-65
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-135
-94
-64
-51
-62
-63
-217
-187
-166
-255
-215
-190
-255
-215
-190
-253
-212
-188
-253
-212
-188
-255
-215
-190
-255
-215
-190
-109
-106
-99
-76
-70
-64
-224
-123
-55
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-255
-215
-190
-250
-200
-166
-251
-192
-154
-252
-185
-144
-252
-185
-144
-251
-192
-154
-250
-200
-166
-255
-215
-190
-146
-135
-124
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-51
-62
-63
-146
-135
-124
-255
-215
-190
-255
-215
-190
-251
-209
-178
-251
-209
-178
-253
-212
-188
-255
-215
-190
-194
-173
-157
-43
-57
-62
-146
-97
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-77
-85
-81
-63
-74
-74
-135
-94
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-251
-209
-178
-250
-197
-158
-249
-189
-146
-249
-189
-146
-250
-200
-166
-172
-150
-134
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-120
-114
-108
-255
-215
-190
-255
-215
-190
-253
-212
-188
-251
-209
-178
-253
-212
-188
-255
-215
-190
-217
-187
-166
-51
-62
-63
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-60
-247
-150
-84
-251
-168
-115
-187
-140
-108
-24
-22
-23
-59
-50
-39
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-156
-125
-62
-154
-125
-71
-154
-125
-71
-154
-125
-71
-156
-125
-62
-158
-125
-46
-47
-40
-38
-108
-87
-46
-158
-125
-46
-195
-167
-113
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-219
-212
-208
-164
-158
-157
-109
-106
-99
-65
-58
-56
-24
-22
-23
-24
-22
-23
-94
-60
-47
-178
-86
-46
-59
-50
-39
-150
-125
-114
-255
-215
-190
-255
-215
-190
-234
-204
-183
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-69
-69
-61
-84
-85
-82
-234
-204
-183
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-217
-187
-166
-55
-66
-67
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-123
-102
-54
-51
-62
-63
-76
-78
-76
-56
-64
-60
-152
-119
-47
-168
-127
-42
-158
-125
-46
-168
-127
-42
-129
-106
-52
-48
-58
-59
-161
-144
-134
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-217
-187
-166
-133
-120
-107
-77
-85
-81
-77
-85
-81
-146
-135
-124
-245
-212
-186
-176
-156
-141
-51
-62
-63
-137
-110
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-75
-74
-61
-63
-74
-74
-227
-196
-175
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-234
-204
-183
-76
-78
-76
-75
-74
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-77
-85
-81
-77
-85
-81
-88
-82
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-129
-106
-52
-48
-58
-59
-146
-135
-124
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-172
-150
-134
-48
-58
-59
-117
-98
-55
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-146
-135
-124
-120
-114
-108
-69
-69
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-111
-94
-57
-51
-62
-63
-176
-156
-141
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-194
-173
-157
-120
-114
-108
-70
-79
-77
-84
-85
-82
-161
-144
-134
-255
-215
-190
-255
-215
-190
-161
-144
-134
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-155
-100
-63
-41
-58
-57
-161
-144
-134
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-137
-127
-115
-48
-58
-59
-183
-110
-59
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-89
-75
-66
-97
-98
-96
-172
-150
-134
-48
-58
-59
-183
-110
-59
-227
-126
-50
-224
-123
-55
-227
-126
-50
-214
-121
-50
-76
-70
-64
-84
-85
-82
-234
-204
-183
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-234
-204
-183
-77
-85
-81
-81
-73
-62
-224
-123
-55
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-176
-156
-141
-97
-98
-96
-95
-78
-64
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-146
-135
-124
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-161
-144
-134
-41
-58
-57
-155
-100
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-176
-156
-141
-250
-200
-166
-249
-189
-146
-252
-185
-144
-249
-189
-146
-250
-200
-166
-120
-114
-108
-69
-69
-61
-214
-121
-50
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-62
-63
-61
-101
-100
-92
-245
-212
-186
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-187
-166
-150
-43
-57
-62
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-255
-215
-190
-253
-212
-188
-253
-204
-176
-250
-200
-166
-250
-200
-166
-253
-204
-176
-253
-212
-188
-255
-215
-190
-187
-166
-150
-41
-58
-57
-155
-100
-63
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-95
-78
-64
-58
-69
-70
-227
-196
-175
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-91
-92
-89
-62
-63
-61
-209
-117
-53
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-62
-63
-61
-133
-120
-107
-77
-85
-81
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-253
-204
-176
-251
-192
-154
-252
-185
-144
-252
-185
-144
-251
-192
-154
-212
-173
-150
-48
-58
-59
-155
-100
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-118
-86
-65
-51
-62
-63
-207
-178
-158
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-109
-106
-99
-56
-64
-60
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-247
-111
-26
-246
-116
-28
-247
-130
-53
-247
-143
-74
-249
-159
-103
-248
-180
-134
-89
-75
-66
-24
-22
-23
-85
-71
-43
-171
-129
-45
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-156
-125
-62
-154
-125
-71
-154
-125
-71
-154
-125
-71
-156
-125
-62
-175
-132
-40
-85
-71
-43
-47
-40
-38
-158
-125
-46
-158
-125
-46
-170
-137
-67
-237
-233
-225
-253
-255
-252
-253
-255
-252
-253
-255
-252
-207
-202
-200
-164
-158
-157
-146
-135
-124
-120
-114
-108
-89
-84
-82
-65
-58
-56
-47
-40
-38
-24
-22
-23
-24
-22
-23
-35
-31
-30
-94
-60
-47
-178
-86
-46
-226
-110
-35
-241
-100
-24
-144
-77
-47
-65
-58
-56
-253
-212
-188
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-129
-106
-52
-48
-58
-59
-101
-100
-92
-217
-187
-166
-245
-212
-186
-245
-212
-186
-194
-173
-157
-76
-78
-76
-56
-64
-60
-145
-114
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-171
-129
-45
-88
-82
-59
-77
-85
-81
-176
-156
-141
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-95
-87
-59
-41
-58
-57
-137
-127
-115
-227
-196
-175
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-207
-178
-158
-120
-114
-108
-48
-58
-59
-62
-63
-61
-100
-89
-56
-95
-87
-59
-51
-62
-63
-120
-114
-108
-227
-196
-175
-55
-66
-67
-100
-89
-56
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-137
-110
-49
-51
-62
-63
-84
-85
-82
-207
-178
-158
-245
-212
-186
-245
-212
-186
-207
-178
-158
-97
-98
-96
-51
-62
-63
-137
-110
-49
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-91
-92
-89
-120
-114
-108
-63
-69
-60
-158
-125
-46
-161
-127
-40
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-43
-57
-62
-161
-144
-134
-227
-196
-175
-253
-212
-188
-234
-204
-183
-161
-144
-134
-51
-62
-63
-75
-74
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-146
-135
-124
-176
-156
-141
-48
-58
-59
-137
-110
-49
-171
-129
-45
-158
-125
-46
-161
-127
-40
-158
-125
-46
-75
-74
-61
-43
-57
-62
-161
-144
-134
-234
-204
-183
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-194
-173
-157
-109
-106
-99
-43
-57
-62
-69
-69
-61
-105
-93
-60
-88
-82
-59
-48
-58
-59
-146
-135
-124
-255
-215
-190
-161
-144
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-225
-124
-48
-95
-78
-64
-43
-57
-62
-161
-144
-134
-234
-204
-183
-245
-212
-186
-227
-196
-175
-146
-135
-124
-35
-56
-60
-125
-90
-64
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-188
-112
-56
-51
-62
-63
-161
-144
-134
-234
-204
-183
-51
-62
-63
-125
-90
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-125
-52
-163
-104
-61
-43
-57
-62
-97
-98
-96
-207
-178
-158
-245
-212
-186
-245
-212
-186
-207
-178
-158
-91
-92
-89
-48
-58
-59
-173
-106
-60
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-118
-86
-65
-55
-66
-67
-234
-204
-183
-146
-135
-124
-56
-64
-60
-194
-112
-58
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-112
-85
-63
-35
-56
-60
-146
-135
-124
-227
-196
-175
-253
-212
-188
-234
-204
-183
-161
-144
-134
-43
-57
-62
-95
-78
-64
-225
-124
-48
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-176
-156
-141
-250
-197
-158
-252
-185
-144
-248
-180
-134
-248
-180
-134
-251
-192
-154
-172
-150
-134
-48
-58
-59
-173
-106
-60
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-41
-58
-57
-120
-114
-108
-217
-187
-166
-245
-212
-186
-234
-204
-183
-176
-156
-141
-58
-69
-70
-81
-73
-62
-214
-121
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-255
-215
-190
-255
-215
-190
-217
-187
-166
-133
-120
-107
-84
-85
-82
-91
-92
-89
-146
-135
-124
-234
-204
-183
-238
-205
-179
-63
-74
-74
-95
-78
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-84
-85
-82
-194
-173
-157
-245
-212
-186
-245
-212
-186
-217
-187
-166
-109
-106
-99
-41
-58
-57
-146
-97
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-146
-97
-64
-51
-62
-63
-187
-166
-150
-76
-78
-76
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-97
-98
-96
-250
-200
-166
-249
-189
-146
-248
-180
-134
-248
-180
-134
-252
-185
-144
-232
-190
-161
-70
-79
-77
-112
-85
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-199
-115
-54
-65
-67
-64
-70
-79
-77
-187
-166
-150
-238
-205
-179
-245
-212
-186
-217
-187
-166
-133
-120
-107
-35
-56
-60
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-123
-41
-247
-130
-60
-247
-150
-84
-251
-168
-115
-203
-161
-131
-55
-48
-48
-24
-22
-23
-71
-60
-43
-145
-114
-49
-171
-129
-45
-171
-129
-45
-158
-125
-46
-156
-125
-62
-154
-125
-71
-154
-125
-71
-156
-125
-62
-156
-125
-62
-171
-129
-45
-171
-129
-45
-101
-83
-47
-35
-31
-30
-123
-102
-54
-171
-129
-45
-158
-125
-46
-160
-120
-43
-224
-207
-180
-253
-255
-252
-253
-255
-252
-219
-212
-208
-47
-40
-38
-24
-22
-23
-24
-22
-23
-24
-22
-23
-24
-22
-23
-24
-22
-23
-35
-31
-30
-35
-31
-30
-24
-22
-23
-47
-40
-38
-226
-110
-35
-241
-100
-24
-226
-110
-35
-226
-110
-35
-144
-77
-47
-55
-48
-48
-238
-205
-179
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-123
-102
-54
-56
-64
-60
-51
-62
-63
-84
-85
-82
-84
-85
-82
-48
-58
-59
-63
-69
-60
-129
-106
-52
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-56
-64
-60
-137
-127
-115
-245
-212
-186
-84
-85
-82
-69
-69
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-161
-127
-40
-158
-125
-46
-95
-87
-59
-48
-58
-59
-63
-74
-74
-109
-106
-99
-133
-120
-107
-133
-120
-107
-91
-92
-89
-51
-62
-63
-56
-64
-60
-100
-89
-56
-152
-119
-47
-171
-129
-45
-175
-132
-40
-100
-89
-56
-48
-58
-59
-217
-187
-166
-120
-114
-108
-63
-69
-60
-152
-119
-47
-161
-127
-40
-158
-125
-46
-158
-125
-46
-168
-127
-42
-129
-106
-52
-61
-67
-58
-51
-62
-63
-84
-85
-82
-84
-85
-82
-51
-62
-63
-56
-64
-60
-123
-102
-54
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-97
-98
-96
-187
-166
-150
-48
-58
-59
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-158
-125
-46
-83
-78
-61
-48
-58
-59
-63
-74
-74
-91
-92
-89
-70
-79
-77
-48
-58
-59
-75
-74
-61
-152
-119
-47
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-146
-135
-124
-234
-204
-183
-63
-74
-74
-83
-78
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-152
-119
-47
-83
-78
-61
-48
-58
-59
-70
-79
-77
-109
-106
-99
-133
-120
-107
-120
-114
-108
-84
-85
-82
-48
-58
-59
-61
-67
-58
-111
-94
-57
-158
-125
-46
-171
-129
-45
-171
-129
-45
-88
-82
-59
-58
-69
-70
-238
-205
-179
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-212
-120
-56
-95
-78
-64
-43
-57
-62
-70
-79
-77
-84
-85
-82
-63
-74
-74
-48
-58
-59
-118
-86
-65
-225
-124
-48
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-112
-85
-63
-55
-66
-67
-227
-196
-175
-255
-215
-190
-120
-114
-108
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-155
-100
-63
-62
-63
-61
-51
-62
-63
-77
-85
-81
-77
-85
-81
-51
-62
-63
-62
-63
-61
-155
-100
-63
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-199
-115
-54
-56
-64
-60
-120
-114
-108
-255
-215
-190
-217
-187
-166
-43
-57
-62
-125
-90
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-106
-82
-65
-48
-58
-59
-63
-74
-74
-84
-85
-82
-70
-79
-77
-43
-57
-62
-95
-78
-64
-212
-120
-56
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-234
-125
-52
-183
-110
-59
-51
-62
-63
-172
-150
-134
-251
-192
-154
-248
-180
-134
-249
-174
-124
-249
-174
-124
-248
-180
-134
-236
-186
-153
-63
-74
-74
-95
-78
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-135
-94
-64
-51
-62
-63
-55
-66
-67
-84
-85
-82
-70
-79
-77
-41
-58
-57
-81
-73
-62
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-255
-215
-190
-194
-173
-157
-58
-69
-70
-62
-63
-61
-106
-82
-65
-95
-78
-64
-51
-62
-63
-91
-92
-89
-238
-205
-179
-161
-144
-134
-48
-58
-59
-183
-110
-59
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-125
-52
-173
-106
-60
-65
-67
-64
-48
-58
-59
-77
-85
-81
-84
-85
-82
-55
-66
-67
-56
-64
-60
-146
-97
-64
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-69
-69
-61
-101
-100
-92
-227
-196
-175
-63
-74
-74
-135
-94
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-250
-197
-158
-252
-185
-144
-249
-174
-124
-249
-174
-124
-250
-176
-132
-251
-192
-154
-120
-114
-108
-62
-63
-61
-209
-117
-53
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-188
-112
-56
-76
-70
-64
-41
-58
-57
-77
-85
-81
-84
-85
-82
-58
-69
-70
-48
-58
-59
-125
-90
-64
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-243
-101
-2
-247
-103
-7
-247
-103
-7
-247
-111
-26
-247
-118
-39
-247
-130
-53
-250
-139
-73
-246
-156
-93
-249
-174
-124
-203
-161
-131
-55
-48
-48
-24
-22
-23
-35
-31
-30
-85
-71
-43
-137
-110
-49
-152
-119
-47
-168
-127
-42
-171
-129
-45
-171
-129
-45
-168
-127
-42
-152
-119
-47
-117
-98
-55
-59
-50
-39
-35
-31
-30
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-152
-119
-47
-224
-207
-180
-253
-255
-252
-253
-255
-252
-253
-255
-252
-146
-135
-124
-65
-58
-56
-35
-31
-30
-24
-22
-23
-24
-22
-23
-35
-31
-30
-35
-31
-30
-35
-31
-30
-35
-31
-30
-24
-22
-23
-83
-53
-42
-236
-108
-29
-236
-108
-29
-226
-110
-35
-94
-60
-47
-65
-58
-56
-253
-212
-188
-255
-215
-190
-238
-205
-179
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-161
-127
-40
-168
-127
-42
-145
-114
-49
-105
-93
-60
-83
-78
-61
-83
-78
-61
-111
-94
-57
-158
-125
-46
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-88
-82
-59
-51
-62
-63
-217
-187
-166
-255
-215
-190
-176
-156
-141
-43
-57
-62
-105
-93
-60
-171
-129
-45
-158
-125
-46
-158
-125
-46
-161
-127
-40
-168
-127
-42
-137
-110
-49
-88
-82
-59
-69
-69
-61
-62
-63
-61
-63
-69
-60
-75
-74
-61
-105
-93
-60
-152
-119
-47
-171
-129
-45
-168
-127
-42
-158
-125
-46
-171
-129
-45
-129
-106
-52
-48
-58
-59
-194
-173
-157
-207
-178
-158
-43
-57
-62
-100
-89
-56
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-152
-119
-47
-111
-94
-57
-83
-78
-61
-83
-78
-61
-105
-93
-60
-145
-114
-49
-168
-127
-42
-161
-127
-40
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-84
-85
-82
-245
-212
-186
-77
-85
-81
-75
-74
-61
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-129
-106
-52
-95
-87
-59
-81
-73
-62
-95
-87
-59
-123
-102
-54
-168
-127
-42
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-56
-64
-60
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-255
-215
-190
-161
-144
-134
-48
-58
-59
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-129
-106
-52
-88
-82
-59
-69
-69
-61
-62
-63
-61
-63
-69
-60
-75
-74
-61
-117
-98
-55
-152
-119
-47
-171
-129
-45
-161
-127
-40
-158
-125
-46
-171
-129
-45
-111
-94
-57
-48
-58
-59
-227
-196
-175
-176
-156
-141
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-227
-126
-50
-163
-104
-61
-112
-85
-63
-95
-78
-64
-118
-86
-65
-173
-106
-60
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-183
-110
-59
-51
-62
-63
-133
-120
-107
-255
-215
-190
-255
-215
-190
-217
-187
-166
-51
-62
-63
-106
-82
-65
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-199
-115
-54
-135
-94
-64
-95
-78
-64
-95
-78
-64
-135
-94
-64
-199
-115
-54
-234
-125
-52
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-106
-82
-65
-51
-62
-63
-217
-187
-166
-255
-215
-190
-255
-215
-190
-120
-114
-108
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-173
-106
-60
-118
-86
-65
-95
-78
-64
-112
-85
-63
-163
-104
-61
-227
-126
-50
-227
-126
-50
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-101
-100
-92
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-172
-150
-134
-252
-185
-144
-249
-174
-124
-247
-165
-111
-247
-165
-111
-249
-174
-124
-252
-185
-144
-154
-133
-118
-48
-58
-59
-163
-104
-61
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-188
-112
-56
-125
-90
-64
-95
-78
-64
-106
-82
-65
-155
-100
-63
-224
-123
-55
-234
-125
-52
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-137
-127
-115
-253
-212
-188
-91
-92
-89
-69
-69
-61
-194
-112
-58
-234
-126
-45
-234
-126
-45
-163
-104
-61
-51
-62
-63
-137
-127
-115
-238
-205
-179
-63
-74
-74
-89
-75
-66
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-209
-117
-53
-146
-97
-64
-106
-82
-65
-95
-78
-64
-125
-90
-64
-194
-112
-58
-234
-126
-45
-227
-126
-50
-224
-123
-55
-227
-126
-50
-234
-126
-45
-125
-90
-64
-41
-58
-57
-194
-173
-157
-238
-205
-179
-63
-74
-74
-135
-94
-64
-234
-125
-52
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-251
-192
-154
-250
-176
-132
-251
-168
-115
-247
-165
-111
-249
-174
-124
-245
-179
-138
-195
-157
-134
-41
-58
-57
-135
-94
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-125
-52
-214
-121
-50
-146
-97
-64
-106
-82
-65
-95
-78
-64
-125
-90
-64
-183
-110
-59
-227
-126
-50
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-125
-52
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-249
-152
-92
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-247
-103
-7
-246
-109
-10
-247
-111
-26
-247
-118
-39
-247
-130
-53
-247
-143
-74
-249
-159
-103
-250
-176
-132
-219
-170
-138
-115
-102
-92
-47
-40
-38
-24
-22
-23
-35
-31
-30
-47
-40
-38
-59
-50
-39
-59
-50
-39
-59
-50
-39
-59
-50
-39
-47
-40
-38
-47
-40
-38
-71
-60
-43
-137
-110
-49
-171
-129
-45
-158
-125
-46
-158
-125
-46
-152
-119
-47
-170
-137
-67
-219
-212
-208
-237
-233
-225
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-219
-212
-208
-152
-147
-147
-109
-106
-99
-65
-67
-64
-35
-31
-30
-35
-31
-30
-35
-31
-30
-35
-31
-30
-24
-22
-23
-94
-60
-47
-178
-86
-46
-109
-63
-45
-35
-31
-30
-124
-111
-99
-251
-209
-178
-251
-209
-178
-234
-204
-183
-76
-78
-76
-95
-87
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-117
-98
-55
-129
-106
-52
-168
-127
-42
-168
-127
-42
-171
-129
-45
-168
-127
-42
-168
-127
-42
-171
-129
-45
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-117
-98
-55
-48
-58
-59
-146
-135
-124
-255
-215
-190
-255
-215
-190
-255
-215
-190
-120
-114
-108
-51
-62
-63
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-158
-125
-46
-152
-119
-47
-152
-119
-47
-158
-125
-46
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-158
-125
-46
-81
-73
-62
-58
-69
-70
-227
-196
-175
-255
-215
-190
-120
-114
-108
-48
-58
-59
-129
-106
-52
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-161
-127
-40
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-168
-127
-42
-168
-127
-42
-152
-119
-47
-117
-98
-55
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-88
-82
-59
-84
-85
-82
-255
-215
-190
-176
-156
-141
-48
-58
-59
-111
-94
-57
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-168
-127
-42
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-145
-114
-49
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-117
-98
-55
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-63
-69
-60
-137
-127
-115
-255
-215
-190
-238
-205
-179
-91
-92
-89
-56
-64
-60
-137
-110
-49
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-158
-125
-46
-152
-119
-47
-158
-125
-46
-168
-127
-42
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-152
-119
-47
-69
-69
-61
-84
-85
-82
-245
-212
-186
-172
-150
-134
-62
-63
-61
-199
-115
-54
-227
-126
-50
-224
-123
-55
-227
-126
-50
-199
-115
-54
-125
-90
-64
-227
-126
-50
-227
-126
-50
-227
-126
-50
-234
-125
-52
-227
-126
-50
-234
-125
-52
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-214
-121
-50
-81
-73
-62
-63
-74
-74
-227
-196
-175
-255
-215
-190
-253
-212
-188
-255
-215
-190
-146
-135
-124
-48
-58
-59
-146
-97
-64
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-227
-126
-50
-227
-126
-50
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-139
-96
-61
-48
-58
-59
-146
-135
-124
-255
-215
-190
-253
-212
-188
-255
-215
-190
-217
-187
-166
-55
-66
-67
-95
-78
-64
-225
-124
-48
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-227
-126
-50
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-163
-104
-61
-183
-110
-59
-227
-126
-50
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-97
-98
-96
-56
-64
-60
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-183
-110
-59
-51
-62
-63
-167
-142
-123
-248
-180
-134
-247
-165
-111
-249
-159
-103
-246
-156
-93
-249
-159
-103
-249
-174
-124
-239
-182
-144
-77
-85
-81
-65
-67
-64
-199
-115
-54
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-227
-126
-50
-227
-126
-50
-234
-125
-52
-227
-126
-50
-227
-126
-50
-135
-94
-64
-188
-112
-56
-227
-126
-50
-224
-123
-55
-227
-126
-50
-209
-117
-53
-65
-67
-64
-146
-135
-124
-227
-196
-175
-43
-57
-62
-146
-97
-64
-234
-126
-45
-224
-123
-55
-224
-123
-55
-234
-126
-45
-106
-82
-65
-70
-79
-77
-253
-212
-188
-176
-156
-141
-41
-58
-57
-125
-90
-64
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-234
-125
-52
-227
-126
-50
-234
-125
-52
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-155
-100
-63
-48
-58
-59
-120
-114
-108
-253
-212
-188
-234
-204
-183
-63
-74
-74
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-252
-185
-144
-245
-169
-119
-249
-159
-103
-249
-159
-103
-247
-165
-111
-249
-174
-124
-251
-192
-154
-109
-106
-99
-62
-63
-61
-188
-112
-56
-234
-125
-52
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-234
-125
-52
-227
-126
-50
-234
-125
-52
-227
-126
-50
-227
-126
-50
-212
-120
-56
-199
-115
-54
-224
-123
-55
-224
-123
-55
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-200
-166
-249
-174
-124
-247
-150
-84
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-243
-101
-2
-243
-101
-2
-247
-103
-7
-247
-111
-26
-247
-111
-26
-247
-123
-41
-247
-130
-60
-243
-141
-78
-249
-159
-103
-250
-176
-132
-251
-192
-154
-207
-178
-158
-154
-133
-118
-82
-69
-65
-24
-22
-23
-71
-60
-43
-101
-83
-47
-101
-83
-47
-101
-83
-47
-117
-98
-55
-145
-114
-49
-171
-129
-45
-168
-127
-42
-160
-120
-43
-160
-120
-43
-158
-125
-46
-192
-155
-91
-237
-233
-225
-81
-77
-76
-55
-48
-48
-74
-68
-68
-81
-77
-76
-89
-84
-82
-91
-92
-89
-89
-84
-82
-81
-77
-76
-65
-58
-56
-47
-40
-38
-35
-31
-30
-55
-48
-48
-115
-102
-92
-172
-150
-134
-55
-48
-48
-24
-22
-23
-24
-22
-23
-24
-22
-23
-65
-58
-56
-230
-173
-136
-251
-192
-154
-250
-197
-158
-250
-200
-166
-84
-85
-82
-88
-82
-59
-171
-129
-45
-158
-125
-46
-158
-125
-46
-171
-129
-45
-83
-78
-61
-69
-69
-61
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-117
-98
-55
-48
-58
-59
-101
-100
-92
-238
-205
-179
-253
-204
-176
-250
-200
-166
-253
-204
-176
-238
-205
-179
-91
-92
-89
-51
-62
-63
-117
-98
-55
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-145
-114
-49
-75
-74
-61
-48
-58
-59
-172
-150
-134
-253
-212
-188
-255
-215
-190
-234
-204
-183
-84
-85
-82
-56
-64
-60
-129
-106
-52
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-81
-73
-62
-63
-69
-60
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-83
-78
-61
-84
-85
-82
-255
-215
-190
-245
-212
-186
-109
-106
-99
-51
-62
-63
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-161
-127
-40
-171
-129
-45
-105
-93
-60
-51
-62
-63
-137
-110
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-137
-127
-115
-58
-69
-70
-111
-94
-57
-171
-129
-45
-158
-125
-46
-158
-125
-46
-158
-125
-46
-62
-63
-61
-137
-127
-115
-255
-215
-190
-255
-215
-190
-227
-196
-175
-77
-85
-81
-56
-64
-60
-129
-106
-52
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-161
-127
-40
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-168
-127
-42
-137
-110
-49
-69
-69
-61
-51
-62
-63
-187
-166
-150
-255
-215
-190
-172
-150
-134
-51
-62
-63
-194
-112
-58
-227
-126
-50
-224
-123
-55
-234
-125
-52
-183
-110
-59
-48
-58
-59
-155
-100
-63
-234
-126
-45
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-125
-52
-209
-117
-53
-89
-75
-66
-48
-58
-59
-187
-166
-150
-250
-200
-166
-250
-197
-158
-251
-192
-154
-250
-197
-158
-250
-200
-166
-109
-106
-99
-48
-58
-59
-135
-94
-64
-234
-125
-52
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-135
-94
-64
-43
-57
-62
-120
-114
-108
-250
-200
-166
-250
-197
-158
-251
-192
-154
-250
-197
-158
-250
-200
-166
-172
-150
-134
-41
-58
-57
-106
-82
-65
-214
-121
-50
-234
-125
-52
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-227
-126
-50
-234
-126
-45
-183
-110
-59
-48
-58
-59
-135
-94
-64
-234
-126
-45
-224
-123
-55
-227
-126
-50
-188
-112
-56
-51
-62
-63
-109
-106
-99
-51
-62
-63
-183
-110
-59
-227
-126
-50
-224
-123
-55
-234
-125
-52
-173
-106
-60
-48
-58
-59
-178
-146
-122
-245
-169
-119
-246
-156
-93
-247
-150
-84
-249
-146
-83
-247
-150
-84
-249
-159
-103
-249
-174
-124
-203
-161
-131
-58
-69
-70
-76
-70
-64
-194
-112
-58
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-183
-110
-59
-48
-58
-59
-163
-104
-61
-234
-126
-45
-224
-123
-55
-227
-126
-50
-209
-117
-53
-62
-63
-61
-146
-135
-124
-217
-187
-166
-43
-57
-62
-163
-104
-61
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-126
-45
-125
-90
-64
-58
-69
-70
-234
-204
-183
-255
-215
-190
-137
-127
-115
-41
-58
-57
-118
-86
-65
-225
-124
-48
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-146
-97
-64
-51
-62
-63
-97
-98
-96
-238
-205
-179
-255
-215
-190
-234
-204
-183
-63
-74
-74
-118
-86
-65
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-81
-73
-62
-101
-100
-92
-250
-176
-132
-247
-165
-111
-246
-156
-93
-249
-152
-92
-249
-159
-103
-251
-168
-115
-252
-185
-144
-217
-187
-166
-58
-69
-70
-69
-69
-61
-199
-115
-54
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-224
-123
-55
-227
-126
-50
-225
-124
-48
-81
-73
-62
-81
-73
-62
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-139
-96
-61
-55
-66
-67
-250
-197
-158
-249
-174
-124
-247
-150
-84
-247
-130
-60
-247
-118
-39
-247
-111
-26
-247
-103
-7
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-237
-95
-0
-237
-95
-0
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-237
-95
-0
-243
-101
-2
-247
-103
-7
-236
-102
-14
-247
-111
-26
-246
-116
-28
-247
-123
-41
-247
-130
-60
-243
-141
-78
-249
-159
-103
-249
-174
-124
-249
-189
-146
-253
-204
-176
-124
-111
-99
-35
-31
-30
-145
-114
-49
-175
-132
-40
-171
-129
-45
-168
-127
-42
-192
-155
-91
-216
-194
-154
-224
-207
-180
-224
-207
-180
-216
-194
-154
-216
-194
-154
-239
-227
-208
-253
-255
-252
-253
-255
-252
-186
-181
-179
-146
-135
-124
-120
-114
-108
-109
-106
-99
-95
-78
-64
-71
-60
-43
-85
-71
-43
-101
-83
-47
-108
-87
-46
-35
-31
-30
-150
-125
-114
-227
-196
-175
-255
-215
-190
-253
-212
-188
-212
-173
-150
-121
-100
-85
-95
-78
-64
-129
-102
-78
-234
-168
-124
-250
-176
-132
-250
-176
-132
-248
-180
-134
-249
-189
-146
-124
-111
-99
-62
-63
-61
-152
-119
-47
-171
-129
-45
-171
-129
-45
-145
-114
-49
-56
-64
-60
-43
-57
-62
-83
-78
-61
-152
-119
-47
-171
-129
-45
-171
-129
-45
-168
-127
-42
-168
-127
-42
-171
-129
-45
-171
-129
-45
-152
-119
-47
-95
-87
-59
-48
-58
-59
-101
-100
-92
-236
-186
-153
-251
-192
-154
-252
-185
-144
-248
-180
-134
-245
-179
-138
-249
-189
-146
-236
-186
-153
-101
-100
-92
-48
-58
-59
-88
-82
-59
-137
-110
-49
-168
-127
-42
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-171
-129
-45
-168
-127
-42
-145
-114
-49
-100
-89
-56
-56
-64
-60
-58
-69
-70
-172
-150
-134
-250
-200
-166
-251
-192
-154
-250
-197
-158
-250
-200
-166
-217
-187
-166
-84
-85
-82
-51
-62
-63
-105
-93
-60
-158
-125
-46
-171
-129
-45
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-152
-119
-47
-83
-78
-61
-43
-57
-62
-48
-58
-59
-129
-106
-52
-175
-132
-40
-171
-129
-45
-158
-125
-46
-63
-69
-60
-120
-114
-108
-255
-215
-190
-255
-215
-190
-227
-196
-175
-84
-85
-82
-51
-62
-63
-105
-93
-60
-158
-125
-46
-171
-129
-45
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-158
-125
-46
-105
-93
-60
-48
-58
-59
-48
-58
-59
-129
-106
-52
-168
-127
-42
-158
-125
-46
-168
-127
-42
-145
-114
-49
-51
-62
-63
-172
-150
-134
-91
-92
-89
-75
-74
-61
-168
-127
-42
-171
-129
-45
-175
-132
-40
-117
-98
-55
-48
-58
-59
-176
-156
-141
-253
-204
-176
-253
-204
-176
-253
-204
-176
-217
-187
-166
-84
-85
-82
-48
-58
-59
-95
-87
-59
-145
-114
-49
-168
-127
-42
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-171
-129
-45
-158
-125
-46
-137
-110
-49
-95
-87
-59
-51
-62
-63
-70
-79
-77
-187
-166
-150
-251
-209
-178
-251
-209
-178
-207
-178
-158
-43
-57
-62
-135
-94
-64
-238
-123
-45
-234
-126
-45
-234
-126
-45
-118
-86
-65
-35
-56
-60
-56
-64
-60
-155
-100
-63
-234
-125
-52
-234
-126
-45
-234
-125
-52
-227
-126
-50
-227
-126
-50
-234
-126
-45
-227
-126
-50
-163
-104
-61
-76
-70
-64
-51
-62
-63
-167
-142
-123
-251
-192
-154
-248
-180
-134
-249
-174
-124
-249
-174
-124
-250
-176
-132
-245
-179
-138
-236
-186
-153
-109
-106
-99
-41
-58
-57
-95
-78
-64
-183
-110
-59
-234
-125
-52
-234
-126
-45
-234
-125
-52
-227
-126
-50
-227
-126
-50
-234
-125
-52
-234
-126
-45
-227
-126
-50
-183
-110
-59
-95
-78
-64
-43
-57
-62
-124
-111
-99
-236
-186
-153
-252
-185
-144
-250
-176
-132
-249
-174
-124
-249
-174
-124
-248
-180
-134
-251
-192
-154
-154
-133
-118
-43
-57
-62
-81
-73
-62
-173
-106
-60
-227
-126
-50
-234
-126
-45
-227
-126
-50
-227
-126
-50
-227
-126
-50
-234
-126
-45
-234
-125
-52
-155
-100
-63
-56
-64
-60
-35
-56
-60
-89
-75
-66
-227
-126
-50
-234
-126
-45
-238
-128
-40
-146
-97
-64
-43
-57
-62
-176
-156
-141
-58
-69
-70
-118
-86
-65
-234
-126
-45
-234
-126
-45
-234
-126
-45
-112
-85
-63
-43
-57
-62
-210
-156
-119
-245
-162
-103
-247
-150
-84
-247
-143
-74
-248
-138
-64
-241
-138
-68
-249
-146
-83
-249
-159
-103
-250
-176
-132
-195
-157
-134
-58
-69
-70
-65
-67
-64
-155
-100
-63
-227
-126
-50
-234
-126
-45
-227
-126
-50
-227
-126
-50
-234
-125
-52
-234
-126
-45
-234
-126
-45
-173
-106
-60
-65
-67
-64
-35
-56
-60
-106
-82
-65
-234
-126
-45
-234
-126
-45
-238
-128
-40
-146
-97
-64
-43
-57
-62
-187
-166
-150
-234
-204
-183
-55
-66
-67
-106
-82
-65
-234
-126
-45
-234
-125
-52
-234
-125
-52
-224
-123
-55
-81
-73
-62
-91
-92
-89
-245
-212
-186
-253
-212
-188
-253
-212
-188
-137
-127
-115
-41
-58
-57
-89
-75
-66
-173
-106
-60
-227
-126
-50
-234
-126
-45
-227
-126
-50
-227
-126
-50
-227
-126
-50
-234
-125
-52
-234
-126
-45
-234
-125
-52
-194
-112
-58
-106
-82
-65
-43
-57
-62
-101
-100
-92
-227
-196
-175
-251
-209
-178
-251
-209
-178
-253
-212
-188
-97
-98
-96
-69
-69
-61
-209
-117
-53
-234
-126
-45
-238
-128
-40
-173
-106
-60
-51
-62
-63
-139
-115
-96
-251
-168
-115
-246
-156
-93
-247
-150
-84
-249
-146
-83
-249
-152
-92
-247
-165
-111
-248
-180
-134
-250
-200
-166
-187
-166
-150
-55
-66
-67
-69
-69
-61
-163
-104
-61
-234
-125
-52
-234
-126
-45
-234
-125
-52
-227
-126
-50
-227
-126
-50
-234
-126
-45
-234
-126
-45
-199
-115
-54
-95
-78
-64
-35
-56
-60
-81
-73
-62
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-139
-96
-61
-51
-62
-63
-250
-197
-158
-245
-169
-119
-247
-150
-84
-247
-130
-60
-247
-118
-39
-235
-107
-16
-243
-101
-2
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-246
-97
-3
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-246
-97
-3
-237
-95
-0
-243
-101
-2
-247
-103
-7
-236
-102
-14
-247
-111
-26
-246
-116
-28
-238
-123
-45
-241
-132
-59
-247
-143
-74
-246
-156
-93
-245
-169
-119
-230
-173
-136
-47
-40
-38
-59
-50
-39
-168
-127
-42
-161
-127
-40
-160
-120
-43
-192
-155
-91
-255
-238
-227
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-253
-255
-252
-239
-227
-208
-170
-137
-67
-171
-129
-45
-171
-129
-45
-171
-129
-45
-59
-50
-39
-154
-133
-118
-250
-200
-166
-250
-197
-158
-249
-189
-146
-248
-180
-134
-249
-174
-124
-247
-165
-111
-247
-165
-111
-245
-162
-103
-249
-159
-103
-245
-162
-103
-247
-165
-111
-249
-174
-124
-203
-161
-131
-55
-66
-67
-69
-69
-61
-111
-94
-57
-105
-93
-60
-69
-69
-61
-63
-74
-74
-137
-127
-115
-51
-62
-63
-62
-63
-61
-95
-87
-59
-129
-106
-52
-137
-110
-49
-137
-110
-49
-123
-102
-54
-95
-87
-59
-62
-63
-61
-51
-62
-63
-133
-120
-107
-239
-182
-144
-248
-180
-134
-245
-169
-119
-247
-165
-111
-249
-159
-103
-245
-162
-103
-251
-168
-115
-250
-176
-132
-239
-182
-144
-154
-133
-118
-63
-74
-74
-51
-62
-63
-75
-74
-61
-105
-93
-60
-123
-102
-54
-137
-110
-49
-137
-110
-49
-137
-110
-49
-123
-102
-54
-100
-89
-56
-75
-74
-61
-56
-64
-60
-55
-66
-67
-124
-111
-99
-219
-170
-138
-252
-185
-144
-250
-176
-132
-249
-174
-124
-249
-174
-124
-250
-176
-132
-252
-185
-144
-236
-186
-153
-124
-111
-99
-48
-58
-59
-63
-69
-60
-95
-87
-59
-123
-102
-54
-137
-110
-49
-137
-110
-49
-129
-106
-52
-95
-87
-59
-62
-63
-61
-55
-66
-67
-146
-135
-124
-77
-85
-81
-61
-67
-58
-105
-93
-60
-111
-94
-57
-75
-74
-61
-48
-58
-59
-194
-173
-157
-255
-215
-190
-255
-215
-190
-255
-215
-190
-234
-204
-183
-120
-114
-108
-43
-57
-62
-69
-69
-61
-100
-89
-56
-129
-106
-52
-137
-110
-49
-137
-110
-49
-129
-106
-52
-105
-93
-60
-69
-69
-61
-48
-58
-59
-77
-85
-81
-51
-62
-63
-137
-110
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-137
-110
-49
-51
-62
-63
-187
-166
-150
-187
-166
-150
-48
-58
-59
-75
-74
-61
-111
-94
-57
-95
-87
-59
-56
-64
-60
-99
-90
-79
-239
-182
-144
-252
-185
-144
-245
-179
-138
-252
-185
-144
-249
-189
-146
-236
-186
-153
-137
-127
-115
-55
-66
-67
-56
-64
-60
-83
-78
-61
-111
-94
-57
-129
-106
-52
-137
-110
-49
-137
-110
-49
-129
-106
-52
-117
-98
-55
-95
-87
-59
-69
-69
-61
-51
-62
-63
-63
-74
-74
-133
-120
-107
-236
-186
-153
-250
-197
-158
-251
-192
-154
-251
-192
-154
-250
-197
-158
-124
-111
-99
-51
-62
-63
-112
-85
-63
-146
-97
-64
-106
-82
-65
-48
-58
-59
-120
-114
-108
-101
-100
-92
-48
-58
-59
-95
-78
-64
-146
-97
-64
-183
-110
-59
-188
-112
-56
-173
-106
-60
-139
-96
-61
-89
-75
-66
-48
-58
-59
-77
-85
-81
-186
-157
-134
-245
-179
-138
-245
-169
-119
-245
-162
-103
-246
-156
-93
-246
-156
-93
-246
-156
-93
-247
-165
-111
-249
-174
-124
-249
-189
-146
-154
-133
-118
-58
-69
-70
-51
-62
-63
-95
-78
-64
-139
-96
-61
-173
-106
-60
-183
-110
-59
-183
-110
-59
-173
-106
-60
-139
-96
-61
-95
-78
-64
-51
-62
-63
-63
-74
-74
-167
-142
-123
-249
-189
-146
-249
-174
-124
-247
-165
-111
-246
-156
-93
-246
-156
-93
-246
-156
-93
-245
-162
-103
-245
-169
-119
-245
-179
-138
-178
-146
-122
-70
-79
-77
-48
-58
-59
-89
-75
-66
-139
-96
-61
-173
-106
-60
-188
-112
-56
-183
-110
-59
-155
-100
-63
-95
-78
-64
-48
-58
-59
-101
-100
-92
-146
-135
-124
-48
-58
-59
-95
-78
-64
-146
-97
-64
-125
-90
-64
-62
-63
-61
-101
-100
-92
-245
-212
-186
-137
-127
-115
-48
-58
-59
-106
-82
-65
-146
-97
-64
-106
-82
-65
-48
-58
-59
-124
-111
-99
-247
-165
-111
-247
-150
-84
-241
-138
-68
-241
-132
-59
-247
-130
-53
-247
-130
-53
-242
-133
-67
-241
-145
-79
-245
-162
-103
-250
-176
-132
-203
-161
-131
-91
-92
-89
-43
-57
-62
-81
-73
-62
-135
-94
-64
-173
-106
-60
-188
-112
-56
-183
-110
-59
-155
-100
-63
-106
-82
-65
-51
-62
-63
-91
-92
-89
-133
-120
-107
-48
-58
-59
-95
-78
-64
-146
-97
-64
-118
-86
-65
-56
-64
-60
-101
-100
-92
-245
-212
-186
-253
-212
-188
-146
-135
-124
-48
-58
-59
-118
-86
-65
-183
-110
-59
-173
-106
-60
-95
-78
-64
-43
-57
-62
-186
-157
-134
-250
-197
-158
-251
-192
-154
-250
-197
-158
-250
-200
-166
-172
-150
-134
-70
-79
-77
-48
-58
-59
-89
-75
-66
-135
-94
-64
-163
-104
-61
-183
-110
-59
-183
-110
-59
-173
-106
-60
-146
-97
-64
-95
-78
-64
-56
-64
-60
-55
-66
-67
-150
-125
-114
-236
-186
-153
-251
-192
-154
-249
-189
-146
-249
-189
-146
-251
-192
-154
-195
-157
-134
-51
-62
-63
-76
-70
-64
-139
-96
-61
-125
-90
-64
-65
-67
-64
-76
-78
-76
-234
-168
-124
-249
-159
-103
-247
-150
-84
-243
-141
-78
-247
-143
-74
-247
-150
-84
-249
-159
-103
-250
-176
-132
-250
-197
-158
-255
-215
-190
-207
-178
-158
-84
-85
-82
-48
-58
-59
-89
-75
-66
-146
-97
-64
-173
-106
-60
-183
-110
-59
-183
-110
-59
-163
-104
-61
-118
-86
-65
-62
-63
-61
-58
-69
-70
-63
-74
-74
-81
-73
-62
-227
-126
-50
-227
-126
-50
-224
-123
-55
-234
-126
-45
-135
-94
-64
-58
-69
-70
-251
-192
-154
-245
-169
-119
-249
-146
-83
-247
-130
-53
-238
-116
-34
-235
-107
-16
-243
-101
-2
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-246
-97
-3
-246
-97
-3
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-243
-101
-2
-236
-102
-14
-236
-102
-14
-235
-107
-16
-246
-116
-28
-239
-117
-44
-241
-132
-59
-247
-143
-74
-249
-152
-92
-214
-151
-109
-118
-86
-65
-146
-111
-88
-192
-155
-91
-192
-155
-91
-195
-167
-113
-239
-227
-208
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-255
-238
-227
-216
-194
-154
-192
-155
-91
-192
-155
-91
-192
-155
-91
-146
-111
-88
-162
-125
-96
-250
-176
-132
-245
-169
-119
-247
-165
-111
-249
-159
-103
-246
-156
-93
-247
-150
-84
-243
-141
-78
-243
-141
-78
-243
-141
-78
-241
-145
-79
-247
-150
-84
-249
-159
-103
-245
-169
-119
-187
-140
-108
-89
-84
-82
-48
-58
-59
-48
-58
-59
-91
-92
-89
-194
-173
-157
-255
-215
-190
-207
-178
-158
-109
-106
-99
-51
-62
-63
-48
-58
-59
-51
-62
-63
-48
-58
-59
-48
-58
-59
-55
-66
-67
-124
-111
-99
-203
-161
-131
-248
-180
-134
-245
-169
-119
-249
-159
-103
-247
-150
-84
-243
-141
-78
-243
-141
-78
-243
-141
-78
-247
-150
-84
-249
-159
-103
-245
-169
-119
-248
-180
-134
-219
-170
-138
-154
-133
-118
-84
-85
-82
-51
-62
-63
-48
-58
-59
-51
-62
-63
-51
-62
-63
-48
-58
-59
-48
-58
-59
-55
-66
-67
-91
-92
-89
-154
-133
-118
-209
-171
-139
-245
-179
-138
-249
-174
-124
-247
-165
-111
-249
-159
-103
-246
-156
-93
-246
-156
-93
-249
-159
-103
-247
-165
-111
-249
-174
-124
-252
-185
-144
-195
-157
-134
-109
-106
-99
-55
-66
-67
-48
-58
-59
-51
-62
-63
-51
-62
-63
-48
-58
-59
-51
-62
-63
-109
-106
-99
-207
-178
-158
-255
-215
-190
-217
-187
-166
-91
-92
-89
-51
-62
-63
-48
-58
-59
-76
-78
-76
-172
-150
-134
-253
-212
-188
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-255
-215
-190
-194
-173
-157
-101
-100
-92
-51
-62
-63
-48
-58
-59
-48
-58
-59
-51
-62
-63
-48
-58
-59
-48
-58
-59
-97
-98
-96
-194
-173
-157
-146
-135
-124
-56
-64
-60
-145
-114
-49
-168
-127
-42
-158
-125
-46
-168
-127
-42
-129
-106
-52
-48
-58
-59
-194
-173
-157
-255
-215
-190
-176
-156
-141
-76
-78
-76
-48
-58
-59
-55
-66
-67
-115
-102
-92
-234
-168
-124
-245
-169
-119
-247
-165
-111
-247
-165
-111
-247
-165
-111
-245
-169
-119
-249
-174
-124
-245
-179
-138
-209
-171
-139
-144
-125
-110
-76
-78
-76
-48
-58
-59
-48
-58
-59
-51
-62
-63
-51
-62
-63
-48
-58
-59
-48
-58
-59
-58
-69
-70
-101
-100
-92
-154
-133
-118
-219
-170
-138
-252
-185
-144
-248
-180
-134
-249
-174
-124
-245
-169
-119
-249
-174
-124
-250
-176
-132
-230
-173
-136
-124
-111
-99
-55
-66
-67
-43
-57
-62
-58
-69
-70
-137
-127
-115
-245
-212
-186
-245
-212
-186
-161
-144
-134
-70
-79
-77
-43
-57
-62
-51
-62
-63
-51
-62
-63
-48
-58
-59
-43
-57
-62
-84
-85
-82
-154
-133
-118
-240
-181
-138
-249
-174
-124
-247
-165
-111
-249
-152
-92
-243
-141
-78
-241
-138
-68
-242
-133
-67
-241
-138
-68
-241
-145
-79
-246
-156
-93
-247
-165
-111
-250
-176
-132
-219
-170
-138
-144
-125
-110
-77
-85
-81
-43
-57
-62
-48
-58
-59
-48
-58
-59
-51
-62
-63
-48
-58
-59
-43
-57
-62
-77
-85
-81
-150
-125
-114
-219
-170
-138
-250
-176
-132
-247
-165
-111
-246
-156
-93
-241
-145
-79
-241
-138
-68
-241
-138
-68
-241
-138
-68
-243
-141
-78
-249
-152
-92
-247
-165
-111
-250
-176
-132
-230
-173
-136
-154
-133
-118
-77
-85
-81
-43
-57
-62
-48
-58
-59
-51
-62
-63
-48
-58
-59
-43
-57
-62
-70
-79
-77
-161
-144
-134
-245
-212
-186
-255
-215
-190
-161
-144
-134
-63
-74
-74
-43
-57
-62
-51
-62
-63
-109
-106
-99
-217
-187
-166
-251
-209
-178
-238
-205
-179
-137
-127
-115
-58
-69
-70
-43
-57
-62
-58
-69
-70
-139
-115
-96
-238
-159
-107
-249
-152
-92
-241
-138
-68
-247
-130
-53
-238
-123
-45
-239
-117
-44
-247
-118
-39
-238
-123
-45
-241
-132
-59
-241
-145
-79
-249
-159
-103
-249
-174
-124
-240
-181
-138
-167
-142
-123
-91
-92
-89
-43
-57
-62
-48
-58
-59
-51
-62
-63
-48
-58
-59
-43
-57
-62
-63
-74
-74
-137
-127
-115
-234
-204
-183
-255
-215
-190
-146
-135
-124
-63
-74
-74
-43
-57
-62
-51
-62
-63
-115
-102
-92
-236
-186
-153
-251
-192
-154
-251
-192
-154
-236
-186
-153
-133
-120
-107
-43
-57
-62
-48
-58
-59
-48
-58
-59
-55
-66
-67
-158
-130
-108
-248
-180
-134
-250
-176
-132
-249
-174
-124
-249
-174
-124
-250
-176
-132
-252
-185
-144
-239
-182
-144
-154
-133
-118
-84
-85
-82
-43
-57
-62
-48
-58
-59
-48
-58
-59
-51
-62
-63
-48
-58
-59
-43
-57
-62
-70
-79
-77
-133
-120
-107
-219
-170
-138
-245
-179
-138
-250
-176
-132
-245
-169
-119
-247
-165
-111
-247
-165
-111
-245
-169
-119
-249
-174
-124
-187
-140
-108
-81
-77
-76
-43
-57
-62
-43
-57
-62
-99
-90
-79
-214
-151
-109
-249
-159
-103
-247
-150
-84
-247
-143
-74
-241
-138
-68
-241
-138
-68
-249
-146
-83
-249
-159
-103
-250
-176
-132
-250
-197
-158
-255
-215
-190
-255
-215
-190
-245
-212
-186
-161
-144
-134
-77
-85
-81
-43
-57
-62
-48
-58
-59
-51
-62
-63
-48
-58
-59
-41
-58
-57
-55
-66
-67
-120
-114
-108
-217
-187
-166
-97
-98
-96
-95
-78
-64
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-112
-85
-63
-70
-79
-77
-249
-189
-146
-247
-165
-111
-243
-141
-78
-247
-130
-53
-238
-116
-34
-236
-102
-14
-243
-101
-2
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-235
-94
-9
-235
-94
-9
-236
-102
-14
-235
-107
-16
-236
-108
-29
-239
-117
-44
-238
-123
-53
-242
-133
-67
-241
-145
-79
-241
-153
-96
-247
-165
-111
-249
-174
-124
-250
-176
-132
-245
-179
-138
-252
-185
-144
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-249
-189
-146
-252
-185
-144
-245
-179
-138
-250
-176
-132
-249
-174
-124
-245
-169
-119
-245
-162
-103
-241
-153
-96
-241
-145
-86
-243
-141
-78
-241
-138
-68
-242
-133
-67
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-53
-241
-132
-59
-242
-133
-67
-243
-141
-78
-241
-145
-86
-249
-159
-103
-238
-159
-107
-210
-156
-119
-210
-156
-119
-240
-181
-138
-249
-189
-146
-251
-192
-154
-251
-192
-154
-250
-197
-158
-212
-173
-150
-186
-157
-134
-167
-142
-123
-167
-142
-123
-195
-157
-134
-219
-170
-138
-248
-180
-134
-245
-169
-119
-245
-162
-103
-247
-150
-84
-243
-141
-78
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-138
-68
-247
-150
-84
-245
-162
-103
-245
-169
-119
-250
-176
-132
-239
-182
-144
-219
-170
-138
-186
-157
-134
-167
-142
-123
-167
-142
-123
-172
-150
-134
-195
-157
-134
-219
-170
-138
-239
-182
-144
-248
-180
-134
-245
-169
-119
-245
-162
-103
-241
-153
-96
-241
-145
-79
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-145
-79
-241
-153
-96
-247
-165
-111
-249
-174
-124
-245
-179
-138
-219
-170
-138
-186
-157
-134
-167
-142
-123
-167
-142
-123
-186
-157
-134
-212
-173
-150
-250
-197
-158
-251
-192
-154
-251
-192
-154
-249
-189
-146
-239
-182
-144
-219
-170
-138
-219
-170
-138
-239
-182
-144
-250
-197
-158
-250
-200
-166
-251
-209
-178
-238
-205
-179
-172
-150
-134
-137
-127
-115
-161
-144
-134
-217
-187
-166
-253
-212
-188
-227
-196
-175
-194
-173
-157
-176
-156
-141
-172
-150
-134
-187
-166
-150
-217
-187
-166
-255
-215
-190
-245
-212
-186
-76
-78
-76
-75
-74
-61
-158
-125
-46
-158
-125
-46
-158
-125
-46
-171
-129
-45
-105
-93
-60
-58
-69
-70
-217
-187
-166
-255
-215
-190
-253
-204
-176
-236
-186
-153
-210
-156
-119
-210
-156
-119
-247
-165
-111
-249
-159
-103
-249
-152
-92
-241
-145
-86
-243
-141
-78
-241
-145
-79
-247
-150
-84
-241
-153
-96
-245
-162
-103
-245
-169
-119
-248
-180
-134
-239
-182
-144
-209
-171
-139
-186
-157
-134
-167
-142
-123
-167
-142
-123
-178
-146
-122
-195
-157
-134
-230
-173
-136
-239
-182
-144
-250
-176
-132
-245
-169
-119
-247
-165
-111
-249
-159
-103
-241
-153
-96
-249
-152
-92
-249
-152
-92
-241
-153
-96
-245
-162
-103
-247
-165
-111
-210
-156
-119
-210
-156
-119
-230
-173
-136
-249
-189
-146
-249
-189
-146
-251
-192
-154
-250
-197
-158
-236
-186
-153
-203
-161
-131
-167
-142
-123
-167
-142
-123
-178
-146
-122
-203
-161
-131
-240
-181
-138
-249
-174
-124
-247
-165
-111
-241
-153
-96
-243
-141
-78
-242
-133
-67
-238
-123
-53
-238
-123
-45
-238
-123
-45
-238
-123
-45
-241
-132
-59
-241
-138
-68
-241
-145
-86
-249
-159
-103
-245
-169
-119
-250
-176
-132
-240
-181
-138
-209
-171
-139
-178
-146
-122
-167
-142
-123
-167
-142
-123
-186
-157
-134
-209
-171
-139
-240
-181
-138
-250
-176
-132
-245
-169
-119
-249
-159
-103
-241
-145
-86
-241
-138
-68
-241
-132
-59
-238
-123
-45
-238
-123
-45
-238
-123
-45
-247
-130
-53
-242
-133
-67
-241
-145
-79
-241
-153
-96
-247
-165
-111
-250
-176
-132
-240
-181
-138
-203
-161
-131
-178
-146
-122
-167
-142
-123
-167
-142
-123
-195
-157
-134
-236
-186
-153
-251
-192
-154
-251
-192
-154
-249
-189
-146
-249
-189
-146
-230
-173
-136
-203
-161
-131
-219
-170
-138
-245
-179
-138
-245
-179
-138
-245
-179
-138
-245
-179
-138
-248
-180
-134
-234
-168
-124
-214
-151
-109
-214
-151
-109
-245
-162
-103
-241
-145
-86
-241
-138
-68
-238
-123
-53
-239
-117
-44
-238
-116
-34
-236
-108
-29
-236
-108
-29
-238
-116
-34
-238
-123
-45
-241
-132
-59
-243
-141
-78
-241
-153
-96
-247
-165
-111
-249
-174
-124
-240
-181
-138
-209
-171
-139
-178
-146
-122
-167
-142
-123
-167
-142
-123
-195
-157
-134
-236
-186
-153
-250
-197
-158
-251
-192
-154
-249
-189
-146
-249
-189
-146
-230
-173
-136
-210
-156
-119
-210
-156
-119
-250
-176
-132
-249
-174
-124
-249
-174
-124
-249
-174
-124
-249
-174
-124
-250
-176
-132
-210
-156
-119
-162
-125
-96
-162
-125
-96
-214
-151
-109
-247
-165
-111
-245
-162
-103
-241
-153
-96
-241
-153
-96
-241
-153
-96
-249
-159
-103
-247
-165
-111
-245
-169
-119
-250
-176
-132
-240
-181
-138
-209
-171
-139
-186
-157
-134
-167
-142
-123
-167
-142
-123
-178
-146
-122
-203
-161
-131
-239
-182
-144
-248
-180
-134
-245
-169
-119
-245
-162
-103
-241
-153
-96
-241
-145
-86
-241
-145
-86
-241
-145
-86
-247
-150
-84
-241
-153
-96
-245
-162
-103
-238
-159
-107
-204
-141
-99
-214
-151
-109
-241
-153
-96
-249
-152
-92
-243
-141
-78
-242
-133
-67
-241
-132
-59
-241
-132
-59
-241
-138
-68
-241
-145
-79
-245
-162
-103
-248
-180
-134
-212
-173
-150
-146
-135
-124
-137
-127
-115
-176
-156
-141
-234
-204
-183
-253
-212
-188
-217
-187
-166
-187
-166
-150
-172
-150
-134
-176
-156
-141
-194
-173
-157
-234
-204
-183
-255
-215
-190
-194
-173
-157
-43
-57
-62
-139
-96
-61
-234
-126
-45
-224
-123
-55
-227
-126
-50
-227
-126
-50
-89
-75
-66
-101
-100
-92
-245
-179
-138
-245
-162
-103
-241
-138
-68
-238
-123
-45
-236
-108
-29
-236
-102
-14
-235
-94
-9
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-235
-94
-9
-235
-94
-9
-236
-102
-14
-235
-107
-16
-236
-108
-29
-238
-116
-34
-238
-123
-45
-241
-132
-59
-241
-138
-68
-241
-145
-79
-249
-152
-92
-241
-153
-96
-245
-162
-103
-245
-162
-103
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-245
-162
-103
-245
-162
-103
-241
-153
-96
-241
-153
-96
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-53
-241
-132
-59
-243
-141
-78
-241
-145
-86
-241
-153
-96
-245
-162
-103
-245
-162
-103
-247
-165
-111
-247
-165
-111
-245
-169
-119
-245
-169
-119
-245
-169
-119
-249
-174
-124
-245
-169
-119
-245
-169
-119
-245
-169
-119
-247
-165
-111
-241
-153
-96
-241
-145
-86
-243
-141
-78
-241
-132
-59
-238
-123
-53
-239
-117
-44
-238
-116
-34
-238
-116
-34
-238
-116
-34
-239
-117
-44
-238
-123
-45
-241
-132
-59
-241
-138
-68
-241
-145
-86
-241
-153
-96
-245
-162
-103
-245
-169
-119
-249
-174
-124
-250
-176
-132
-250
-176
-132
-250
-176
-132
-249
-174
-124
-245
-169
-119
-247
-165
-111
-241
-153
-96
-241
-145
-86
-243
-141
-78
-242
-133
-67
-241
-132
-59
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-241
-132
-59
-242
-133
-67
-243
-141
-78
-249
-152
-92
-245
-162
-103
-247
-165
-111
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-247
-165
-111
-247
-165
-111
-247
-165
-111
-247
-165
-111
-245
-169
-119
-249
-174
-124
-245
-179
-138
-251
-192
-154
-232
-190
-161
-101
-100
-92
-51
-62
-63
-63
-69
-60
-51
-62
-63
-55
-66
-67
-109
-106
-99
-176
-156
-141
-234
-204
-183
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-207
-178
-158
-91
-92
-89
-51
-62
-63
-129
-106
-52
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-75
-74
-61
-91
-92
-89
-245
-212
-186
-250
-200
-166
-252
-185
-144
-249
-174
-124
-247
-165
-111
-241
-153
-96
-241
-145
-79
-241
-138
-68
-242
-133
-67
-241
-132
-59
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-138
-68
-243
-141
-78
-241
-145
-86
-241
-153
-96
-247
-165
-111
-245
-169
-119
-249
-174
-124
-250
-176
-132
-250
-176
-132
-249
-174
-124
-249
-174
-124
-245
-169
-119
-245
-162
-103
-241
-153
-96
-241
-145
-86
-241
-145
-79
-241
-138
-68
-242
-133
-67
-242
-133
-67
-242
-133
-67
-241
-138
-68
-243
-141
-78
-241
-145
-86
-241
-153
-96
-241
-153
-96
-245
-162
-103
-245
-162
-103
-247
-165
-111
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-247
-165
-111
-245
-162
-103
-241
-153
-96
-241
-145
-79
-241
-138
-68
-238
-123
-53
-238
-123
-45
-238
-116
-34
-235
-113
-30
-235
-113
-30
-238
-116
-34
-239
-117
-44
-238
-123
-45
-241
-132
-59
-241
-138
-68
-241
-145
-86
-241
-153
-96
-245
-162
-103
-245
-169
-119
-245
-169
-119
-249
-174
-124
-249
-174
-124
-245
-169
-119
-245
-169
-119
-245
-162
-103
-241
-153
-96
-241
-145
-86
-241
-138
-68
-241
-132
-59
-238
-123
-45
-239
-117
-44
-238
-116
-34
-235
-113
-30
-235
-113
-30
-238
-116
-34
-238
-123
-45
-241
-132
-59
-241
-138
-68
-241
-145
-86
-241
-153
-96
-245
-162
-103
-247
-165
-111
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-247
-165
-111
-247
-165
-111
-247
-165
-111
-245
-162
-103
-245
-162
-103
-245
-162
-103
-245
-162
-103
-245
-162
-103
-245
-162
-103
-245
-162
-103
-245
-162
-103
-241
-153
-96
-241
-153
-96
-241
-145
-86
-243
-141
-78
-241
-132
-59
-238
-123
-53
-239
-117
-44
-235
-113
-30
-236
-108
-29
-235
-107
-16
-235
-107
-16
-236
-108
-29
-235
-113
-30
-239
-117
-44
-238
-123
-53
-242
-133
-67
-241
-145
-79
-241
-153
-96
-245
-162
-103
-247
-165
-111
-245
-169
-119
-245
-169
-119
-249
-174
-124
-245
-169
-119
-245
-169
-119
-245
-169
-119
-245
-169
-119
-247
-165
-111
-247
-165
-111
-245
-162
-103
-245
-162
-103
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-153
-96
-249
-152
-92
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-138
-68
-243
-141
-78
-241
-145
-86
-241
-153
-96
-245
-162
-103
-245
-169
-119
-245
-169
-119
-249
-174
-124
-249
-174
-124
-249
-174
-124
-245
-169
-119
-247
-165
-111
-241
-153
-96
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-138
-68
-243
-141
-78
-241
-145
-79
-241
-145
-79
-241
-145
-79
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-53
-242
-133
-67
-241
-145
-86
-247
-165
-111
-210
-156
-119
-63
-74
-74
-62
-63
-61
-69
-69
-61
-48
-58
-59
-63
-74
-74
-133
-120
-107
-194
-173
-157
-245
-212
-186
-255
-215
-190
-255
-215
-190
-255
-215
-190
-245
-212
-186
-176
-156
-141
-55
-66
-67
-76
-70
-64
-212
-120
-56
-227
-126
-50
-224
-123
-55
-234
-125
-52
-194
-112
-58
-56
-64
-60
-154
-133
-118
-250
-176
-132
-241
-153
-96
-242
-133
-67
-239
-117
-44
-236
-108
-29
-236
-102
-14
-235
-94
-9
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-236
-108
-29
-235
-113
-30
-239
-117
-44
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-138
-68
-241
-138
-68
-243
-141
-78
-243
-141
-78
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-79
-243
-141
-78
-243
-141
-78
-243
-141
-78
-241
-138
-68
-241
-138
-68
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-45
-238
-116
-34
-238
-116
-34
-236
-108
-29
-236
-108
-29
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-123
-45
-238
-123
-53
-241
-132
-59
-242
-133
-67
-241
-138
-68
-243
-141
-78
-243
-141
-78
-241
-145
-79
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-53
-239
-117
-44
-238
-116
-34
-236
-108
-29
-236
-108
-29
-235
-107
-16
-235
-107
-16
-236
-108
-29
-238
-116
-34
-239
-117
-44
-238
-123
-45
-241
-132
-59
-241
-138
-68
-243
-141
-78
-241
-145
-86
-249
-152
-92
-241
-153
-96
-241
-153
-96
-241
-153
-96
-249
-152
-92
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-53
-238
-123
-45
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-138
-68
-241
-145
-79
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-79
-241
-145
-79
-241
-145
-79
-241
-145
-86
-241
-153
-96
-245
-162
-103
-245
-169
-119
-245
-179
-138
-144
-125
-110
-51
-62
-63
-117
-98
-55
-158
-125
-46
-145
-114
-49
-105
-93
-60
-69
-69
-61
-48
-58
-59
-58
-69
-70
-91
-92
-89
-120
-114
-108
-120
-114
-108
-91
-92
-89
-48
-58
-59
-56
-64
-60
-123
-102
-54
-171
-129
-45
-158
-125
-46
-158
-125
-46
-168
-127
-42
-137
-110
-49
-48
-58
-59
-161
-144
-134
-250
-197
-158
-248
-180
-134
-247
-165
-111
-241
-153
-96
-241
-145
-79
-241
-138
-68
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-138
-68
-243
-141
-78
-241
-145
-86
-249
-152
-92
-241
-153
-96
-241
-153
-96
-241
-153
-96
-241
-145
-86
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-53
-238
-123
-45
-238
-123
-45
-239
-117
-44
-238
-123
-45
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-138
-68
-241
-138
-68
-243
-141
-78
-241
-145
-79
-241
-145
-79
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-79
-243
-141
-78
-242
-133
-67
-241
-132
-59
-238
-123
-45
-238
-116
-34
-235
-113
-30
-236
-108
-29
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-108
-29
-235
-113
-30
-239
-117
-44
-238
-123
-45
-241
-132
-59
-241
-138
-68
-243
-141
-78
-241
-145
-86
-241
-145
-86
-241
-153
-96
-241
-153
-96
-241
-145
-86
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-45
-239
-117
-44
-235
-113
-30
-236
-108
-29
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-108
-29
-235
-113
-30
-239
-117
-44
-238
-123
-45
-241
-132
-59
-242
-133
-67
-243
-141
-78
-241
-145
-79
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-79
-241
-145
-79
-243
-141
-78
-243
-141
-78
-243
-141
-78
-243
-141
-78
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-138
-68
-242
-133
-67
-241
-132
-59
-238
-123
-53
-238
-123
-45
-238
-116
-34
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-238
-116
-34
-238
-123
-45
-238
-123
-53
-242
-133
-67
-241
-138
-68
-241
-145
-79
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-86
-241
-145
-79
-243
-141
-78
-243
-141
-78
-241
-138
-68
-241
-138
-68
-241
-138
-68
-242
-133
-67
-242
-133
-67
-242
-133
-67
-241
-138
-68
-241
-138
-68
-241
-138
-68
-241
-138
-68
-242
-133
-67
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-138
-68
-243
-141
-78
-241
-145
-86
-241
-145
-86
-241
-153
-96
-241
-153
-96
-241
-145
-86
-241
-145
-86
-243
-141
-78
-241
-138
-68
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-239
-117
-44
-239
-117
-44
-239
-117
-44
-238
-123
-45
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-239
-117
-44
-239
-117
-44
-238
-123
-53
-242
-133
-67
-241
-145
-86
-238
-159
-107
-84
-85
-82
-69
-69
-61
-188
-112
-56
-214
-121
-50
-173
-106
-60
-112
-85
-63
-62
-63
-61
-41
-58
-57
-63
-74
-74
-97
-98
-96
-120
-114
-108
-109
-106
-99
-77
-85
-81
-41
-58
-57
-81
-73
-62
-194
-112
-58
-234
-125
-52
-224
-123
-55
-224
-123
-55
-234
-126
-45
-125
-90
-64
-51
-62
-63
-209
-171
-139
-245
-169
-119
-241
-145
-86
-241
-132
-59
-238
-116
-34
-235
-107
-16
-236
-102
-14
-235
-94
-9
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-237
-95
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-235
-94
-9
-235
-94
-9
-236
-102
-14
-235
-107
-16
-236
-108
-29
-235
-113
-30
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-45
-238
-123
-45
-239
-117
-44
-239
-117
-44
-238
-116
-34
-235
-113
-30
-236
-108
-29
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-238
-116
-34
-239
-117
-44
-239
-117
-44
-238
-123
-45
-238
-123
-45
-238
-123
-53
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-123
-45
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-236
-108
-29
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-138
-68
-241
-145
-86
-238
-159
-107
-234
-168
-124
-84
-85
-82
-83
-78
-61
-171
-129
-45
-158
-125
-46
-168
-127
-42
-168
-127
-42
-158
-125
-46
-129
-106
-52
-100
-89
-56
-83
-78
-61
-75
-74
-61
-69
-69
-61
-83
-78
-61
-105
-93
-60
-152
-119
-47
-168
-127
-42
-158
-125
-46
-158
-125
-46
-161
-127
-40
-168
-127
-42
-75
-74
-61
-63
-74
-74
-236
-186
-153
-245
-179
-138
-238
-159
-107
-241
-145
-86
-241
-138
-68
-241
-132
-59
-238
-123
-45
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-45
-238
-123
-53
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-123
-45
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-45
-238
-116
-34
-235
-113
-30
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-123
-45
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-239
-117
-44
-239
-117
-44
-238
-116
-34
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-53
-238
-123
-53
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-239
-117
-44
-239
-117
-44
-239
-117
-44
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-238
-123
-45
-239
-117
-44
-239
-117
-44
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-239
-117
-44
-238
-123
-45
-238
-123
-53
-238
-123
-53
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-241
-132
-59
-238
-123
-53
-238
-123
-45
-239
-117
-44
-238
-116
-34
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-123
-45
-241
-132
-59
-241
-145
-86
-204
-141
-99
-41
-58
-57
-155
-100
-63
-234
-126
-45
-227
-126
-50
-227
-126
-50
-234
-125
-52
-209
-117
-53
-155
-100
-63
-118
-86
-65
-89
-75
-66
-81
-73
-62
-81
-73
-62
-106
-82
-65
-155
-100
-63
-214
-121
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-194
-112
-58
-56
-64
-60
-109
-106
-99
-245
-179
-138
-245
-162
-103
-241
-138
-68
-238
-123
-45
-235
-113
-30
-236
-102
-14
-235
-94
-9
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-235
-113
-30
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-230
-97
-5
-230
-97
-5
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-113
-30
-235
-113
-30
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-239
-117
-44
-239
-117
-44
-239
-117
-44
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-235
-113
-30
-238
-116
-34
-238
-123
-45
-238
-123
-53
-241
-138
-68
-241
-145
-86
-238
-159
-107
-89
-84
-82
-75
-74
-61
-168
-127
-42
-168
-127
-42
-158
-125
-46
-158
-125
-46
-161
-127
-40
-168
-127
-42
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-95
-87
-59
-48
-58
-59
-167
-142
-123
-245
-179
-138
-238
-159
-107
-241
-145
-86
-242
-133
-67
-238
-123
-45
-238
-116
-34
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-239
-117
-44
-239
-117
-44
-239
-117
-44
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-113
-30
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-235
-113
-30
-235
-113
-30
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-230
-97
-5
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-235
-113
-30
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-236
-108
-29
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-113
-30
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-238
-116
-34
-235
-113
-30
-236
-108
-29
-236
-108
-29
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-236
-108
-29
-236
-108
-29
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-108
-29
-235
-113
-30
-239
-117
-44
-241
-132
-59
-241
-145
-79
-204
-141
-99
-48
-58
-59
-139
-96
-61
-234
-126
-45
-224
-123
-55
-224
-123
-55
-224
-123
-55
-227
-126
-50
-234
-126
-45
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-126
-45
-234
-126
-45
-227
-126
-50
-224
-123
-55
-224
-123
-55
-234
-125
-52
-214
-121
-50
-81
-73
-62
-58
-69
-70
-219
-170
-138
-245
-169
-119
-241
-145
-86
-241
-132
-59
-239
-117
-44
-236
-108
-29
-236
-102
-14
-235
-94
-9
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-235
-94
-9
-230
-97
-5
-229
-102
-7
-229
-102
-7
-236
-102
-14
-236
-102
-14
-224
-98
-18
-224
-98
-18
-224
-98
-18
-236
-102
-14
-224
-98
-18
-236
-102
-14
-236
-102
-14
-224
-98
-18
-224
-98
-18
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-224
-98
-18
-236
-102
-14
-236
-102
-14
-229
-102
-7
-229
-102
-7
-230
-97
-5
-235
-94
-9
-235
-94
-9
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-235
-94
-9
-230
-97
-5
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-224
-98
-18
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-235
-94
-9
-230
-97
-5
-229
-102
-7
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-224
-98
-18
-236
-102
-14
-229
-102
-7
-230
-97
-5
-235
-94
-9
-235
-94
-9
-230
-97
-5
-231
-91
-2
-230
-97
-5
-235
-94
-9
-235
-94
-9
-235
-94
-9
-230
-97
-5
-229
-102
-7
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-224
-98
-18
-236
-102
-14
-235
-107
-16
-236
-108
-29
-239
-117
-44
-234
-125
-52
-231
-136
-72
-241
-153
-96
-162
-125
-96
-48
-58
-59
-95
-87
-59
-158
-125
-46
-171
-129
-45
-168
-127
-42
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-158
-125
-46
-168
-127
-42
-171
-129
-45
-158
-125
-46
-95
-87
-59
-48
-58
-59
-124
-111
-99
-245
-179
-138
-247
-165
-111
-241
-145
-86
-241
-132
-59
-238
-123
-45
-238
-116
-34
-236
-108
-29
-224
-98
-18
-229
-102
-7
-230
-97
-5
-235
-94
-9
-235
-94
-9
-230
-97
-5
-230
-97
-5
-230
-97
-5
-235
-94
-9
-230
-97
-5
-229
-102
-7
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-94
-9
-230
-97
-5
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-236
-102
-14
-224
-98
-18
-224
-98
-18
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-224
-98
-18
-236
-102
-14
-229
-102
-7
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-229
-102
-7
-236
-102
-14
-224
-98
-18
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-224
-98
-18
-236
-102
-14
-229
-102
-7
-230
-97
-5
-235
-94
-9
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-235
-94
-9
-235
-94
-9
-229
-102
-7
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-235
-107
-16
-236
-102
-14
-224
-98
-18
-224
-98
-18
-236
-102
-14
-224
-98
-18
-224
-98
-18
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-229
-102
-7
-236
-102
-14
-235
-94
-9
-230
-97
-5
-235
-94
-9
-235
-94
-9
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-235
-94
-9
-230
-97
-5
-230
-97
-5
-229
-102
-7
-236
-102
-14
-224
-98
-18
-236
-102
-14
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-224
-98
-18
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-236
-102
-14
-224
-98
-18
-236
-102
-14
-236
-102
-14
-236
-102
-14
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-236
-102
-14
-236
-102
-14
-224
-98
-18
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-235
-107
-16
-236
-102
-14
-236
-102
-14
-236
-102
-14
-229
-102
-7
-230
-97
-5
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-235
-94
-9
-230
-97
-5
-235
-94
-9
-236
-102
-14
-236
-102
-14
-236
-102
-14
-229
-102
-7
-230
-97
-5
-229
-102
-7
-224
-98
-18
-236
-108
-29
-238
-116
-34
-238
-123
-53
-243
-141
-78
-241
-153
-96
-99
-90
-79
-56
-64
-60
-155
-100
-63
-234
-126
-45
-234
-126
-45
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-227
-126
-50
-224
-123
-55
-224
-123
-55
-227
-126
-50
-227
-126
-50
-234
-126
-45
-194
-112
-58
-81
-73
-62
-48
-58
-59
-178
-146
-122
-249
-174
-124
-241
-153
-96
-231
-136
-72
-234
-125
-52
-238
-116
-34
-235
-107
-16
-229
-102
-7
-235
-94
-9
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-229
-102
-7
-236
-102
-14
-235
-113
-30
-239
-117
-44
-230
-128
-60
-236
-147
-85
-238
-159
-107
-139
-115
-96
-48
-58
-59
-69
-69
-61
-111
-94
-57
-145
-114
-49
-158
-125
-46
-168
-127
-42
-171
-129
-45
-168
-127
-42
-168
-127
-42
-168
-127
-42
-168
-127
-42
-171
-129
-45
-168
-127
-42
-152
-119
-47
-117
-98
-55
-69
-69
-61
-48
-58
-59
-144
-125
-110
-240
-181
-138
-247
-165
-111
-236
-147
-85
-242
-133
-67
-238
-123
-45
-235
-113
-30
-235
-107
-16
-236
-102
-14
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-230
-97
-5
-229
-102
-7
-235
-107
-16
-235
-113
-30
-238
-123
-45
-242
-133
-67
-241
-153
-96
-214
-151
-109
-99
-90
-79
-48
-58
-59
-95
-78
-64
-155
-100
-63
-209
-117
-53
-227
-126
-50
-234
-125
-52
-234
-125
-52
-234
-125
-52
-234
-125
-52
-234
-125
-52
-234
-126
-45
-234
-126
-45
-227
-126
-50
-194
-112
-58
-125
-90
-64
-56
-64
-60
-58
-69
-70
-178
-146
-122
-250
-176
-132
-238
-159
-107
-241
-145
-79
-234
-125
-52
-239
-117
-44
-236
-108
-29
-224
-98
-18
-230
-97
-5
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-230
-97
-5
-229
-102
-7
-223
-103
-18
-226
-110
-35
-234
-125
-52
-231
-136
-72
-241
-153
-96
-245
-169
-119
-178
-146
-122
-101
-100
-92
-48
-58
-59
-56
-64
-60
-69
-69
-61
-95
-87
-59
-111
-94
-57
-123
-102
-54
-129
-106
-52
-129
-106
-52
-123
-102
-54
-105
-93
-60
-88
-82
-59
-62
-63
-61
-48
-58
-59
-91
-92
-89
-186
-157
-134
-245
-179
-138
-238
-159
-107
-236
-147
-85
-230
-128
-60
-234
-125
-52
-226
-110
-35
-223
-103
-18
-224
-98
-18
-230
-97
-5
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-230
-97
-5
-224
-98
-18
-236
-108
-29
-239
-117
-44
-230
-123
-57
-243
-141
-78
-238
-159
-107
-234
-168
-124
-158
-130
-108
-76
-78
-76
-41
-58
-57
-62
-63
-61
-95
-78
-64
-125
-90
-64
-146
-97
-64
-163
-104
-61
-173
-106
-60
-163
-104
-61
-155
-100
-63
-125
-90
-64
-95
-78
-64
-56
-64
-60
-43
-57
-62
-124
-111
-99
-209
-171
-139
-234
-168
-124
-238
-159
-107
-241
-145
-79
-230
-128
-60
-239
-117
-44
-236
-108
-29
-236
-102
-14
-229
-102
-7
-230
-97
-5
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-231
-91
-2
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-226
-93
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-230
-97
-5
-230
-97
-5
-224
-98
-18
-236
-108
-29
-226
-110
-35
-230
-123
-57
-231
-136
-72
-241
-153
-96
-238
-159
-107
-240
-181
-138
-203
-161
-131
-150
-125
-114
-101
-100
-92
-76
-78
-76
-55
-66
-67
-48
-58
-59
-48
-58
-59
-48
-58
-59
-48
-58
-59
-58
-69
-70
-84
-85
-82
-124
-111
-99
-178
-146
-122
-240
-181
-138
-234
-168
-124
-238
-159
-107
-236
-147
-85
-230
-128
-60
-234
-125
-52
-226
-110
-35
-223
-103
-18
-224
-98
-18
-230
-97
-5
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-230
-97
-5
-224
-98
-18
-223
-103
-18
-226
-110
-35
-225
-124
-48
-230
-128
-60
-236
-147
-85
-241
-153
-96
-234
-168
-124
-230
-173
-136
-186
-157
-134
-133
-120
-107
-91
-92
-89
-63
-74
-74
-51
-62
-63
-48
-58
-59
-48
-58
-59
-48
-58
-59
-51
-62
-63
-63
-74
-74
-91
-92
-89
-144
-125
-110
-203
-161
-131
-240
-181
-138
-245
-169
-119
-241
-153
-96
-241
-145
-79
-230
-128
-60
-225
-124
-48
-226
-110
-35
-223
-103
-18
-224
-98
-18
-230
-97
-5
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-230
-97
-5
-224
-98
-18
-223
-103
-18
-226
-110
-35
-239
-117
-44
-230
-123
-57
-231
-136
-72
-236
-147
-85
-238
-159
-107
-245
-169
-119
-234
-168
-124
-240
-181
-138
-239
-182
-144
-236
-186
-153
-250
-197
-158
-250
-197
-158
-250
-197
-158
-251
-192
-154
-236
-186
-153
-239
-182
-144
-245
-179
-138
-234
-168
-124
-238
-159
-107
-241
-153
-96
-231
-136
-72
-230
-128
-60
-225
-124
-48
-226
-110
-35
-223
-103
-18
-224
-98
-18
-230
-97
-5
-230
-97
-5
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-230
-97
-5
-224
-98
-18
-223
-103
-18
-226
-110
-35
-225
-124
-48
-230
-128
-60
-231
-136
-72
-241
-153
-96
-238
-159
-107
-234
-168
-124
-240
-181
-138
-239
-182
-144
-236
-186
-153
-251
-192
-154
-250
-197
-158
-250
-197
-158
-250
-197
-158
-236
-186
-153
-239
-182
-144
-240
-181
-138
-234
-168
-124
-245
-169
-119
-238
-159
-107
-236
-147
-85
-231
-136
-72
-230
-123
-57
-239
-117
-44
-226
-110
-35
-223
-103
-18
-224
-98
-18
-230
-97
-5
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-225
-92
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-220
-93
-11
-220
-93
-11
-224
-98
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-225
-124
-48
-230
-128
-60
-231
-136
-72
-236
-147
-85
-241
-153
-96
-238
-159
-107
-238
-159
-107
-234
-168
-124
-234
-168
-124
-234
-168
-124
-234
-168
-124
-234
-168
-124
-238
-159
-107
-238
-159
-107
-241
-153
-96
-236
-147
-85
-231
-136
-72
-230
-128
-60
-230
-123
-57
-226
-110
-35
-226
-110
-35
-223
-103
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-220
-93
-11
-220
-93
-11
-224
-98
-18
-223
-103
-18
-226
-110
-35
-225
-124
-48
-230
-123
-57
-230
-128
-60
-231
-136
-72
-236
-147
-85
-241
-153
-96
-238
-159
-107
-238
-159
-107
-234
-168
-124
-234
-168
-124
-234
-168
-124
-234
-168
-124
-234
-168
-124
-238
-159
-107
-238
-159
-107
-241
-153
-96
-236
-147
-85
-231
-136
-72
-230
-128
-60
-225
-124
-48
-226
-110
-35
-226
-110
-35
-223
-103
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-220
-93
-11
-220
-93
-11
-220
-93
-11
-224
-98
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-225
-124
-48
-230
-128
-60
-230
-128
-60
-231
-136
-72
-231
-136
-72
-236
-147
-85
-236
-147
-85
-236
-147
-85
-236
-147
-85
-236
-147
-85
-231
-136
-72
-231
-136
-72
-231
-136
-72
-230
-128
-60
-227
-126
-50
-225
-124
-48
-226
-110
-35
-223
-103
-18
-223
-103
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-218
-87
-5
-220
-93
-11
-220
-93
-11
-224
-98
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-225
-124
-48
-230
-123
-57
-230
-128
-60
-231
-136
-72
-231
-136
-72
-231
-136
-72
-236
-147
-85
-236
-147
-85
-236
-147
-85
-236
-147
-85
-236
-147
-85
-231
-136
-72
-231
-136
-72
-230
-128
-60
-230
-123
-57
-225
-124
-48
-226
-110
-35
-226
-110
-35
-223
-103
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-220
-93
-11
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-218
-87
-5
-218
-87
-5
-220
-93
-11
-220
-93
-11
-224
-98
-18
-223
-103
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-225
-124
-48
-225
-124
-48
-225
-124
-48
-224
-123
-55
-224
-123
-55
-224
-123
-55
-230
-123
-57
-224
-123
-55
-224
-123
-55
-225
-124
-48
-225
-124
-48
-226
-110
-35
-226
-110
-35
-223
-103
-18
-223
-103
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-218
-87
-5
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-218
-87
-5
-218
-87
-5
-220
-93
-11
-220
-93
-11
-220
-93
-11
-224
-98
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-226
-110
-35
-225
-124
-48
-225
-124
-48
-224
-123
-55
-230
-123
-57
-230
-123
-57
-230
-123
-57
-230
-123
-57
-230
-123
-57
-225
-124
-48
-225
-124
-48
-226
-110
-35
-226
-110
-35
-226
-110
-35
-223
-103
-18
-224
-98
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-221
-89
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-218
-87
-5
-218
-87
-5
-218
-87
-5
-220
-93
-11
-220
-93
-11
-224
-98
-18
-224
-98
-18
-224
-98
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-223
-103
-18
-223
-103
-18
-224
-98
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-218
-87
-5
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-220
-93
-11
-220
-93
-11
-224
-98
-18
-224
-98
-18
-223
-103
-18
-223
-103
-18
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-226
-110
-35
-223
-103
-18
-224
-98
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-220
-93
-11
-218
-87
-5
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-220
-93
-11
-220
-93
-11
-220
-93
-11
-220
-93
-11
-224
-98
-18
-224
-98
-18
-224
-98
-18
-224
-98
-18
-224
-98
-18
-224
-98
-18
-220
-93
-11
-224
-98
-18
-220
-93
-11
-220
-93
-11
-220
-93
-11
-218
-87
-5
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-218
-87
-5
-217
-86
-3
-218
-87
-5
-218
-87
-5
-218
-87
-5
-220
-93
-11
-220
-93
-11
-220
-93
-11
-220
-93
-11
-220
-93
-11
-224
-98
-18
-224
-98
-18
-224
-98
-18
-224
-98
-18
-224
-98
-18
-220
-93
-11
-220
-93
-11
-220
-93
-11
-220
-93
-11
-220
-93
-11
-218
-87
-5
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-218
-87
-5
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-217
-86
-3
-217
-86
-3
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
-214
-84
-0
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch b/recipes-kernel/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch
deleted file mode 100644
index eafc4d3..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 8548db6d3cf115b29142f803d701122dc4cbb775 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 31 Dec 2010 13:35:02 +0530
-Subject: [PATCH 01/20] OMAP3: PM: Adding T2 enabling of smartreflex
-
-The smartreflex bit on twl4030 needs to be enabled by default irrespective
-of whether smartreflex module is enabled on the OMAP side or not.
-This is because without this bit enabled the voltage scaling through
-vp forceupdate does not function properly on OMAP3.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/omap_twl.c |   16 ++++++++++++++++
- 1 files changed, 16 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c
-index 15f8c6c..a59f36b 100644
---- a/arch/arm/mach-omap2/omap_twl.c
-+++ b/arch/arm/mach-omap2/omap_twl.c
-@@ -58,7 +58,9 @@
- static bool is_offset_valid;
- static u8 smps_offset;
- 
-+#define TWL4030_DCDC_GLOBAL_CFG	0x06
- #define REG_SMPS_OFFSET         0xE0
-+#define SMARTREFLEX_ENABLE	BIT(3)
- 
- unsigned long twl4030_vsel_to_uv(const u8 vsel)
- {
-@@ -256,6 +258,7 @@ int __init omap4_twl_init(void)
- int __init omap3_twl_init(void)
- {
- 	struct voltagedomain *voltdm;
-+	u8 temp;
- 
- 	if (!cpu_is_omap34xx())
- 		return -ENODEV;
-@@ -267,6 +270,19 @@ int __init omap3_twl_init(void)
- 		omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX;
- 	}
- 
-+	/*
-+	 * The smartreflex bit on twl4030 needs to be enabled by
-+	 * default irrespective of whether smartreflex module is
-+	 * enabled on the OMAP side or not. This is because without
-+	 * this bit enabled the voltage scaling through
-+	 * vp forceupdate does not function properly on OMAP3.
-+	 */
-+	twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &temp,
-+			TWL4030_DCDC_GLOBAL_CFG);
-+	temp |= SMARTREFLEX_ENABLE;
-+	twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp,
-+			TWL4030_DCDC_GLOBAL_CFG);
-+
- 	voltdm = omap_voltage_domain_lookup("mpu");
- 	omap_voltage_register_pmic(voltdm, &omap3_mpu_volt_info);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch b/recipes-kernel/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch
deleted file mode 100644
index b6512a5..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From e446cbf4aa8359d58180a81282df70045b8a41c1 Mon Sep 17 00:00:00 2001
-From: Peter 'p2' De Schrijver <peter.de-schrijver at nokia.com>
-Date: Wed, 11 Aug 2010 17:02:43 -0700
-Subject: [PATCH 02/20] OMAP: CPUfreq: ensure driver initializes after cpufreq framework and governors
-
-Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver at nokia.com>
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
----
- arch/arm/plat-omap/cpu-omap.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
-index 11c54ec..79d2155 100644
---- a/arch/arm/plat-omap/cpu-omap.c
-+++ b/arch/arm/plat-omap/cpu-omap.c
-@@ -160,7 +160,7 @@ static int __init omap_cpufreq_init(void)
- 	return cpufreq_register_driver(&omap_driver);
- }
- 
--arch_initcall(omap_cpufreq_init);
-+late_initcall(omap_cpufreq_init);
- 
- /*
-  * if ever we want to remove this, upon cleanup call:
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch b/recipes-kernel/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch
deleted file mode 100644
index c6826e3..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 647691beb64312327646a84dc161faf35935e7f7 Mon Sep 17 00:00:00 2001
-From: Kevin Hilman <khilman at deeprootsystems.com>
-Date: Wed, 11 Aug 2010 17:05:38 -0700
-Subject: [PATCH 03/20] OMAP: CPUfreq: ensure policy is fully initialized
-
-Ensure policy min/max/cur values are initialized when OMAP
-CPUfreq driver starts.
-
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
----
- arch/arm/plat-omap/cpu-omap.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
-index 79d2155..bfa063b 100644
---- a/arch/arm/plat-omap/cpu-omap.c
-+++ b/arch/arm/plat-omap/cpu-omap.c
-@@ -126,6 +126,10 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
- 							VERY_HI_RATE) / 1000;
- 	}
- 
-+	policy->min = policy->cpuinfo.min_freq;
-+	policy->max = policy->cpuinfo.max_freq;
-+	policy->cur = omap_getspeed(0);
-+
- 	/* FIXME: what's the actual transition time? */
- 	policy->cpuinfo.transition_latency = 300 * 1000;
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch b/recipes-kernel/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch
deleted file mode 100644
index 0371bc3..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch
+++ /dev/null
@@ -1,269 +0,0 @@
-From f6b96e3b9e31da193189d92320b3dd9fac7c9ba9 Mon Sep 17 00:00:00 2001
-From: Rajendra Nayak <rnayak at ti.com>
-Date: Mon, 10 Nov 2008 17:00:25 +0530
-Subject: [PATCH 04/20] OMAP3 PM: CPUFreq driver for OMAP3
-
-CPUFreq driver for OMAP3
-
-With additional fixes and cleanups from Tero Kristo:
-- Fix rate calculation bug in omap3_select_table_rate
-- Refreshed DVFS VDD1 control against latest clock fw
-
-Signed-off-by: Tero Kristo <tero.kristo at nokia.com>
-Signed-off-by: Rajendra Nayak <rnayak at ti.com>
-
-OMAP3: PM: CPUFreq: Fix omap_getspeed.
-
-Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver at nokia.com>
-
-Make sure omap cpufreq driver initializes after cpufreq framework and governors
-
-Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver at nokia.com>
-
-merge: CPUFreq: remove obsolete funcs
-
-OMAP3 clock: Update cpufreq driver
-
-This patch removes all refrences to virtual clock
-nodes in CPUFreq driver.
-
-Signed-off-by: Rajendra Nayak <rnayak at ti.com>
-Signed-off-by: Tero Kristo <tero.kristo at nokia.com>
-Signed-off-by: Jean Pihet <jpihet at mvista.com>
-
-PM: Prevent direct cpufreq scaling during initialization
-
-It is seen that the OMAP specific cpufreq initialization code tries to
-scale the MPU frequency to the highest possible without taking care of
-the voltage level. On power on reset the power IC does not provide the
-necessary voltage for the highest available MPU frequency (that would
-satisfy all Si families). This potentially is an window of opportunity
-for things to go wrong.
-
-Signed-off-by: Romit Dasgupta <romit at ti.com>
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
-
-OMAP3: PM: enable 600MHz (overdrive) OPP
-
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
-
-omap3: introduce cpufreq
-
-OMAP OPP layer functions now have dependencies of CONFIG_CPU_FREQ only.
-
-With this patch, omap opp layer now has its compilation flags
-bound to CONFIG_CPU_FREQ. Also its code has been removed from pm34xx.c.
-
-A new file has been created to contain cpu freq code related to
-OMAP3: cpufreq34xx.c
-
-OMAP34xx and OMAP36xx family OPPs are made available
-
-Signed-off-by: Eduardo Valentin <eduardo.valentin at nokia.com>
-Signed-off-by: Paul Walmsley <paul at pwsan.com>
-Signed-off-by: Nishanth Menon <nm at ti.com>
-Signed-off-by: Vishwanath BS <vishwanath.bs at ti.com>
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
-Signed-off-by: Romit Dasgupta <romit at ti.com>
-Signed-off-by: Rajendra Nayak <rnayak at ti.com>
-
-omap3: cpufreq: allow default opp table init
-
-For board files which choose to override the defaults, the existing
-mechanism will work, for boards that would like to work with defaults,
-allow init_common_hw to call init_opp_table to initialize if not
-already initialized. this will allow all omap boards which have opp
-tables predefined for a silicon to use the same.
-
-Originally reported for overo:
-http://marc.info/?t=127265269400004&r=1&w=2
-
-Signed-off-by: Nishanth Menon <nm at ti.com>
-Reported-by: Peter Tseng <tsenpet09 at gmail.com>
-Cc: Cliff Brake <cliff.brake at gmail.com>
-Cc: Kevin Hilman <khilman at deeprootsystems.com>
-
-OMAP2: update OPP data to be device based
-
-Cc: Nishanth Menon <nm at ti.com>
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
-
-OMAP3: CPUfreq: update to device-based OPP API
-
-Update usage of OPP API to use new device-based API.  This requires
-getting the 'struct device' for the MPU and using that with the OPP
-API.
-
-Signed-off-by: Kevin Hilman <khilman at deeprootsystems.com>
-
-omap3: opp: make independent of cpufreq
-
-Make opp3xx data which is registered with the opp layer
-dependent purely on CONFIG_PM as opp layer and pm.c users
-are CONFIG_PM dependent not cpufreq dependent.
-so we rename the data definition to opp3xxx_data.c (inline with what
-we have for omap2), also move the build definition to be under
-the existing CONFIG_PM build instead of CPUFREQ.
-
-Cc: Eduardo Valentin <eduardo.valentin at nokia.com>
-Cc: Kevin Hilman <khilman at deeprootsystems.com>
-Cc: Paul Walmsley <paul at pwsan.com>
-Cc: Rajendra Nayak <rnayak at ti.com>
-Cc: Sanjeev Premi <premi at ti.com>
-Cc: Thara Gopinath <thara at ti.com>
-Cc: Tony Lindgren <tony at atomide.com>
-
-Signed-off-by: Nishanth Menon <nm at ti.com>
----
- arch/arm/mach-omap2/clock.h     |   14 +++++++++++++-
- arch/arm/mach-omap2/clock34xx.c |    2 ++
- arch/arm/plat-omap/cpu-omap.c   |   35 ++++++++++++++++++++++++++++++++---
- 3 files changed, 47 insertions(+), 4 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
-index 896584e..29b5cf0 100644
---- a/arch/arm/mach-omap2/clock.h
-+++ b/arch/arm/mach-omap2/clock.h
-@@ -137,7 +137,9 @@ extern const struct clksel_rate gpt_32k_rates[];
- extern const struct clksel_rate gpt_sys_rates[];
- extern const struct clksel_rate gfx_l3_rates[];
- 
--#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ)
-+#ifdef CONFIG_CPU_FREQ
-+
-+#ifdef CONFIG_ARCH_OMAP2
- extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
- extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
- #else
-@@ -145,6 +147,16 @@ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table)
- #define omap2_clk_exit_cpufreq_table	0
- #endif
- 
-+#ifdef CONFIG_ARCH_OMAP3
-+extern void omap3_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
-+extern void omap3_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
-+#else
-+#define omap3_clk_init_cpufreq_table	0
-+#define omap3_clk_exit_cpufreq_table	0
-+#endif
-+
-+#endif /* CONFIG_CPU_FREQ */
-+
- extern const struct clkops clkops_omap3_noncore_dpll_ops;
- 
- #endif
-diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
-index 287abc4..85d3877 100644
---- a/arch/arm/mach-omap2/clock34xx.c
-+++ b/arch/arm/mach-omap2/clock34xx.c
-@@ -20,6 +20,8 @@
- #include <linux/kernel.h>
- #include <linux/clk.h>
- #include <linux/io.h>
-+#include <linux/err.h>
-+#include <linux/cpufreq.h>
- 
- #include <plat/clock.h>
- 
-diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
-index bfa063b..608216b 100644
---- a/arch/arm/plat-omap/cpu-omap.c
-+++ b/arch/arm/plat-omap/cpu-omap.c
-@@ -8,6 +8,10 @@
-  *
-  *  Based on cpu-sa1110.c, Copyright (C) 2001 Russell King
-  *
-+ * Copyright (C) 2007-2008 Texas Instruments, Inc.
-+ * Updated to support OMAP3
-+ * Rajendra Nayak <rnayak at ti.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.
-@@ -21,17 +25,25 @@
- #include <linux/err.h>
- #include <linux/clk.h>
- #include <linux/io.h>
-+#include <linux/opp.h>
- 
- #include <mach/hardware.h>
- #include <plat/clock.h>
-+#include <plat/common.h>
- #include <asm/system.h>
- 
-+#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
-+#include <plat/omap-pm.h>
-+#endif
-+
- #define VERY_HI_RATE	900000000
- 
- static struct cpufreq_frequency_table *freq_table;
- 
- #ifdef CONFIG_ARCH_OMAP1
- #define MPU_CLK		"mpu"
-+#elif CONFIG_ARCH_OMAP3
-+#define MPU_CLK		"arm_fck"
- #else
- #define MPU_CLK		"virt_prcm_set"
- #endif
-@@ -73,7 +85,13 @@ static int omap_target(struct cpufreq_policy *policy,
- 		       unsigned int target_freq,
- 		       unsigned int relation)
- {
-+#ifdef CONFIG_ARCH_OMAP1
- 	struct cpufreq_freqs freqs;
-+#endif
-+#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
-+	unsigned long freq;
-+	struct device *mpu_dev = omap2_get_mpuss_device();
-+#endif
- 	int ret = 0;
- 
- 	/* Ensure desired rate is within allowed range.  Some govenors
-@@ -83,13 +101,13 @@ static int omap_target(struct cpufreq_policy *policy,
- 	if (target_freq > policy->max)
- 		target_freq = policy->max;
- 
-+#ifdef CONFIG_ARCH_OMAP1
- 	freqs.old = omap_getspeed(0);
- 	freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000;
- 	freqs.cpu = 0;
- 
- 	if (freqs.old == freqs.new)
- 		return ret;
--
- 	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
- #ifdef CONFIG_CPU_FREQ_DEBUG
- 	printk(KERN_DEBUG "cpufreq-omap: transition: %u --> %u\n",
-@@ -97,7 +115,11 @@ static int omap_target(struct cpufreq_policy *policy,
- #endif
- 	ret = clk_set_rate(mpu_clk, freqs.new * 1000);
- 	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
--
-+#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
-+	freq = target_freq * 1000;
-+	if (opp_find_freq_ceil(mpu_dev, &freq))
-+		omap_pm_cpu_set_freq(freq);
-+#endif
- 	return ret;
- }
- 
-@@ -114,7 +136,14 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
- 
- 	policy->cur = policy->min = policy->max = omap_getspeed(0);
- 
--	clk_init_cpufreq_table(&freq_table);
-+	if (!cpu_is_omap34xx()) {
-+		clk_init_cpufreq_table(&freq_table);
-+	} else {
-+		struct device *mpu_dev = omap2_get_mpuss_device();
-+
-+		opp_init_cpufreq_table(mpu_dev, &freq_table);
-+	}
-+
- 	if (freq_table) {
- 		result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
- 		if (!result)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch b/recipes-kernel/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch
deleted file mode 100644
index b843704..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 25ea605d0aaf1d60030b4df122a3384c7878d86e Mon Sep 17 00:00:00 2001
-From: Silesh C V <silesh at ti.com>
-Date: Wed, 29 Sep 2010 14:52:54 +0530
-Subject: [PATCH 05/20] OMAP: PM: CPUFREQ: Fix conditional compilation
-
-Fix conditional compilation. A conditional expresiion
-should follow "#elif", in this case #elif clause should
-check whether CONFIG_ARCH_OMAP3 is defined or not
-(ie. defined(CONFIG_ARCH_OMAP3)) rather than checking for
-the value of the macro.
-
-Signed-off-by: Silesh C V <silesh at ti.com>
----
- arch/arm/plat-omap/cpu-omap.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
-index 608216b..671e4b9 100644
---- a/arch/arm/plat-omap/cpu-omap.c
-+++ b/arch/arm/plat-omap/cpu-omap.c
-@@ -42,7 +42,7 @@ static struct cpufreq_frequency_table *freq_table;
- 
- #ifdef CONFIG_ARCH_OMAP1
- #define MPU_CLK		"mpu"
--#elif CONFIG_ARCH_OMAP3
-+#elif defined(CONFIG_ARCH_OMAP3)
- #define MPU_CLK		"arm_fck"
- #else
- #define MPU_CLK		"virt_prcm_set"
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch b/recipes-kernel/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch
deleted file mode 100644
index 516c7cb..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-From a4107498616e8dafa2a0155a6d45a990766b161b Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 29 Oct 2010 20:43:07 +0530
-Subject: [PATCH 06/20] OMAP: Introduce a user list for each voltage domain instance in the voltage driver.
-
-This patch introduces a user list of devices associated with each
-voltage domain instance. The user list is implemented using plist
-structure with priority node populated with the voltage values.
-This patch also adds an API which will take in a device and
-requested voltage as parameters, adds the info to the user list
-and returns back the maximum voltage requested by all the user
-devices. This can be used anytime to get the voltage that the
-voltage domain instance can be transitioned into.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/voltage.c             |   97 +++++++++++++++++++++++++++++
- arch/arm/plat-omap/include/plat/voltage.h |    8 +++
- 2 files changed, 105 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index ed6079c..76c98c6 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -24,6 +24,9 @@
- #include <linux/err.h>
- #include <linux/debugfs.h>
- #include <linux/slab.h>
-+#include <linux/spinlock.h>
-+#include <linux/plist.h>
-+#include <linux/slab.h>
- 
- #include <plat/common.h>
- #include <plat/voltage.h>
-@@ -118,6 +121,20 @@ struct vc_reg_info {
- };
- 
- /**
-+ * struct omap_vdd_user_list - The per vdd user list
-+ *
-+ * @dev:	The device asking for the vdd to be set at a particular
-+ *		voltage
-+ * @node:	The list head entry
-+ * @volt:	The voltage requested by the device <dev>
-+ */
-+struct omap_vdd_user_list {
-+	struct device *dev;
-+	struct plist_node node;
-+	u32 volt;
-+};
-+
-+/**
-  * omap_vdd_info - Per Voltage Domain info
-  *
-  * @volt_data		: voltage table having the distinct voltages supported
-@@ -132,6 +149,10 @@ struct vc_reg_info {
-  *			  shifts, masks etc.
-  * @voltdm		: pointer to the voltage domain structure
-  * @debug_dir		: debug directory for this voltage domain.
-+ * @user_lock		: the lock to be used by the plist user_list
-+ * @user_list		: the list head maintaining the various users.
-+ * @scaling_mutex	: the dvfs muutex.
-+ *			  of this vdd with the voltage requested by each user.
-  * @curr_volt		: current voltage for this vdd.
-  * @ocp_mod		: The prm module for accessing the prm irqstatus reg.
-  * @prm_irqst_reg	: prm irqstatus register.
-@@ -146,6 +167,9 @@ struct omap_vdd_info {
- 	struct vc_reg_info vc_reg;
- 	struct voltagedomain voltdm;
- 	struct dentry *debug_dir;
-+	spinlock_t user_lock;
-+	struct plist_head user_list;
-+	struct mutex scaling_mutex;
- 	u32 curr_volt;
- 	u16 ocp_mod;
- 	u8 prm_irqst_reg;
-@@ -869,6 +893,11 @@ static int __init omap3_vdd_data_configure(struct omap_vdd_info *vdd)
- 	vdd->write_reg = omap3_voltage_write_reg;
- 	vdd->volt_scale = vp_forceupdate_scale_voltage;
- 	vdd->vp_enabled = false;
-+	/* Init the plist */
-+	spin_lock_init(&vdd->user_lock);
-+	plist_head_init(&vdd->user_list, &vdd->user_lock);
-+	/* Init the DVFS mutex */
-+	mutex_init(&vdd->scaling_mutex);
- 
- 	/* VC parameters */
- 	vdd->vc_reg.prm_mod = OMAP3430_GR_MOD;
-@@ -1059,6 +1088,11 @@ static int __init omap4_vdd_data_configure(struct omap_vdd_info *vdd)
- 	vdd->write_reg = omap4_voltage_write_reg;
- 	vdd->volt_scale = vp_forceupdate_scale_voltage;
- 	vdd->vp_enabled = false;
-+	/* Init the plist */
-+	spin_lock_init(&vdd->user_lock);
-+	plist_head_init(&vdd->user_list, &vdd->user_lock);
-+	/* Init the DVFS mutex */
-+	mutex_init(&vdd->scaling_mutex);
- 
- 	/* VC parameters */
- 	vdd->vc_reg.prm_mod = OMAP4430_PRM_DEVICE_INST;
-@@ -1171,6 +1205,69 @@ unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm)
- 
- 	return vdd->pmic_info->vsel_to_uv(curr_vsel);
- }
-+/**
-+ * omap_voltage_add_request() - API to keep track of various requests to
-+ *				scale the VDD and returns the best possible
-+ *				voltage the VDD can be put to.
-+ * @volt_domain:	pointer to the voltage domain.
-+ * @dev:		the device pointer.
-+ * @volt:		the voltage which is requested by the device.
-+ *
-+ * This API is to be called before the actual voltage scaling is
-+ * done to determine what is the best possible voltage the VDD can
-+ * be put to. This API adds the device <dev> in the user list of the
-+ * vdd <volt_domain> with <volt> as the requested voltage. The user list
-+ * is a plist with the priority element absolute voltage values.
-+ * The API then finds the maximum of all the requested voltages for
-+ * the VDD and returns it back through <volt> pointer itself.
-+ * Returns error value in case of any errors.
-+ */
-+int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
-+		unsigned long *volt)
-+{
-+	struct omap_vdd_info *vdd;
-+	struct omap_vdd_user_list *user;
-+	struct plist_node *node;
-+	int found = 0;
-+
-+	if (!voltdm || IS_ERR(voltdm)) {
-+		pr_warning("%s: VDD specified does not exist!\n", __func__);
-+		return -EINVAL;
-+	}
-+
-+	vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
-+
-+	mutex_lock(&vdd->scaling_mutex);
-+
-+	plist_for_each_entry(user, &vdd->user_list, node) {
-+		if (user->dev == dev) {
-+			found = 1;
-+			break;
-+		}
-+	}
-+
-+	if (!found) {
-+		user = kzalloc(sizeof(struct omap_vdd_user_list), GFP_KERNEL);
-+		if (!user) {
-+			pr_err("%s: Unable to creat a new user for vdd_%s\n",
-+				__func__, voltdm->name);
-+			mutex_unlock(&vdd->scaling_mutex);
-+			return -ENOMEM;
-+		}
-+		user->dev = dev;
-+	} else {
-+		plist_del(&user->node, &vdd->user_list);
-+	}
-+
-+	plist_node_init(&user->node, *volt);
-+	plist_add(&user->node, &vdd->user_list);
-+	node = plist_last(&vdd->user_list);
-+	*volt = user->volt = node->prio;
-+
-+	mutex_unlock(&vdd->scaling_mutex);
-+
-+	return 0;
-+}
- 
- /**
-  * omap_vp_enable() - API to enable a particular VP
-diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h
-index 0ff1233..bd07eca 100644
---- a/arch/arm/plat-omap/include/plat/voltage.h
-+++ b/arch/arm/plat-omap/include/plat/voltage.h
-@@ -132,6 +132,9 @@ int omap_voltage_register_pmic(struct voltagedomain *voltdm,
- void omap_change_voltscale_method(struct voltagedomain *voltdm,
- 		int voltscale_method);
- int omap_voltage_late_init(void);
-+int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
-+		unsigned long *volt);
-+
- #else
- static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
- 		struct omap_volt_pmic_info *pmic_info) {}
-@@ -141,6 +144,11 @@ static inline int omap_voltage_late_init(void)
- {
- 	return -EINVAL;
- }
-+static inline int omap_voltage_add_request(struct voltagedomain *voltdm,
-+		struct device *dev, unsigned long *volt)
-+{
-+	return -EINVAL;
-+}
- #endif
- 
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch b/recipes-kernel/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch
deleted file mode 100644
index 58842f2..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From dac6c4c03140835b758e32c72eb004d379c35fec Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 29 Oct 2010 20:43:10 +0530
-Subject: [PATCH 07/20] OMAP: Introduce API in the OPP layer to find the opp entry corresponding to a voltage.
-
-This patch adds an API in the opp layer to get the opp table entry
-corresponding to the voltage passed as the parameter.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- drivers/base/power/opp.c |   28 ++++++++++++++++++++++++++++
- include/linux/opp.h      |    8 ++++++++
- 2 files changed, 36 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
-index 2bb9b4c..60b4478 100644
---- a/drivers/base/power/opp.c
-+++ b/drivers/base/power/opp.c
-@@ -354,6 +354,34 @@ struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq)
- }
- 
- /**
-+ * opp_find_voltage() - search for an exact voltage
-+ * @dev:	device pointer associated with the opp type
-+ * @volt:	voltage to search for
-+ *
-+ * Searches for exact match in the opp list and returns handle to the matching
-+ * opp if found, else returns ERR_PTR in case of error and should be handled
-+ * using IS_ERR.
-+ */
-+struct opp *opp_find_voltage(struct device *dev, unsigned long volt)
-+{
-+	struct device_opp *dev_opp;
-+	struct opp *temp_opp, *opp = ERR_PTR(-ENODEV);
-+
-+	dev_opp = find_device_opp(dev);
-+	if (IS_ERR(dev_opp))
-+		return opp;
-+
-+	list_for_each_entry_rcu(temp_opp, &dev_opp->opp_list, node) {
-+		if (temp_opp->available && temp_opp->u_volt == volt) {
-+			opp = temp_opp;
-+			break;
-+		}
-+	}
-+
-+	return opp;
-+}
-+
-+/**
-  * opp_add()  - Add an OPP table from a table definitions
-  * @dev:	device for which we do this operation
-  * @freq:	Frequency in Hz for this OPP
-diff --git a/include/linux/opp.h b/include/linux/opp.h
-index 5449945..4977d5c 100644
---- a/include/linux/opp.h
-+++ b/include/linux/opp.h
-@@ -34,6 +34,8 @@ struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq);
- 
- struct opp *opp_find_freq_ceil(struct device *dev, unsigned long *freq);
- 
-+struct opp *opp_find_voltage(struct device *dev, unsigned long volt);
-+
- int opp_add(struct device *dev, unsigned long freq, unsigned long u_volt);
- 
- int opp_enable(struct device *dev, unsigned long freq);
-@@ -74,6 +76,12 @@ static inline struct opp *opp_find_freq_ceil(struct device *dev,
- 	return ERR_PTR(-EINVAL);
- }
- 
-+static inline struct opp *opp_find_voltage(struct device *dev,
-+						unsigned long volt)
-+{
-+	return ERR_PTR(-EINVAL);
-+}
-+
- static inline int opp_add(struct device *dev, unsigned long freq,
- 					unsigned long u_volt)
- {
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch b/recipes-kernel/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch
deleted file mode 100644
index d00751d..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 3fcad983e7df504ecb1d0db79e3fe2e3abc44850 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 29 Oct 2010 20:43:24 +0530
-Subject: [PATCH 08/20] OMAP: Introduce API to register a device with a voltagedomain
-
-This patch adds an API in the voltage layer that
-can be used  during omap_device_build to register the built
-device with the voltage domain. This API is to be typically called
-only once per device during the device registeration. This approach
-makes it easy during dvfs to scale all the devices associated with
-a voltage domain and then scale the voltage domain.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/voltage.c             |   50 +++++++++++++++++++++++++++++
- arch/arm/plat-omap/include/plat/voltage.h |    7 +++-
- arch/arm/plat-omap/omap_device.c          |   12 +++++++
- 3 files changed, 68 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index 76c98c6..7381fa6 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -134,6 +134,11 @@ struct omap_vdd_user_list {
- 	u32 volt;
- };
- 
-+struct omap_vdd_dev_list {
-+	struct device *dev;
-+	struct list_head node;
-+};
-+
- /**
-  * omap_vdd_info - Per Voltage Domain info
-  *
-@@ -153,6 +158,7 @@ struct omap_vdd_user_list {
-  * @user_list		: the list head maintaining the various users.
-  * @scaling_mutex	: the dvfs muutex.
-  *			  of this vdd with the voltage requested by each user.
-+ * @dev_list		: list of devices bwlonging to this voltage domain.
-  * @curr_volt		: current voltage for this vdd.
-  * @ocp_mod		: The prm module for accessing the prm irqstatus reg.
-  * @prm_irqst_reg	: prm irqstatus register.
-@@ -170,6 +176,7 @@ struct omap_vdd_info {
- 	spinlock_t user_lock;
- 	struct plist_head user_list;
- 	struct mutex scaling_mutex;
-+	struct list_head dev_list;
- 	u32 curr_volt;
- 	u16 ocp_mod;
- 	u8 prm_irqst_reg;
-@@ -1093,6 +1100,8 @@ static int __init omap4_vdd_data_configure(struct omap_vdd_info *vdd)
- 	plist_head_init(&vdd->user_list, &vdd->user_lock);
- 	/* Init the DVFS mutex */
- 	mutex_init(&vdd->scaling_mutex);
-+	/* Init the device list */
-+	INIT_LIST_HEAD(&vdd->dev_list);
- 
- 	/* VC parameters */
- 	vdd->vc_reg.prm_mod = OMAP4430_PRM_DEVICE_INST;
-@@ -1269,6 +1278,40 @@ int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
- 	return 0;
- }
- 
-+int omap_voltage_add_dev(struct voltagedomain *voltdm, struct device *dev)
-+{
-+	struct omap_vdd_info *vdd;
-+	struct omap_vdd_dev_list *temp_dev;
-+
-+	if (!voltdm || IS_ERR(voltdm)) {
-+		pr_warning("%s: VDD specified does not exist!\n", __func__);
-+		return -EINVAL;
-+	}
-+
-+	vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
-+
-+	list_for_each_entry(temp_dev, &vdd->dev_list, node) {
-+		if (temp_dev->dev == dev) {
-+			dev_warn(dev, "%s: Device already added to vdee_%s\n",
-+				__func__, voltdm->name);
-+			return -EINVAL;
-+		}
-+	}
-+
-+	temp_dev = kzalloc(sizeof(struct omap_vdd_dev_list), GFP_KERNEL);
-+	if (!temp_dev) {
-+		dev_err(dev, "%s: Unable to creat a new device for vdd_%s\n",
-+			__func__, voltdm->name);
-+		return -ENOMEM;
-+	}
-+
-+	temp_dev->dev = dev;
-+
-+	list_add(&temp_dev->node, &vdd->dev_list);
-+
-+	return 0;
-+}
-+
- /**
-  * omap_vp_enable() - API to enable a particular VP
-  * @voltdm:	pointer to the VDD whose VP is to be enabled.
-@@ -1649,6 +1692,8 @@ int __init omap_voltage_late_init(void)
-  */
- static int __init omap_voltage_early_init(void)
- {
-+	int i;
-+
- 	if (cpu_is_omap34xx()) {
- 		vdd_info = omap3_vdd_info;
- 		nr_scalable_vdd = OMAP3_NR_SCALABLE_VDD;
-@@ -1661,8 +1706,13 @@ static int __init omap_voltage_early_init(void)
- 		vdd_data_configure = omap4_vdd_data_configure;
- 	} else {
- 		pr_warning("%s: voltage driver support not added\n", __func__);
-+		return -EINVAL;
- 	}
- 
-+	/* Init the device list */
-+	for (i = 0; i < nr_scalable_vdd; i++)
-+		INIT_LIST_HEAD(&(vdd_info[i].dev_list));
-+
- 	return 0;
- }
- core_initcall(omap_voltage_early_init);
-diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h
-index bd07eca..adbc6af 100644
---- a/arch/arm/plat-omap/include/plat/voltage.h
-+++ b/arch/arm/plat-omap/include/plat/voltage.h
-@@ -134,7 +134,7 @@ void omap_change_voltscale_method(struct voltagedomain *voltdm,
- int omap_voltage_late_init(void);
- int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
- 		unsigned long *volt);
--
-+int omap_voltage_add_dev(struct voltagedomain *voltdm, struct device *dev);
- #else
- static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
- 		struct omap_volt_pmic_info *pmic_info) {}
-@@ -149,6 +149,11 @@ static inline int omap_voltage_add_request(struct voltagedomain *voltdm,
- {
- 	return -EINVAL;
- }
-+static inline int omap_voltage_add_dev(struct voltagedomain *voltdm,
-+		struct device *dev)
-+{
-+	return -EINVAL;
-+}
- #endif
- 
- #endif
-diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
-index 57adb27..2c95e61 100644
---- a/arch/arm/plat-omap/omap_device.c
-+++ b/arch/arm/plat-omap/omap_device.c
-@@ -86,6 +86,7 @@
- 
- #include <plat/omap_device.h>
- #include <plat/omap_hwmod.h>
-+#include <plat/voltage.h>
- 
- /* These parameters are passed to _omap_device_{de,}activate() */
- #define USE_WAKEUP_LAT			0
-@@ -481,6 +482,17 @@ struct omap_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
- 	for (i = 0; i < oh_cnt; i++) {
- 		hwmods[i]->od = od;
- 		_add_optional_clock_alias(od, hwmods[i]);
-+		if (hwmods[i]->vdd_name) {
-+			struct omap_hwmod *oh = hwmods[i];
-+			struct voltagedomain *voltdm;
-+
-+			if (is_early_device)
-+				continue;
-+
-+			voltdm = omap_voltage_domain_lookup(oh->vdd_name);
-+			if (!omap_voltage_add_dev(voltdm, &od->pdev.dev))
-+				oh->voltdm = voltdm;
-+		}
- 	}
- 
- 	if (ret)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch b/recipes-kernel/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch
deleted file mode 100644
index f5914aa..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 6ec7cf889c9a8ddf97fbbcbda4888b0f17930e04 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 29 Oct 2010 20:43:29 +0530
-Subject: [PATCH 09/20] OMAP: Introduce device specific set rate and get rate in omap_device structure
-
-This patch extends the omap_device structure to contain
-pointers to scale the operating rate of the
-device and to retrieve the operating rate of the device.
-This patch also adds the three new APIs in the omap device layer
-namely omap_device_set_rate that can be called to set a new operating
-rate for a device, omap_device_get_rate that can be called to retrieve
-the operating frequency for a device and omap_device_populate_rate_fns
-to populte the device specific set_rate and get_rate API's.
-The omap_device_set_rate and omap_device_get_rate does some routine error
-checks and finally calls into the device specific set_rate
-and get_rate APIs populated through omap_device_populate_rate_fns.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/plat-omap/include/plat/omap_device.h |    9 +++++
- arch/arm/plat-omap/omap_device.c              |   49 +++++++++++++++++++++++++
- 2 files changed, 58 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h
-index e4c349f..1178b86 100644
---- a/arch/arm/plat-omap/include/plat/omap_device.h
-+++ b/arch/arm/plat-omap/include/plat/omap_device.h
-@@ -50,6 +50,8 @@ extern struct device omap_device_parent;
-  * @hwmods: (one .. many per omap_device)
-  * @hwmods_cnt: ARRAY_SIZE() of @hwmods
-  * @pm_lats: ptr to an omap_device_pm_latency table
-+ * @set_rate: fn ptr to change the operating rate.
-+ * @get_rate: fn ptr to retrieve the current operating rate.
-  * @pm_lats_cnt: ARRAY_SIZE() of what is passed to @pm_lats
-  * @pm_lat_level: array index of the last odpl entry executed - -1 if never
-  * @dev_wakeup_lat: dev wakeup latency in nanoseconds
-@@ -67,6 +69,8 @@ struct omap_device {
- 	struct platform_device		pdev;
- 	struct omap_hwmod		**hwmods;
- 	struct omap_device_pm_latency	*pm_lats;
-+	int (*set_rate)(struct device *dev, unsigned long rate);
-+	unsigned long (*get_rate) (struct device *dev);
- 	u32				dev_wakeup_lat;
- 	u32				_dev_wakeup_lat_limit;
- 	u8				pm_lats_cnt;
-@@ -108,6 +112,11 @@ int omap_device_align_pm_lat(struct platform_device *pdev,
- 			     u32 new_wakeup_lat_limit);
- struct powerdomain *omap_device_get_pwrdm(struct omap_device *od);
- u32 omap_device_get_context_loss_count(struct platform_device *pdev);
-+int omap_device_set_rate(struct device *dev, unsigned long freq);
-+unsigned long omap_device_get_rate(struct device *dev);
-+void omap_device_populate_rate_fns(struct device *dev,
-+		int (*set_rate)(struct device *dev, unsigned long rate),
-+		unsigned long (*get_rate) (struct device *dev));
- 
- /* Other */
- 
-diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
-index 2c95e61..0d67af6 100644
---- a/arch/arm/plat-omap/omap_device.c
-+++ b/arch/arm/plat-omap/omap_device.c
-@@ -813,6 +813,55 @@ int omap_device_enable_clocks(struct omap_device *od)
- 	return 0;
- }
- 
-+int omap_device_set_rate(struct device *dev, unsigned long freq)
-+{
-+	struct platform_device *pdev;
-+	struct omap_device *od;
-+
-+	pdev = container_of(dev, struct platform_device, dev);
-+	od = _find_by_pdev(pdev);
-+
-+	if (!od->set_rate) {
-+		dev_err(dev, "%s: No set_rate API for scaling device\n",
-+			__func__);
-+		return -ENODATA;
-+	}
-+
-+	return od->set_rate(dev, freq);
-+}
-+
-+unsigned long omap_device_get_rate(struct device *dev)
-+{
-+	struct platform_device *pdev;
-+	struct omap_device *od;
-+
-+	pdev = container_of(dev, struct platform_device, dev);
-+	od = _find_by_pdev(pdev);
-+
-+
-+	if (!od->get_rate) {
-+		dev_err(dev, "%s: No get rate API for the device\n",
-+			__func__);
-+		return 0;
-+	}
-+
-+	return od->get_rate(dev);
-+}
-+
-+void omap_device_populate_rate_fns(struct device *dev,
-+		int (*set_rate)(struct device *dev, unsigned long rate),
-+		unsigned long (*get_rate) (struct device *dev))
-+{
-+	struct platform_device *pdev;
-+	struct omap_device *od;
-+
-+	pdev = container_of(dev, struct platform_device, dev);
-+	od = _find_by_pdev(pdev);
-+
-+	od->set_rate = set_rate;
-+	od->get_rate = get_rate;
-+}
-+
- struct device omap_device_parent = {
- 	.init_name	= "omap",
- 	.parent         = &platform_bus,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch b/recipes-kernel/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch
deleted file mode 100644
index ead9cbb..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From 96ee5b07e3162056169689b363f4c0edae7d7303 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 29 Oct 2010 20:43:34 +0530
-Subject: [PATCH 10/20] OMAP: Voltage layer changes to support DVFS.
-
-This patch introduces an API to take in the voltage domain and the
-new voltage as parameter and to scale all the scalable devices
-associated with the the voltage domain to the rate corresponding to the
-new voltage and scale the voltage domain to the new voltage.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/voltage.c             |   69 +++++++++++++++++++++++++++++
- arch/arm/plat-omap/include/plat/voltage.h |    7 +++
- 2 files changed, 76 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index 7381fa6..9adf9d1 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -27,9 +27,11 @@
- #include <linux/spinlock.h>
- #include <linux/plist.h>
- #include <linux/slab.h>
-+#include <linux/opp.h>
- 
- #include <plat/common.h>
- #include <plat/voltage.h>
-+#include <plat/omap_device.h>
- 
- #include "prm-regbits-34xx.h"
- #include "prm-regbits-44xx.h"
-@@ -1656,6 +1658,73 @@ struct voltagedomain *omap_voltage_domain_lookup(char *name)
- }
- 
- /**
-+ * omap_voltage_scale : API to scale the devices associated with a
-+ *			voltage domain vdd voltage.
-+ * @volt_domain : the voltage domain to be scaled
-+ * @volt : the new voltage for the voltage domain
-+ *
-+ * This API runs through the list of devices associated with the
-+ * voltage domain and scales the device rates to those corresponding
-+ * to the new voltage of the voltage domain. This API also scales
-+ * the voltage domain voltage to the new value. Returns 0 on success
-+ * else the error value.
-+ */
-+int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
-+{
-+	unsigned long curr_volt;
-+	int is_volt_scaled = 0;
-+	struct omap_vdd_info *vdd;
-+	struct omap_vdd_dev_list *temp_dev;
-+
-+	if (!voltdm || IS_ERR(voltdm)) {
-+		pr_warning("%s: VDD specified does not exist!\n", __func__);
-+		return -EINVAL;
-+	}
-+
-+	vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
-+
-+	mutex_lock(&vdd->scaling_mutex);
-+
-+	curr_volt = omap_voltage_get_nom_volt(voltdm);
-+
-+	if (curr_volt == volt) {
-+		is_volt_scaled = 1;
-+	} else if (curr_volt < volt) {
-+		omap_voltage_scale_vdd(voltdm, volt);
-+		is_volt_scaled = 1;
-+	}
-+
-+	list_for_each_entry(temp_dev, &vdd->dev_list, node) {
-+		struct device *dev;
-+		struct opp *opp;
-+		unsigned long freq;
-+
-+		dev = temp_dev->dev;
-+
-+		opp = opp_find_voltage(dev, volt);
-+		if (IS_ERR(opp))
-+			continue;
-+
-+		freq = opp_get_freq(opp);
-+
-+		if (freq == omap_device_get_rate(dev)) {
-+			dev_warn(dev, "%s: Already at the requested"
-+				"rate %ld\n", __func__, freq);
-+			continue;
-+		}
-+
-+		omap_device_set_rate(dev, freq);
-+	}
-+
-+	if (!is_volt_scaled)
-+		omap_voltage_scale_vdd(voltdm, volt);
-+
-+	mutex_unlock(&vdd->scaling_mutex);
-+
-+	return 0;
-+}
-+
-+/**
-  * omap_voltage_late_init() - Init the various voltage parameters
-  *
-  * This API is to be called in the later stages of the
-diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h
-index adbc6af..6782c5e 100644
---- a/arch/arm/plat-omap/include/plat/voltage.h
-+++ b/arch/arm/plat-omap/include/plat/voltage.h
-@@ -135,6 +135,7 @@ int omap_voltage_late_init(void);
- int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
- 		unsigned long *volt);
- int omap_voltage_add_dev(struct voltagedomain *voltdm, struct device *dev);
-+int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt);
- #else
- static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
- 		struct omap_volt_pmic_info *pmic_info) {}
-@@ -154,6 +155,12 @@ static inline int omap_voltage_add_dev(struct voltagedomain *voltdm,
- {
- 	return -EINVAL;
- }
-+
-+static inline int omap_voltage_scale(struct voltagedomain *voltdm,
-+		unsigned long volt)
-+{
-+	return -EINVAL;
-+}
- #endif
- 
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch b/recipes-kernel/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch
deleted file mode 100644
index 6c4ca2a..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-From b1b41c78d5a19260605fcb259a51ca7cd71c097a Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 2 Jul 2010 13:06:57 +0530
-Subject: [PATCH 11/20] OMAP: Introduce dependent voltage domain support.
-
-There could be dependencies between various voltage domains for
-maintaining system performance or hardware limitation reasons
-like VDD<X> should be at voltage v1 when VDD<Y> is at voltage v2.
-This patch introduce dependent vdd information structures in the
-voltage layer which can be used to populate these dependencies
-for a voltage domain. This patch also adds support to scale
-the dependent vdd and the scalable devices belonging to it
-during the scaling of a main vdd through omap_voltage_scale.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/voltage.c |  122 +++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 122 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index 9adf9d1..c83d968 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -123,6 +123,36 @@ struct vc_reg_info {
- };
- 
- /**
-+ * omap_vdd_dep_volt - Table containing the parent vdd voltage and the
-+ *			dependent vdd voltage corresponding to it.
-+ *
-+ * @main_vdd_volt	: The main vdd voltage
-+ * @dep_vdd_volt	: The voltage at which the dependent vdd should be
-+ *			  when the main vdd is at <main_vdd_volt> voltage
-+ */
-+struct omap_vdd_dep_volt {
-+	u32 main_vdd_volt;
-+	u32 dep_vdd_volt;
-+};
-+
-+/**
-+ * omap_vdd_dep_info - Dependent vdd info
-+ *
-+ * @name		: Dependent vdd name
-+ * @voltdm		: Dependent vdd pointer
-+ * @dep_table		: Table containing the dependent vdd voltage
-+ *			  corresponding to every main vdd voltage.
-+ * @cur_dep_volt	: The voltage to which dependent vdd should be put
-+ *			  to for the current main vdd voltage.
-+ */
-+struct omap_vdd_dep_info {
-+	char *name;
-+	struct voltagedomain *voltdm;
-+	struct omap_vdd_dep_volt *dep_table;
-+	unsigned long cur_dep_volt;
-+};
-+
-+/**
-  * struct omap_vdd_user_list - The per vdd user list
-  *
-  * @dev:	The device asking for the vdd to be set at a particular
-@@ -174,11 +204,13 @@ struct omap_vdd_info {
- 	struct vp_reg_val vp_reg;
- 	struct vc_reg_info vc_reg;
- 	struct voltagedomain voltdm;
-+	struct omap_vdd_dep_info *dep_vdd_info;
- 	struct dentry *debug_dir;
- 	spinlock_t user_lock;
- 	struct plist_head user_list;
- 	struct mutex scaling_mutex;
- 	struct list_head dev_list;
-+	int nr_dep_vdd;
- 	u32 curr_volt;
- 	u16 ocp_mod;
- 	u8 prm_irqst_reg;
-@@ -1160,6 +1192,80 @@ static int __init omap4_vdd_data_configure(struct omap_vdd_info *vdd)
- 	return 0;
- }
- 
-+static int calc_dep_vdd_volt(struct device *dev,
-+		struct omap_vdd_info *main_vdd, unsigned long main_volt)
-+{
-+	struct omap_vdd_dep_info *dep_vdds;
-+	int i, ret = 0;
-+
-+	if (!main_vdd->dep_vdd_info) {
-+		pr_debug("%s: No dependent VDD's for vdd_%s\n",
-+			__func__, main_vdd->voltdm.name);
-+		return 0;
-+	}
-+
-+	dep_vdds = main_vdd->dep_vdd_info;
-+
-+	for (i = 0; i < main_vdd->nr_dep_vdd; i++) {
-+		struct omap_vdd_dep_volt *volt_table = dep_vdds[i].dep_table;
-+		int nr_volt = 0;
-+		unsigned long dep_volt = 0, act_volt = 0;
-+
-+		while (volt_table[nr_volt].main_vdd_volt != 0) {
-+			if (volt_table[nr_volt].main_vdd_volt == main_volt) {
-+				dep_volt = volt_table[nr_volt].dep_vdd_volt;
-+				break;
-+			}
-+			nr_volt++;
-+		}
-+		if (!dep_volt) {
-+			pr_warning("%s: Not able to find a matching volt for"
-+				"vdd_%s corresponding to vdd_%s %ld volt\n",
-+				__func__, dep_vdds[i].name,
-+				main_vdd->voltdm.name, main_volt);
-+			ret = -EINVAL;
-+			continue;
-+		}
-+
-+		if (!dep_vdds[i].voltdm)
-+			dep_vdds[i].voltdm =
-+				omap_voltage_domain_lookup(dep_vdds[i].name);
-+
-+		act_volt = dep_volt;
-+
-+		/* See if dep_volt is possible for the vdd*/
-+		ret = omap_voltage_add_request(dep_vdds[i].voltdm, dev,
-+				&act_volt);
-+
-+		/*
-+		 * Currently we do not bother if the dep volt and act volt are
-+		 * different. We could add a check if needed.
-+		 */
-+		dep_vdds[i].cur_dep_volt = act_volt;
-+	}
-+
-+	return ret;
-+}
-+
-+static int scale_dep_vdd(struct omap_vdd_info *main_vdd)
-+{
-+	struct omap_vdd_dep_info *dep_vdds;
-+	int i;
-+
-+	if (!main_vdd->dep_vdd_info) {
-+		pr_debug("%s: No dependent VDD's for vdd_%s\n",
-+			__func__, main_vdd->voltdm.name);
-+		return 0;
-+	}
-+
-+	dep_vdds = main_vdd->dep_vdd_info;
-+
-+	for (i = 0; i < main_vdd->nr_dep_vdd; i++)
-+		omap_voltage_scale(dep_vdds[i].voltdm,
-+				dep_vdds[i].cur_dep_volt);
-+	return 0;
-+}
-+
- /* Public functions */
- /**
-  * omap_voltage_get_nom_volt() - Gets the current non-auto-compensated voltage
-@@ -1675,6 +1781,8 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
- 	int is_volt_scaled = 0;
- 	struct omap_vdd_info *vdd;
- 	struct omap_vdd_dev_list *temp_dev;
-+	struct plist_node *node;
-+	struct omap_vdd_user_list *user;
- 
- 	if (!voltdm || IS_ERR(voltdm)) {
- 		pr_warning("%s: VDD specified does not exist!\n", __func__);
-@@ -1687,6 +1795,17 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
- 
- 	curr_volt = omap_voltage_get_nom_volt(voltdm);
- 
-+	/* Find the device requesting the voltage scaling */
-+	node = plist_first(&vdd->user_list);
-+	user = container_of(node, struct omap_vdd_user_list, node);
-+
-+	/* calculate the voltages for dependent vdd's */
-+	if (calc_dep_vdd_volt(user->dev, vdd, volt)) {
-+		pr_warning("%s: Error in calculating dependent vdd voltages"
-+			"for vdd_%s\n", __func__, voltdm->name);
-+		return -EINVAL;
-+	}
-+
- 	if (curr_volt == volt) {
- 		is_volt_scaled = 1;
- 	} else if (curr_volt < volt) {
-@@ -1721,6 +1840,9 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
- 
- 	mutex_unlock(&vdd->scaling_mutex);
- 
-+	/* Scale dependent vdds */
-+	scale_dep_vdd(vdd);
-+
- 	return 0;
- }
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch b/recipes-kernel/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch
deleted file mode 100644
index a6d35bd..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From b461bd17384c73bbb243c54bf1d6466c94e594c3 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 2 Jul 2010 13:07:35 +0530
-Subject: [PATCH 12/20] OMAP: Introduce device scale
-
-This patch adds omap_device_scale API  which can be used to generic
-device rate scaling.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/plat-omap/include/plat/omap_device.h |    3 +-
- arch/arm/plat-omap/omap_device.c              |   78 +++++++++++++++++++++++++
- 2 files changed, 80 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h
-index 1178b86..e44a0f7 100644
---- a/arch/arm/plat-omap/include/plat/omap_device.h
-+++ b/arch/arm/plat-omap/include/plat/omap_device.h
-@@ -117,6 +117,8 @@ unsigned long omap_device_get_rate(struct device *dev);
- void omap_device_populate_rate_fns(struct device *dev,
- 		int (*set_rate)(struct device *dev, unsigned long rate),
- 		unsigned long (*get_rate) (struct device *dev));
-+int omap_device_scale(struct device *req_dev, struct device *dev,
-+		unsigned long rate);
- 
- /* Other */
- 
-@@ -126,7 +128,6 @@ int omap_device_enable_hwmods(struct omap_device *od);
- int omap_device_disable_clocks(struct omap_device *od);
- int omap_device_enable_clocks(struct omap_device *od);
- 
--
- /*
-  * Entries should be kept in latency order ascending
-  *
-diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
-index 0d67af6..458d648 100644
---- a/arch/arm/plat-omap/omap_device.c
-+++ b/arch/arm/plat-omap/omap_device.c
-@@ -83,6 +83,7 @@
- #include <linux/err.h>
- #include <linux/io.h>
- #include <linux/clk.h>
-+#include <linux/opp.h>
- 
- #include <plat/omap_device.h>
- #include <plat/omap_hwmod.h>
-@@ -862,6 +863,83 @@ void omap_device_populate_rate_fns(struct device *dev,
- 	od->get_rate = get_rate;
- }
- 
-+/**
-+ * omap_device_scale() - Set a new rate at which the device is to operate
-+ * @req_dev:	pointer to the device requesting the scaling.
-+ * @dev:	pointer to the device that is to be scaled
-+ * @rate:	the rnew rate for the device.
-+ *
-+ * This API gets the device opp table associated with this device and
-+ * tries putting the device to the requested rate and the voltage domain
-+ * associated with the device to the voltage corresponding to the
-+ * requested rate. Since multiple devices can be assocciated with a
-+ * voltage domain this API finds out the possible voltage the
-+ * voltage domain can enter and then decides on the final device
-+ * rate. Return 0 on success else the error value
-+ */
-+int omap_device_scale(struct device *req_dev, struct device *dev,
-+			unsigned long rate)
-+{
-+	struct opp *opp;
-+	unsigned long volt, freq, min_freq, max_freq;
-+	struct voltagedomain *voltdm;
-+	struct platform_device *pdev;
-+	struct omap_device *od;
-+	int ret;
-+
-+	pdev = container_of(dev, struct platform_device, dev);
-+	od = _find_by_pdev(pdev);
-+
-+	/*
-+	 * Figure out if the desired frquency lies between the
-+	 * maximum and minimum possible for the particular device
-+	 */
-+	min_freq = 0;
-+	if (IS_ERR(opp_find_freq_ceil(dev, &min_freq))) {
-+		dev_err(dev, "%s: Unable to find lowest opp\n", __func__);
-+		return -ENODEV;
-+	}
-+
-+	max_freq = ULONG_MAX;
-+	if (IS_ERR(opp_find_freq_floor(dev, &max_freq))) {
-+		dev_err(dev, "%s: Unable to find highest opp\n", __func__);
-+		return -ENODEV;
-+	}
-+
-+	if (rate < min_freq)
-+		freq = min_freq;
-+	else if (rate > max_freq)
-+		freq = max_freq;
-+	else
-+		freq = rate;
-+
-+	opp = opp_find_freq_ceil(dev, &freq);
-+	if (IS_ERR(opp)) {
-+		dev_err(dev, "%s: Unable to find OPP for freq%ld\n",
-+			__func__, rate);
-+		return -ENODEV;
-+	}
-+
-+	/* Get the voltage corresponding to the requested frequency */
-+	volt = opp_get_voltage(opp);
-+
-+	/*
-+	 * Call into the voltage layer to get the final voltage possible
-+	 * for the voltage domain associated with the device.
-+	 */
-+	voltdm = od->hwmods[0]->voltdm;
-+	ret = omap_voltage_add_request(voltdm, req_dev, &volt);
-+	if (ret) {
-+		dev_err(dev, "%s: Unable to get the final volt for scaling\n",
-+			__func__);
-+		return ret;
-+	}
-+
-+	/* Do the actual scaling */
-+	return omap_voltage_scale(voltdm, volt);
-+}
-+EXPORT_SYMBOL(omap_device_scale);
-+
- struct device omap_device_parent = {
- 	.init_name	= "omap",
- 	.parent         = &platform_bus,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch b/recipes-kernel/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch
deleted file mode 100644
index 89384a8..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 4c68660aa69a5eaeaff7fda7e2297e2d31de0333 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 2 Jul 2010 13:06:57 +0530
-Subject: [PATCH 13/20] OMAP: Disable smartreflex across DVFS
-
-This patch disables smartreflex for a particular voltage
-domain when the the voltage domain and the devices belonging
-to it is being scaled and re-enables it back once the scaling
-is done.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/voltage.c |    7 +++++++
- 1 files changed, 7 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index c83d968..2f331de 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -32,6 +32,7 @@
- #include <plat/common.h>
- #include <plat/voltage.h>
- #include <plat/omap_device.h>
-+#include <plat/smartreflex.h>
- 
- #include "prm-regbits-34xx.h"
- #include "prm-regbits-44xx.h"
-@@ -1806,6 +1807,9 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
- 		return -EINVAL;
- 	}
- 
-+	/* Disable smartreflex module across voltage and frequency scaling */
-+	omap_sr_disable(voltdm);
-+
- 	if (curr_volt == volt) {
- 		is_volt_scaled = 1;
- 	} else if (curr_volt < volt) {
-@@ -1840,6 +1844,9 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
- 
- 	mutex_unlock(&vdd->scaling_mutex);
- 
-+	/* Enable Smartreflex module */
-+	omap_sr_enable(voltdm);
-+
- 	/* Scale dependent vdds */
- 	scale_dep_vdd(vdd);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch b/recipes-kernel/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch
deleted file mode 100644
index 16335cc..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From 6fb7bd2b3da02e6e799d3c7661a1acb6572f9add Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Wed, 18 Aug 2010 16:22:32 +0530
-Subject: [PATCH 14/20] OMAP3: Introduce custom set rate and get rate APIs for scalable devices
-
-This patch also introduces omap3_mpu_set_rate, omap3_iva_set_rate,
-omap3_l3_set_rate, omap3_mpu_get_rate, omap3_iva_get_rate,
-omap3_l3_get_rate as device specific set rate and get rate
-APIs for OMAP3 mpu, iva and l3_main devices. This patch also
-calls into omap_device_populate_rate_fns during system init to register
-various set_rate and get_rate APIs with the omap device layer
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/pm.c |  110 ++++++++++++++++++++++++++++++++++++++++++++++
- 1 files changed, 110 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
-index d5a102c..94ab0dd 100644
---- a/arch/arm/mach-omap2/pm.c
-+++ b/arch/arm/mach-omap2/pm.c
-@@ -14,6 +14,7 @@
- #include <linux/io.h>
- #include <linux/err.h>
- #include <linux/opp.h>
-+#include <linux/delay.h>
- 
- #include <plat/omap-pm.h>
- #include <plat/omap_device.h>
-@@ -22,6 +23,8 @@
- 
- #include "powerdomain.h"
- #include "clockdomain.h"
-+#include "cm-regbits-34xx.h"
-+#include "cm2xxx_3xxx.h"
- #include "pm.h"
- 
- static struct omap_device_pm_latency *pm_lats;
-@@ -31,6 +34,8 @@ static struct device *iva_dev;
- static struct device *l3_dev;
- static struct device *dsp_dev;
- 
-+static struct clk *dpll1_clk, *dpll2_clk, *dpll3_clk;
-+
- struct device *omap2_get_mpuss_device(void)
- {
- 	WARN_ON_ONCE(!mpu_dev);
-@@ -56,6 +61,26 @@ struct device *omap4_get_dsp_device(void)
- }
- EXPORT_SYMBOL(omap4_get_dsp_device);
- 
-+static unsigned long compute_lpj(unsigned long ref, u_int div, u_int mult)
-+{
-+	unsigned long new_jiffy_l, new_jiffy_h;
-+
-+	/*
-+	 * Recalculate loops_per_jiffy.  We do it this way to
-+	 * avoid math overflow on 32-bit machines.  Maybe we
-+	 * should make this architecture dependent?  If you have
-+	 * a better way of doing this, please replace!
-+	 *
-+	 *    new = old * mult / div
-+	 */
-+	new_jiffy_h = ref / div;
-+	new_jiffy_l = (ref % div) / 100;
-+	new_jiffy_h *= mult;
-+	new_jiffy_l = new_jiffy_l * mult / div;
-+
-+	return new_jiffy_h + new_jiffy_l * 100;
-+}
-+
- /* static int _init_omap_device(struct omap_hwmod *oh, void *user) */
- static int _init_omap_device(char *name, struct device **new_dev)
- {
-@@ -77,6 +102,74 @@ static int _init_omap_device(char *name, struct device **new_dev)
- 	return 0;
- }
- 
-+static unsigned long omap3_mpu_get_rate(struct device *dev)
-+{
-+	return dpll1_clk->rate;
-+}
-+
-+static int omap3_mpu_set_rate(struct device *dev, unsigned long rate)
-+{
-+	unsigned long cur_rate = omap3_mpu_get_rate(dev);
-+	int ret;
-+
-+#ifdef CONFIG_CPU_FREQ
-+	struct cpufreq_freqs freqs_notify;
-+
-+	freqs_notify.old = cur_rate / 1000;
-+	freqs_notify.new = rate / 1000;
-+	freqs_notify.cpu = 0;
-+	/* Send pre notification to CPUFreq */
-+	cpufreq_notify_transition(&freqs_notify, CPUFREQ_PRECHANGE);
-+#endif
-+	ret = clk_set_rate(dpll1_clk, rate);
-+	if (ret) {
-+		dev_warn(dev, "%s: Unable to set rate to %ld\n",
-+			__func__, rate);
-+		return ret;
-+	}
-+
-+#ifdef CONFIG_CPU_FREQ
-+	/* Send a post notification to CPUFreq */
-+	cpufreq_notify_transition(&freqs_notify, CPUFREQ_POSTCHANGE);
-+#endif
-+
-+#ifndef CONFIG_CPU_FREQ
-+	/*Update loops_per_jiffy if processor speed is being changed*/
-+	loops_per_jiffy = compute_lpj(loops_per_jiffy,
-+			cur_rate / 1000, rate / 1000);
-+#endif
-+	return 0;
-+}
-+
-+static int omap3_iva_set_rate(struct device *dev, unsigned long rate)
-+{
-+	return clk_set_rate(dpll2_clk, rate);
-+}
-+
-+static unsigned long omap3_iva_get_rate(struct device *dev)
-+{
-+	return dpll2_clk->rate;
-+}
-+
-+static int omap3_l3_set_rate(struct device *dev, unsigned long rate)
-+{
-+	int l3_div;
-+
-+	l3_div = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL) &
-+			OMAP3430_CLKSEL_L3_MASK;
-+
-+	return clk_set_rate(dpll3_clk, rate * l3_div);
-+}
-+
-+static unsigned long omap3_l3_get_rate(struct device *dev)
-+{
-+	int l3_div;
-+
-+	l3_div = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL) &
-+			OMAP3430_CLKSEL_L3_MASK;
-+	return dpll3_clk->rate / l3_div;
-+}
-+
- /*
-  * Build omap_devices for processors and bus.
-  */
-@@ -90,6 +183,23 @@ static void omap2_init_processor_devices(void)
- 	} else {
- 		_init_omap_device("l3_main", &l3_dev);
- 	}
-+
-+	if (cpu_is_omap34xx()) {
-+		dpll1_clk = clk_get(NULL, "dpll1_ck");
-+		dpll2_clk = clk_get(NULL, "dpll2_ck");
-+		dpll3_clk = clk_get(NULL, "dpll3_m2_ck");
-+
-+		if (mpu_dev)
-+			omap_device_populate_rate_fns(mpu_dev,
-+				omap3_mpu_set_rate, omap3_mpu_get_rate);
-+		if (iva_dev)
-+			omap_device_populate_rate_fns(iva_dev,
-+				omap3_iva_set_rate, omap3_iva_get_rate);
-+		if (l3_dev)
-+			omap_device_populate_rate_fns(l3_dev,
-+				omap3_l3_set_rate, omap3_l3_get_rate);
-+
-+	}
- }
- 
- /* Types of sleep_switch used in omap_set_pwrdm_state */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch b/recipes-kernel/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch
deleted file mode 100644
index 4b9ff5d..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From d8fae1dcedb636a37096ee92e6b81b112d5f32a5 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Fri, 2 Jul 2010 13:07:49 +0530
-Subject: [PATCH 15/20] OMAP3: Update cpufreq driver to use the new set_rate API
-
-This patch updates the cpufreq driver to use the device
-set rate API to scale the mpu frequency for OMAP3.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/plat-omap/cpu-omap.c |   11 ++++-------
- 1 files changed, 4 insertions(+), 7 deletions(-)
-
-diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
-index 671e4b9..71777db 100644
---- a/arch/arm/plat-omap/cpu-omap.c
-+++ b/arch/arm/plat-omap/cpu-omap.c
-@@ -31,10 +31,7 @@
- #include <plat/clock.h>
- #include <plat/common.h>
- #include <asm/system.h>
--
--#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
--#include <plat/omap-pm.h>
--#endif
-+#include <plat/omap_device.h>
- 
- #define VERY_HI_RATE	900000000
- 
-@@ -88,7 +85,7 @@ static int omap_target(struct cpufreq_policy *policy,
- #ifdef CONFIG_ARCH_OMAP1
- 	struct cpufreq_freqs freqs;
- #endif
--#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
-+#if defined(CONFIG_ARCH_OMAP3)
- 	unsigned long freq;
- 	struct device *mpu_dev = omap2_get_mpuss_device();
- #endif
-@@ -115,10 +112,10 @@ static int omap_target(struct cpufreq_policy *policy,
- #endif
- 	ret = clk_set_rate(mpu_clk, freqs.new * 1000);
- 	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
--#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
-+#elif defined(CONFIG_ARCH_OMAP3)
- 	freq = target_freq * 1000;
- 	if (opp_find_freq_ceil(mpu_dev, &freq))
--		omap_pm_cpu_set_freq(freq);
-+		omap_device_scale(mpu_dev, mpu_dev, freq);
- #endif
- 	return ret;
- }
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch b/recipes-kernel/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch
deleted file mode 100644
index fe85652..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From b54b316174e1d59a820e68c45c4abfc1336d8e09 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Wed, 18 Aug 2010 16:22:43 +0530
-Subject: [PATCH 16/20] OMAP3: Introduce voltage domain info in the hwmod structures.
-
-This patch adds voltage domain info in the relevant
-device hwmod structures so as to enable OMAP3 DVFS
-support.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |    3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
-index 8d81813..c57f34d 100644
---- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
-@@ -94,6 +94,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
- static struct omap_hwmod omap3xxx_l3_main_hwmod = {
- 	.name		= "l3_main",
- 	.class		= &l3_hwmod_class,
-+	.vdd_name	= "core",
- 	.masters	= omap3xxx_l3_main_masters,
- 	.masters_cnt	= ARRAY_SIZE(omap3xxx_l3_main_masters),
- 	.slaves		= omap3xxx_l3_main_slaves,
-@@ -384,6 +385,7 @@ static struct omap_hwmod omap3xxx_mpu_hwmod = {
- 	.name		= "mpu",
- 	.class		= &mpu_hwmod_class,
- 	.main_clk	= "arm_fck",
-+	.vdd_name	= "mpu",
- 	.masters	= omap3xxx_mpu_masters,
- 	.masters_cnt	= ARRAY_SIZE(omap3xxx_mpu_masters),
- 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
-@@ -412,6 +414,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_iva_masters[] = {
- static struct omap_hwmod omap3xxx_iva_hwmod = {
- 	.name		= "iva",
- 	.class		= &iva_hwmod_class,
-+	.vdd_name	= "mpu",
- 	.masters	= omap3xxx_iva_masters,
- 	.masters_cnt	= ARRAY_SIZE(omap3xxx_iva_masters),
- 	.omap_chip	= OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch b/recipes-kernel/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch
deleted file mode 100644
index 6899939..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From c196a4ac3941fb9af4654d5d028ad21f4b91d721 Mon Sep 17 00:00:00 2001
-From: Thara Gopinath <thara at ti.com>
-Date: Wed, 18 Aug 2010 16:22:49 +0530
-Subject: [PATCH 17/20] OMAP3: Add voltage dependency table for VDD1.
-
-In OMAP3, for perfomrance reasons when VDD1 is at voltage above
-1.075V, VDD2 should be at 1.15V for perfomrance reasons. This
-patch introduce this cross VDD dependency for OMAP3 VDD1.
-
-Signed-off-by: Thara Gopinath <thara at ti.com>
----
- arch/arm/mach-omap2/voltage.c |   24 ++++++++++++++++++++++--
- 1 files changed, 22 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
-index 2f331de..d10cb1b 100644
---- a/arch/arm/mach-omap2/voltage.c
-+++ b/arch/arm/mach-omap2/voltage.c
-@@ -374,6 +374,23 @@ static struct omap_volt_data omap44xx_vdd_core_volt_data[] = {
- 	VOLT_DATA_DEFINE(0, 0, 0, 0),
- };
- 
-+/* OMAP 3430 MPU Core VDD dependency table */
-+static struct omap_vdd_dep_volt omap34xx_vdd1_vdd2_data[] = {
-+	{.main_vdd_volt = 975000, .dep_vdd_volt = 1050000},
-+	{.main_vdd_volt = 1075000, .dep_vdd_volt = 1050000},
-+	{.main_vdd_volt = 1200000, .dep_vdd_volt = 1150000},
-+	{.main_vdd_volt = 1270000, .dep_vdd_volt = 1150000},
-+	{.main_vdd_volt = 1350000, .dep_vdd_volt = 1150000},
-+	{.main_vdd_volt = 0, .dep_vdd_volt = 0},
-+};
-+
-+static struct omap_vdd_dep_info omap34xx_vdd1_dep_info[] = {
-+	{
-+		.name	= "core",
-+		.dep_table = omap34xx_vdd1_vdd2_data,
-+	},
-+};
-+
- static struct dentry *voltage_dir;
- 
- /* Init function pointers */
-@@ -879,10 +896,13 @@ static int __init omap3_vdd_data_configure(struct omap_vdd_info *vdd)
- 	}
- 
- 	if (!strcmp(vdd->voltdm.name, "mpu")) {
--		if (cpu_is_omap3630())
-+		if (cpu_is_omap3630()) {
- 			vdd->volt_data = omap36xx_vddmpu_volt_data;
--		else
-+		} else {
- 			vdd->volt_data = omap34xx_vddmpu_volt_data;
-+			vdd->dep_vdd_info = omap34xx_vdd1_dep_info;
-+			vdd->nr_dep_vdd = ARRAY_SIZE(omap34xx_vdd1_dep_info);
-+		}
- 
- 		vdd->vp_reg.tranxdone_status = OMAP3430_VP1_TRANXDONE_ST_MASK;
- 		vdd->vc_reg.cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch b/recipes-kernel/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch
deleted file mode 100644
index e21fe96..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 16c7667d2908631149ef38b7b6dd7b08d6d5502e Mon Sep 17 00:00:00 2001
-From: Nishanth Menon <nm at ti.com>
-Date: Wed, 5 Jan 2011 14:14:55 -0600
-Subject: [PATCH 18/20] omap3|4: opp: make omapx_opp_init non-static
-
-omap3 and omap4 opp_init should be made non-static to allow
-for platform specific opp table tweaking. making these static
-conflicts with the definition in pm.h(global) as well.
-we include pm.h as well to ensure that there are no such prototype
-conflicts with actual implementation in the future.
-
-Signed-off-by: Nishanth Menon <nm at ti.com>
----
- arch/arm/mach-omap2/opp3xxx_data.c |    3 ++-
- arch/arm/mach-omap2/opp4xxx_data.c |    3 ++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
-index 0486fce..fd3a1af 100644
---- a/arch/arm/mach-omap2/opp3xxx_data.c
-+++ b/arch/arm/mach-omap2/opp3xxx_data.c
-@@ -21,6 +21,7 @@
- #include <plat/cpu.h>
- 
- #include "omap_opp_data.h"
-+#include "pm.h"
- 
- static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
- 	/* MPU OPP1 */
-@@ -88,7 +89,7 @@ static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
- /**
-  * omap3_opp_init() - initialize omap3 opp table
-  */
--static int __init omap3_opp_init(void)
-+int __init omap3_opp_init(void)
- {
- 	int r = -ENODEV;
- 
-diff --git a/arch/arm/mach-omap2/opp4xxx_data.c b/arch/arm/mach-omap2/opp4xxx_data.c
-index a11fa56..f0e9939 100644
---- a/arch/arm/mach-omap2/opp4xxx_data.c
-+++ b/arch/arm/mach-omap2/opp4xxx_data.c
-@@ -22,6 +22,7 @@
- #include <plat/cpu.h>
- 
- #include "omap_opp_data.h"
-+#include "pm.h"
- 
- static struct omap_opp_def __initdata omap44xx_opp_def_list[] = {
- 	/* MPU OPP1 - OPP50 */
-@@ -42,7 +43,7 @@ static struct omap_opp_def __initdata omap44xx_opp_def_list[] = {
- /**
-  * omap4_opp_init() - initialize omap4 opp table
-  */
--static int __init omap4_opp_init(void)
-+int __init omap4_opp_init(void)
- {
- 	int r = -ENODEV;
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch b/recipes-kernel/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch
deleted file mode 100644
index 9d1fa91..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 897e90138695dccac0dca1601542fd5f4c85b657 Mon Sep 17 00:00:00 2001
-From: Nishanth Menon <nm at ti.com>
-Date: Wed, 5 Jan 2011 14:16:59 -0600
-Subject: [PATCH 19/20] OMAP3: beagle xm: enable upto 1GHz OPP
-
-Beagle XM uses 3730 and the board design allows enabling 800MHz and 1GHz
-OPPs. tweak the default table to allow for higher OPP tables
-
-Reported-by: Koen Kooi <koen at beagleboard.org>
-Signed-off-by: Nishanth Menon <nm at ti.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   54 +++++++++++++++++++++++++++++++
- 1 files changed, 54 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index ad0c1d8..1e0870e 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -24,6 +24,7 @@
- #include <linux/irq.h>
- #include <linux/input.h>
- #include <linux/gpio_keys.h>
-+#include <linux/opp.h>
- 
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
-@@ -45,10 +46,12 @@
- #include <plat/gpmc.h>
- #include <plat/nand.h>
- #include <plat/usb.h>
-+#include <plat/omap_device.h>
- 
- #include "mux.h"
- #include "hsmmc.h"
- #include "timer-gp.h"
-+#include "pm.h"
- 
- #define NAND_BLOCK_SIZE		SZ_128K
- 
-@@ -804,6 +807,56 @@ static int __init expansionboard_setup(char *str)
- 	return 0;
- }
- 
-+static void __init beagle_opp_init(void)
-+{
-+	int r = 0;
-+
-+	/* Initialize the omap3 opp table */
-+	if (omap3_opp_init()) {
-+		pr_err("%s: opp default init failed\n", __func__);
-+		return;
-+	}
-+
-+	/* Custom OPP enabled for XM */
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+		struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
-+		struct omap_hwmod *dh = omap_hwmod_lookup("iva");
-+		struct device *dev;
-+
-+		if (!mh || !dh) {
-+			pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
-+				__func__, mh, dh);
-+			r = -EINVAL;
-+		} else {
-+			/* Enable MPU 1GHz and lower opps */
-+			dev = &mh->od->pdev.dev;
-+			r = opp_enable(dev, 800000000);
-+			r |= opp_enable(dev, 1000000000);
-+
-+			/* Enable IVA 800MHz and lower opps */
-+			dev = &dh->od->pdev.dev;
-+			r |= opp_enable(dev, 660000000);
-+			r |= opp_enable(dev, 800000000);
-+		}
-+		if (r) {
-+			pr_err("%s: failed to enable higher opp %d\n",
-+				__func__, r);
-+			/*
-+			 * Cleanup - disable the higher freqs - we dont care
-+			 * about the results
-+			 */
-+			dev = &mh->od->pdev.dev;
-+			opp_disable(dev, 800000000);
-+			opp_disable(dev, 1000000000);
-+			dev = &dh->od->pdev.dev;
-+			opp_disable(dev, 660000000);
-+			opp_disable(dev, 800000000);
-+		} else {
-+			pr_err("%s: turbo OPPs enabled!\n", __func__);
-+		}
-+	}
-+}
-+
- static void __init omap3_beagle_init(void)
- {
- 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
-@@ -876,6 +929,7 @@ static void __init omap3_beagle_init(void)
- 	omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
- 
- 	beagle_display_init();
-+	beagle_opp_init();
- }
- 
- early_param("buddy", expansionboard_setup);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch b/recipes-kernel/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch
deleted file mode 100644
index 107e116..0000000
--- a/recipes-kernel/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch
+++ /dev/null
@@ -1,202 +0,0 @@
-From bb655c594a2f77b17d0747116795f46e00d5ffcb Mon Sep 17 00:00:00 2001
-From: Sanjeev Premi <premi at ti.com>
-Date: Tue, 18 Jan 2011 13:19:55 +0530
-Subject: [PATCH 20/20] omap3: Add basic support for 720MHz part
-
-This patch adds support for new speed enhanced parts with ARM
-and IVA running at 720MHz and 520MHz respectively. These parts
-can be probed at run-time by reading PRODID.SKUID[3:0] at
-0x4830A20C [1].
-
-This patch specifically does following:
- * Detect devices capable of 720MHz.
- * Add new OPP
- * Ensure that OPP is conditionally enabled.
- * Check for presence of IVA before attempting to enable
-   the corresponding OPP.
-
-  [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
-
-Signed-off-by: Sanjeev Premi <premi at ti.com>
----
- arch/arm/mach-omap2/control.h         |    7 ++++
- arch/arm/mach-omap2/id.c              |   10 +++++
- arch/arm/mach-omap2/opp3xxx_data.c    |   63 ++++++++++++++++++++++++++++++++-
- arch/arm/plat-omap/include/plat/cpu.h |    2 +
- 4 files changed, 81 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h
-index f0629ae..eebc045 100644
---- a/arch/arm/mach-omap2/control.h
-+++ b/arch/arm/mach-omap2/control.h
-@@ -365,6 +365,13 @@
- #define		FEAT_NEON		0
- #define		FEAT_NEON_NONE		1
- 
-+/*
-+ * Product ID register
-+ */
-+#define OMAP3_PRODID			0x020C
-+
-+#define OMAP3_SKUID_MASK		0x0f
-+#define		OMAP3_SKUID_720MHZ	0x08
- 
- #ifndef __ASSEMBLY__
- #ifdef CONFIG_ARCH_OMAP2PLUS
-diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
-index 5f9086c..53fbe01 100644
---- a/arch/arm/mach-omap2/id.c
-+++ b/arch/arm/mach-omap2/id.c
-@@ -195,6 +195,15 @@ static void __init omap3_check_features(void)
- 	 * TODO: Get additional info (where applicable)
- 	 *       e.g. Size of L2 cache.
- 	 */
-+
-+	/*
-+	 * Does it support 720MHz?
-+	 */
-+	status = (OMAP3_SKUID_MASK & read_tap_reg(OMAP3_PRODID));
-+
-+	if (status & OMAP3_SKUID_720MHZ) {
-+		omap3_features |= OMAP3_HAS_720MHZ;
-+	}
- }
- 
- static void __init omap3_check_revision(void)
-@@ -445,6 +454,7 @@ static void __init omap3_cpuinfo(void)
- 	OMAP3_SHOW_FEATURE(neon);
- 	OMAP3_SHOW_FEATURE(isp);
- 	OMAP3_SHOW_FEATURE(192mhz_clk);
-+	OMAP3_SHOW_FEATURE(720mhz);
- 
- 	printk(")\n");
- }
-diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
-index fd3a1af..76d26c7 100644
---- a/arch/arm/mach-omap2/opp3xxx_data.c
-+++ b/arch/arm/mach-omap2/opp3xxx_data.c
-@@ -17,8 +17,10 @@
-  * GNU General Public License for more details.
-  */
- #include <linux/module.h>
-+#include <linux/opp.h>
- 
- #include <plat/cpu.h>
-+#include <plat/omap_device.h>
- 
- #include "omap_opp_data.h"
- #include "pm.h"
-@@ -34,6 +36,8 @@ static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
- 	OPP_INITIALIZER("mpu", true, 550000000, 1270000),
- 	/* MPU OPP5 */
- 	OPP_INITIALIZER("mpu", true, 600000000, 1350000),
-+	/* MPU OPP6 */
-+	OPP_INITIALIZER("mpu", false, 720000000, 1350000),
- 
- 	/*
- 	 * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is
-@@ -59,6 +63,8 @@ static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
- 	OPP_INITIALIZER("iva", true, 400000000, 1270000),
- 	/* DSP OPP5 */
- 	OPP_INITIALIZER("iva", true, 430000000, 1350000),
-+	/* DSP OPP6 */
-+	OPP_INITIALIZER("iva", false, 520000000, 1350000),
- };
- 
- static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
-@@ -86,6 +92,57 @@ static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
- 	OPP_INITIALIZER("iva", false, 800000000, 1375000),
- };
- 
-+
-+/**
-+ * omap3_opp_enable_720Mhz() - Enable the OPP corresponding to 720MHz
-+ *
-+ * This function would be executed only if the silicon is capable of
-+ * running at the 720MHz.
-+ */
-+static int __init omap3_opp_enable_720Mhz(void)
-+{
-+	int r = -ENODEV;
-+	struct omap_hwmod *oh_mpu = omap_hwmod_lookup("mpu");
-+	struct omap_hwmod *oh_iva;
-+	struct platform_device *pdev;
-+
-+	if (!oh_mpu || !oh_mpu->od) {
-+		goto err;
-+	} else {
-+		pdev = &oh_mpu->od->pdev;
-+
-+		r = opp_enable(&pdev->dev, 720000000);
-+		if (r < 0) {
-+			dev_err(&pdev->dev,
-+				"opp_enable() failed for mpu at 720MHz");
-+			goto err;
-+		}
-+	}
-+
-+	if (omap3_has_iva()) {
-+		oh_iva = omap_hwmod_lookup("iva");
-+
-+		if (!oh_iva || !oh_iva->od) {
-+			r = -ENODEV;
-+			goto err;
-+		} else {
-+			pdev = &oh_iva->od->pdev;
-+
-+			r = opp_enable(&pdev->dev, 520000000);
-+			if (r < 0) {
-+				dev_err(&pdev->dev,
-+					"opp_enable() failed for iva at 520MHz");
-+				goto err;
-+			}
-+		}
-+	}
-+
-+	dev_info(&pdev->dev, "Enabled OPP corresponding to 720MHz\n");
-+
-+err:
-+	return r;
-+}
-+
- /**
-  * omap3_opp_init() - initialize omap3 opp table
-  */
-@@ -99,10 +156,14 @@ int __init omap3_opp_init(void)
- 	if (cpu_is_omap3630())
- 		r = omap_init_opp_table(omap36xx_opp_def_list,
- 			ARRAY_SIZE(omap36xx_opp_def_list));
--	else
-+	else {
- 		r = omap_init_opp_table(omap34xx_opp_def_list,
- 			ARRAY_SIZE(omap34xx_opp_def_list));
- 
-+		if (omap3_has_720mhz())
-+			r = omap3_opp_enable_720Mhz();
-+	}
-+
- 	return r;
- }
- device_initcall(omap3_opp_init);
-diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
-index 1a8c347..7d24faa 100644
---- a/arch/arm/plat-omap/include/plat/cpu.h
-+++ b/arch/arm/plat-omap/include/plat/cpu.h
-@@ -510,6 +510,7 @@ extern u32 omap3_features;
- #define OMAP3_HAS_ISP			BIT(4)
- #define OMAP3_HAS_192MHZ_CLK		BIT(5)
- #define OMAP3_HAS_IO_WAKEUP		BIT(6)
-+#define OMAP3_HAS_720MHZ		BIT(7)
- 
- #define OMAP3_HAS_FEATURE(feat,flag)			\
- static inline unsigned int omap3_has_ ##feat(void)	\
-@@ -524,5 +525,6 @@ OMAP3_HAS_FEATURE(neon, NEON)
- OMAP3_HAS_FEATURE(isp, ISP)
- OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
- OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
-+OMAP3_HAS_FEATURE(720mhz, 720MHZ)
- 
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch b/recipes-kernel/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch
deleted file mode 100644
index 845a4f9..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 679fd7bc2af7980a4b9360ff42f515c3cc4e3674 Mon Sep 17 00:00:00 2001
-From: Lennert Buytenhek <buytenh at wantstofly.org>
-Date: Wed, 15 Dec 2010 07:20:16 +0800
-Subject: [PATCH 01/65] ARM: pxa: PXA_ESERIES depends on FB_W100.
-
-As arch/arm/mach-pxa/eseries.c references w100fb_gpio_{read,write}()
-directly.
-
-Signed-off-by: Lennert Buytenhek <buytenh at secretlab.ca>
-Signed-off-by: Eric Miao <eric.y.miao at gmail.com>
----
- arch/arm/mach-pxa/Kconfig |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
-index dd235ec..c93e73d 100644
---- a/arch/arm/mach-pxa/Kconfig
-+++ b/arch/arm/mach-pxa/Kconfig
-@@ -540,6 +540,7 @@ config MACH_ICONTROL
- config ARCH_PXA_ESERIES
- 	bool "PXA based Toshiba e-series PDAs"
- 	select PXA25x
-+	select FB_W100
- 
- config MACH_E330
- 	bool "Toshiba e330"
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch b/recipes-kernel/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch
deleted file mode 100644
index 19b1a6c..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From d7bbfe094baebc1515d3919a1e886fcfa655ff5a Mon Sep 17 00:00:00 2001
-From: Russell King <rmk+kernel at arm.linux.org.uk>
-Date: Sat, 18 Dec 2010 13:57:00 +0000
-Subject: [PATCH 02/65] ARM: smp: avoid incrementing mm_users on CPU startup
-
-We should not be incrementing mm_users when we startup a secondary
-CPU - doing so results in mm_users incrementing by one each time we
-hotplug a CPU, which will eventually wrap, and will cause problems.
-
-Other architectures such as x86 do not increment mm_users, but only
-mm_count, so we follow that pattern.
-
-Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
----
- arch/arm/kernel/smp.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index 8c19595..9066473 100644
---- a/arch/arm/kernel/smp.c
-+++ b/arch/arm/kernel/smp.c
-@@ -310,7 +310,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
- 	 * All kernel threads share the same mm context; grab a
- 	 * reference and switch to it.
- 	 */
--	atomic_inc(&mm->mm_users);
- 	atomic_inc(&mm->mm_count);
- 	current->active_mm = mm;
- 	cpumask_set_cpu(cpu, mm_cpumask(mm));
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch b/recipes-kernel/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch
deleted file mode 100644
index d31b0e6..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From b4edc88b911049a85162600f579d0364ee311d4e Mon Sep 17 00:00:00 2001
-From: Nicolas Pitre <nicolas.pitre at linaro.org>
-Date: Wed, 15 Dec 2010 15:14:45 -0500
-Subject: [PATCH 03/65] ARM: get rid of kmap_high_l1_vipt()
-
-Since commit 3e4d3af501 "mm: stack based kmap_atomic()", it is no longer
-necessary to carry an ad hoc version of kmap_atomic() added in commit
-7e5a69e83b "ARM: 6007/1: fix highmem with VIPT cache and DMA" to cope
-with reentrancy.
-
-In fact, it is now actively wrong to rely on fixed kmap type indices
-(namely KM_L1_CACHE) as kmap_atomic() totally ignores them now and a
-concurrent instance of it may reuse any slot for any purpose.
-
-Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>
----
- arch/arm/include/asm/highmem.h |    3 -
- arch/arm/mm/dma-mapping.c      |    7 ++-
- arch/arm/mm/flush.c            |    7 ++-
- arch/arm/mm/highmem.c          |   87 ----------------------------------------
- 4 files changed, 8 insertions(+), 96 deletions(-)
-
-diff --git a/arch/arm/include/asm/highmem.h b/arch/arm/include/asm/highmem.h
-index 1fc684e..7080e2c 100644
---- a/arch/arm/include/asm/highmem.h
-+++ b/arch/arm/include/asm/highmem.h
-@@ -25,9 +25,6 @@ extern void *kmap_high(struct page *page);
- extern void *kmap_high_get(struct page *page);
- extern void kunmap_high(struct page *page);
- 
--extern void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte);
--extern void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte);
--
- /*
-  * The following functions are already defined by <linux/highmem.h>
-  * when CONFIG_HIGHMEM is not set.
-diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
-index ac6a361..809f1bf 100644
---- a/arch/arm/mm/dma-mapping.c
-+++ b/arch/arm/mm/dma-mapping.c
-@@ -17,6 +17,7 @@
- #include <linux/init.h>
- #include <linux/device.h>
- #include <linux/dma-mapping.h>
-+#include <linux/highmem.h>
- 
- #include <asm/memory.h>
- #include <asm/highmem.h>
-@@ -480,10 +481,10 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,
- 				op(vaddr, len, dir);
- 				kunmap_high(page);
- 			} else if (cache_is_vipt()) {
--				pte_t saved_pte;
--				vaddr = kmap_high_l1_vipt(page, &saved_pte);
-+				/* unmapped pages might still be cached */
-+				vaddr = kmap_atomic(page);
- 				op(vaddr + offset, len, dir);
--				kunmap_high_l1_vipt(page, saved_pte);
-+				kunmap_atomic(vaddr);
- 			}
- 		} else {
- 			vaddr = page_address(page) + offset;
-diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
-index 391ffae..c29f283 100644
---- a/arch/arm/mm/flush.c
-+++ b/arch/arm/mm/flush.c
-@@ -10,6 +10,7 @@
- #include <linux/module.h>
- #include <linux/mm.h>
- #include <linux/pagemap.h>
-+#include <linux/highmem.h>
- 
- #include <asm/cacheflush.h>
- #include <asm/cachetype.h>
-@@ -180,10 +181,10 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)
- 			__cpuc_flush_dcache_area(addr, PAGE_SIZE);
- 			kunmap_high(page);
- 		} else if (cache_is_vipt()) {
--			pte_t saved_pte;
--			addr = kmap_high_l1_vipt(page, &saved_pte);
-+			/* unmapped pages might still be cached */
-+			addr = kmap_atomic(page);
- 			__cpuc_flush_dcache_area(addr, PAGE_SIZE);
--			kunmap_high_l1_vipt(page, saved_pte);
-+			kunmap_atomic(addr);
- 		}
- 	}
- 
-diff --git a/arch/arm/mm/highmem.c b/arch/arm/mm/highmem.c
-index c435fd9..807c057 100644
---- a/arch/arm/mm/highmem.c
-+++ b/arch/arm/mm/highmem.c
-@@ -140,90 +140,3 @@ struct page *kmap_atomic_to_page(const void *ptr)
- 	pte = TOP_PTE(vaddr);
- 	return pte_page(*pte);
- }
--
--#ifdef CONFIG_CPU_CACHE_VIPT
--
--#include <linux/percpu.h>
--
--/*
-- * The VIVT cache of a highmem page is always flushed before the page
-- * is unmapped. Hence unmapped highmem pages need no cache maintenance
-- * in that case.
-- *
-- * However unmapped pages may still be cached with a VIPT cache, and
-- * it is not possible to perform cache maintenance on them using physical
-- * addresses unfortunately.  So we have no choice but to set up a temporary
-- * virtual mapping for that purpose.
-- *
-- * Yet this VIPT cache maintenance may be triggered from DMA support
-- * functions which are possibly called from interrupt context. As we don't
-- * want to keep interrupt disabled all the time when such maintenance is
-- * taking place, we therefore allow for some reentrancy by preserving and
-- * restoring the previous fixmap entry before the interrupted context is
-- * resumed.  If the reentrancy depth is 0 then there is no need to restore
-- * the previous fixmap, and leaving the current one in place allow it to
-- * be reused the next time without a TLB flush (common with DMA).
-- */
--
--static DEFINE_PER_CPU(int, kmap_high_l1_vipt_depth);
--
--void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte)
--{
--	unsigned int idx, cpu;
--	int *depth;
--	unsigned long vaddr, flags;
--	pte_t pte, *ptep;
--
--	if (!in_interrupt())
--		preempt_disable();
--
--	cpu = smp_processor_id();
--	depth = &per_cpu(kmap_high_l1_vipt_depth, cpu);
--
--	idx = KM_L1_CACHE + KM_TYPE_NR * cpu;
--	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
--	ptep = TOP_PTE(vaddr);
--	pte = mk_pte(page, kmap_prot);
--
--	raw_local_irq_save(flags);
--	(*depth)++;
--	if (pte_val(*ptep) == pte_val(pte)) {
--		*saved_pte = pte;
--	} else {
--		*saved_pte = *ptep;
--		set_pte_ext(ptep, pte, 0);
--		local_flush_tlb_kernel_page(vaddr);
--	}
--	raw_local_irq_restore(flags);
--
--	return (void *)vaddr;
--}
--
--void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte)
--{
--	unsigned int idx, cpu = smp_processor_id();
--	int *depth = &per_cpu(kmap_high_l1_vipt_depth, cpu);
--	unsigned long vaddr, flags;
--	pte_t pte, *ptep;
--
--	idx = KM_L1_CACHE + KM_TYPE_NR * cpu;
--	vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
--	ptep = TOP_PTE(vaddr);
--	pte = mk_pte(page, kmap_prot);
--
--	BUG_ON(pte_val(*ptep) != pte_val(pte));
--	BUG_ON(*depth <= 0);
--
--	raw_local_irq_save(flags);
--	(*depth)--;
--	if (*depth != 0 && pte_val(pte) != pte_val(saved_pte)) {
--		set_pte_ext(ptep, saved_pte, 0);
--		local_flush_tlb_kernel_page(vaddr);
--	}
--	raw_local_irq_restore(flags);
--
--	if (!in_interrupt())
--		preempt_enable();
--}
--
--#endif  /* CONFIG_CPU_CACHE_VIPT */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch b/recipes-kernel/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch
deleted file mode 100644
index 32643f6..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch
+++ /dev/null
@@ -1,189 +0,0 @@
-From fc077c0fbb09ca255691d05789076d121ae11789 Mon Sep 17 00:00:00 2001
-From: Nicolas Pitre <nicolas.pitre at linaro.org>
-Date: Wed, 15 Dec 2010 23:29:04 -0500
-Subject: [PATCH 04/65] ARM: fix cache-xsc3l2 after stack based kmap_atomic()
-
-Since commit 3e4d3af501 "mm: stack based kmap_atomic()", it is actively
-wrong to rely on fixed kmap type indices (namely KM_L2_CACHE) as
-kmap_atomic() totally ignores them and a concurrent instance of it may
-happily reuse any slot for any purpose.  Because kmap_atomic() is now
-able to deal with reentrancy, we can get rid of the ad hoc mapping here,
-and we even don't have to disable IRQs anymore (highmem case).
-
-While the code is made much simpler, there is a needless cache flush
-introduced by the usage of __kunmap_atomic().  It is not clear if the
-performance difference to remove that is worth the cost in code
-maintenance (I don't think there are that many highmem users on that
-platform if at all anyway).
-
-Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>
----
- arch/arm/mm/cache-xsc3l2.c |   57 ++++++++++++++++---------------------------
- 1 files changed, 21 insertions(+), 36 deletions(-)
-
-diff --git a/arch/arm/mm/cache-xsc3l2.c b/arch/arm/mm/cache-xsc3l2.c
-index c315492..5a32020 100644
---- a/arch/arm/mm/cache-xsc3l2.c
-+++ b/arch/arm/mm/cache-xsc3l2.c
-@@ -17,14 +17,10 @@
-  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-  */
- #include <linux/init.h>
-+#include <linux/highmem.h>
- #include <asm/system.h>
- #include <asm/cputype.h>
- #include <asm/cacheflush.h>
--#include <asm/kmap_types.h>
--#include <asm/fixmap.h>
--#include <asm/pgtable.h>
--#include <asm/tlbflush.h>
--#include "mm.h"
- 
- #define CR_L2	(1 << 26)
- 
-@@ -71,16 +67,15 @@ static inline void xsc3_l2_inv_all(void)
- 	dsb();
- }
- 
-+static inline void l2_unmap_va(unsigned long va)
-+{
- #ifdef CONFIG_HIGHMEM
--#define l2_map_save_flags(x)		raw_local_save_flags(x)
--#define l2_map_restore_flags(x)		raw_local_irq_restore(x)
--#else
--#define l2_map_save_flags(x)		((x) = 0)
--#define l2_map_restore_flags(x)		((void)(x))
-+	if (va != -1)
-+		kunmap_atomic((void *)va);
- #endif
-+}
- 
--static inline unsigned long l2_map_va(unsigned long pa, unsigned long prev_va,
--				      unsigned long flags)
-+static inline unsigned long l2_map_va(unsigned long pa, unsigned long prev_va)
- {
- #ifdef CONFIG_HIGHMEM
- 	unsigned long va = prev_va & PAGE_MASK;
-@@ -89,17 +84,10 @@ static inline unsigned long l2_map_va(unsigned long pa, unsigned long prev_va,
- 		/*
- 		 * Switching to a new page.  Because cache ops are
- 		 * using virtual addresses only, we must put a mapping
--		 * in place for it.  We also enable interrupts for a
--		 * short while and disable them again to protect this
--		 * mapping.
-+		 * in place for it.
- 		 */
--		unsigned long idx;
--		raw_local_irq_restore(flags);
--		idx = KM_L2_CACHE + KM_TYPE_NR * smp_processor_id();
--		va = __fix_to_virt(FIX_KMAP_BEGIN + idx);
--		raw_local_irq_restore(flags | PSR_I_BIT);
--		set_pte_ext(TOP_PTE(va), pfn_pte(pa >> PAGE_SHIFT, PAGE_KERNEL), 0);
--		local_flush_tlb_kernel_page(va);
-+		l2_unmap_va(prev_va);
-+		va = (unsigned long)kmap_atomic_pfn(pa >> PAGE_SHIFT);
- 	}
- 	return va + (pa_offset >> (32 - PAGE_SHIFT));
- #else
-@@ -109,7 +97,7 @@ static inline unsigned long l2_map_va(unsigned long pa, unsigned long prev_va,
- 
- static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
- {
--	unsigned long vaddr, flags;
-+	unsigned long vaddr;
- 
- 	if (start == 0 && end == -1ul) {
- 		xsc3_l2_inv_all();
-@@ -117,13 +105,12 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
- 	}
- 
- 	vaddr = -1;  /* to force the first mapping */
--	l2_map_save_flags(flags);
- 
- 	/*
- 	 * Clean and invalidate partial first cache line.
- 	 */
- 	if (start & (CACHE_LINE_SIZE - 1)) {
--		vaddr = l2_map_va(start & ~(CACHE_LINE_SIZE - 1), vaddr, flags);
-+		vaddr = l2_map_va(start & ~(CACHE_LINE_SIZE - 1), vaddr);
- 		xsc3_l2_clean_mva(vaddr);
- 		xsc3_l2_inv_mva(vaddr);
- 		start = (start | (CACHE_LINE_SIZE - 1)) + 1;
-@@ -133,7 +120,7 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
- 	 * Invalidate all full cache lines between 'start' and 'end'.
- 	 */
- 	while (start < (end & ~(CACHE_LINE_SIZE - 1))) {
--		vaddr = l2_map_va(start, vaddr, flags);
-+		vaddr = l2_map_va(start, vaddr);
- 		xsc3_l2_inv_mva(vaddr);
- 		start += CACHE_LINE_SIZE;
- 	}
-@@ -142,31 +129,30 @@ static void xsc3_l2_inv_range(unsigned long start, unsigned long end)
- 	 * Clean and invalidate partial last cache line.
- 	 */
- 	if (start < end) {
--		vaddr = l2_map_va(start, vaddr, flags);
-+		vaddr = l2_map_va(start, vaddr);
- 		xsc3_l2_clean_mva(vaddr);
- 		xsc3_l2_inv_mva(vaddr);
- 	}
- 
--	l2_map_restore_flags(flags);
-+	l2_unmap_va(vaddr);
- 
- 	dsb();
- }
- 
- static void xsc3_l2_clean_range(unsigned long start, unsigned long end)
- {
--	unsigned long vaddr, flags;
-+	unsigned long vaddr;
- 
- 	vaddr = -1;  /* to force the first mapping */
--	l2_map_save_flags(flags);
- 
- 	start &= ~(CACHE_LINE_SIZE - 1);
- 	while (start < end) {
--		vaddr = l2_map_va(start, vaddr, flags);
-+		vaddr = l2_map_va(start, vaddr);
- 		xsc3_l2_clean_mva(vaddr);
- 		start += CACHE_LINE_SIZE;
- 	}
- 
--	l2_map_restore_flags(flags);
-+	l2_unmap_va(vaddr);
- 
- 	dsb();
- }
-@@ -193,7 +179,7 @@ static inline void xsc3_l2_flush_all(void)
- 
- static void xsc3_l2_flush_range(unsigned long start, unsigned long end)
- {
--	unsigned long vaddr, flags;
-+	unsigned long vaddr;
- 
- 	if (start == 0 && end == -1ul) {
- 		xsc3_l2_flush_all();
-@@ -201,17 +187,16 @@ static void xsc3_l2_flush_range(unsigned long start, unsigned long end)
- 	}
- 
- 	vaddr = -1;  /* to force the first mapping */
--	l2_map_save_flags(flags);
- 
- 	start &= ~(CACHE_LINE_SIZE - 1);
- 	while (start < end) {
--		vaddr = l2_map_va(start, vaddr, flags);
-+		vaddr = l2_map_va(start, vaddr);
- 		xsc3_l2_clean_mva(vaddr);
- 		xsc3_l2_inv_mva(vaddr);
- 		start += CACHE_LINE_SIZE;
- 	}
- 
--	l2_map_restore_flags(flags);
-+	l2_unmap_va(vaddr);
- 
- 	dsb();
- }
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch b/recipes-kernel/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch
deleted file mode 100644
index a9fd1f0..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-From ccb2858c9bd5fff216feab665db14ca32be8d6fe Mon Sep 17 00:00:00 2001
-From: Nicolas Pitre <nicolas.pitre at linaro.org>
-Date: Thu, 16 Dec 2010 14:56:34 -0500
-Subject: [PATCH 05/65] ARM: fix cache-feroceon-l2 after stack based kmap_atomic()
-
-Since commit 3e4d3af501 "mm: stack based kmap_atomic()", it is actively
-wrong to rely on fixed kmap type indices (namely KM_L2_CACHE) as
-kmap_atomic() totally ignores them and a concurrent instance of it may
-happily reuse any slot for any purpose.  Because kmap_atomic() is now
-able to deal with reentrancy, we can get rid of the ad hoc mapping here.
-
-While the code is made much simpler, there is a needless cache flush
-introduced by the usage of __kunmap_atomic().  It is not clear if the
-performance difference to remove that is worth the cost in code
-maintenance (I don't think there are that many highmem users on that
-platform anyway) but that should be reconsidered when/if someone cares
-enough to do some measurements.
-
-Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>
----
- arch/arm/mm/cache-feroceon-l2.c |   37 +++++++++++++++++++------------------
- 1 files changed, 19 insertions(+), 18 deletions(-)
-
-diff --git a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c
-index 6e77c04..e0b0e7a 100644
---- a/arch/arm/mm/cache-feroceon-l2.c
-+++ b/arch/arm/mm/cache-feroceon-l2.c
-@@ -13,13 +13,9 @@
-  */
- 
- #include <linux/init.h>
-+#include <linux/highmem.h>
- #include <asm/cacheflush.h>
--#include <asm/kmap_types.h>
--#include <asm/fixmap.h>
--#include <asm/pgtable.h>
--#include <asm/tlbflush.h>
- #include <plat/cache-feroceon-l2.h>
--#include "mm.h"
- 
- /*
-  * Low-level cache maintenance operations.
-@@ -39,27 +35,30 @@
-  * between which we don't want to be preempted.
-  */
- 
--static inline unsigned long l2_start_va(unsigned long paddr)
-+static inline unsigned long l2_get_va(unsigned long paddr)
- {
- #ifdef CONFIG_HIGHMEM
- 	/*
--	 * Let's do our own fixmap stuff in a minimal way here.
- 	 * Because range ops can't be done on physical addresses,
- 	 * we simply install a virtual mapping for it only for the
- 	 * TLB lookup to occur, hence no need to flush the untouched
--	 * memory mapping.  This is protected with the disabling of
--	 * interrupts by the caller.
-+	 * memory mapping afterwards (note: a cache flush may happen
-+	 * in some circumstances depending on the path taken in kunmap_atomic).
- 	 */
--	unsigned long idx = KM_L2_CACHE + KM_TYPE_NR * smp_processor_id();
--	unsigned long vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
--	set_pte_ext(TOP_PTE(vaddr), pfn_pte(paddr >> PAGE_SHIFT, PAGE_KERNEL), 0);
--	local_flush_tlb_kernel_page(vaddr);
--	return vaddr + (paddr & ~PAGE_MASK);
-+	void *vaddr = kmap_atomic_pfn(paddr >> PAGE_SHIFT);
-+	return (unsigned long)vaddr + (paddr & ~PAGE_MASK);
- #else
- 	return __phys_to_virt(paddr);
- #endif
- }
- 
-+static inline void l2_put_va(unsigned long vaddr)
-+{
-+#ifdef CONFIG_HIGHMEM
-+	kunmap_atomic((void *)vaddr);
-+#endif
-+}
-+
- static inline void l2_clean_pa(unsigned long addr)
- {
- 	__asm__("mcr p15, 1, %0, c15, c9, 3" : : "r" (addr));
-@@ -76,13 +75,14 @@ static inline void l2_clean_pa_range(unsigned long start, unsigned long end)
- 	 */
- 	BUG_ON((start ^ end) >> PAGE_SHIFT);
- 
--	raw_local_irq_save(flags);
--	va_start = l2_start_va(start);
-+	va_start = l2_get_va(start);
- 	va_end = va_start + (end - start);
-+	raw_local_irq_save(flags);
- 	__asm__("mcr p15, 1, %0, c15, c9, 4\n\t"
- 		"mcr p15, 1, %1, c15, c9, 5"
- 		: : "r" (va_start), "r" (va_end));
- 	raw_local_irq_restore(flags);
-+	l2_put_va(va_start);
- }
- 
- static inline void l2_clean_inv_pa(unsigned long addr)
-@@ -106,13 +106,14 @@ static inline void l2_inv_pa_range(unsigned long start, unsigned long end)
- 	 */
- 	BUG_ON((start ^ end) >> PAGE_SHIFT);
- 
--	raw_local_irq_save(flags);
--	va_start = l2_start_va(start);
-+	va_start = l2_get_va(start);
- 	va_end = va_start + (end - start);
-+	raw_local_irq_save(flags);
- 	__asm__("mcr p15, 1, %0, c15, c11, 4\n\t"
- 		"mcr p15, 1, %1, c15, c11, 5"
- 		: : "r" (va_start), "r" (va_end));
- 	raw_local_irq_restore(flags);
-+	l2_put_va(va_start);
- }
- 
- static inline void l2_inv_all(void)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch b/recipes-kernel/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch
deleted file mode 100644
index 8302e6c..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From b4defd15cd77597734bab7089fa721fde6e3cfd5 Mon Sep 17 00:00:00 2001
-From: Eric Anholt <eric at anholt.net>
-Date: Tue, 14 Dec 2010 10:06:46 -0800
-Subject: [PATCH 06/65] drm/i915: Set the required VFMUNIT clock gating disable on Ironlake.
-
-It's required by the specs, but we don't know why.  Let's not find out
-why.
-
-Signed-off-by: Eric Anholt <eric at anholt.net>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
- drivers/gpu/drm/i915/i915_reg.h      |    3 +++
- drivers/gpu/drm/i915/intel_display.c |    2 ++
- 2 files changed, 5 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
-index 878fc76..8470a97 100644
---- a/drivers/gpu/drm/i915/i915_reg.h
-+++ b/drivers/gpu/drm/i915/i915_reg.h
-@@ -2471,6 +2471,9 @@
- # define MARIUNIT_CLOCK_GATE_DISABLE		(1 << 18)
- # define SVSMUNIT_CLOCK_GATE_DISABLE		(1 << 1)
- 
-+#define PCH_3DCGDIS1		0x46024
-+# define VFMUNIT_CLOCK_GATE_DISABLE		(1 << 11)
-+
- #define FDI_PLL_FREQ_CTL        0x46030
- #define  FDI_PLL_FREQ_CHANGE_REQUEST    (1<<24)
- #define  FDI_PLL_FREQ_LOCK_LIMIT_MASK   0xfff00
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index d9b7092..97e374e 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -5825,6 +5825,8 @@ void intel_init_clock_gating(struct drm_device *dev)
- 			I915_WRITE(PCH_3DCGDIS0,
- 				   MARIUNIT_CLOCK_GATE_DISABLE |
- 				   SVSMUNIT_CLOCK_GATE_DISABLE);
-+			I915_WRITE(PCH_3DCGDIS1,
-+				   VFMUNIT_CLOCK_GATE_DISABLE);
- 		}
- 
- 		I915_WRITE(PCH_DSPCLK_GATE_D, dspclk_gate);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch b/recipes-kernel/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch
deleted file mode 100644
index 4e5120a..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 184e12ee6bca758bee292970ed045d7a0405168c Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris at chris-wilson.co.uk>
-Date: Thu, 23 Dec 2010 09:43:48 +0000
-Subject: [PATCH 07/65] drm/i915/sdvo: Add hdmi connector properties after initing the connector
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=25012
-Reported-by: Tõnu Raitviir <jussuf at linux.ee>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
- drivers/gpu/drm/i915/intel_sdvo.c |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
-index 27e63ab..6bc42fa 100644
---- a/drivers/gpu/drm/i915/intel_sdvo.c
-+++ b/drivers/gpu/drm/i915/intel_sdvo.c
-@@ -2040,13 +2040,14 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
- 					   SDVO_COLORIMETRY_RGB256);
- 		connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
- 
--		intel_sdvo_add_hdmi_properties(intel_sdvo_connector);
- 		intel_sdvo->is_hdmi = true;
- 	}
- 	intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
- 				       (1 << INTEL_ANALOG_CLONE_BIT));
- 
- 	intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
-+	if (intel_sdvo->is_hdmi)
-+		intel_sdvo_add_hdmi_properties(intel_sdvo_connector);
- 
- 	return true;
- }
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch b/recipes-kernel/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch
deleted file mode 100644
index 9fecb7b..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch
+++ /dev/null
@@ -1,190 +0,0 @@
-From 38684934e58030113d3e89a3f60472e22e2e1ea6 Mon Sep 17 00:00:00 2001
-From: Eric Anholt <eric at anholt.net>
-Date: Mon, 20 Dec 2010 18:40:06 -0800
-Subject: [PATCH 08/65] drm/i915, intel_ips: When i915 loads after IPS, make IPS relink to i915.
-
-The IPS driver is designed to be able to run detached from i915 and
-just not enable GPU turbo in that case, in order to avoid module
-dependencies between the two drivers.  This means that we don't know
-what the load order between the two is going to be, and we had
-previously only supported IPS after (optionally) i915, but not i915
-after IPS.  If the wrong order was chosen, you'd get no GPU turbo, and
-something like half the possible graphics performance.
-
-Signed-off-by: Eric Anholt <eric at anholt.net>
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
-Cc: stable at kernel.org
----
- drivers/gpu/drm/i915/i915_dma.c  |   23 +++++++++++++++++++++++
- drivers/platform/x86/intel_ips.c |   36 +++++++++++++++++++++++++++++++++---
- drivers/platform/x86/intel_ips.h |   21 +++++++++++++++++++++
- 3 files changed, 77 insertions(+), 3 deletions(-)
- create mode 100644 drivers/platform/x86/intel_ips.h
-
-diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
-index e680081..cb900dc 100644
---- a/drivers/gpu/drm/i915/i915_dma.c
-+++ b/drivers/gpu/drm/i915/i915_dma.c
-@@ -34,6 +34,7 @@
- #include "i915_drm.h"
- #include "i915_drv.h"
- #include "i915_trace.h"
-+#include "../../../platform/x86/intel_ips.h"
- #include <linux/pci.h>
- #include <linux/vgaarb.h>
- #include <linux/acpi.h>
-@@ -1871,6 +1872,26 @@ out_unlock:
- EXPORT_SYMBOL_GPL(i915_gpu_turbo_disable);
- 
- /**
-+ * Tells the intel_ips driver that the i915 driver is now loaded, if
-+ * IPS got loaded first.
-+ *
-+ * This awkward dance is so that neither module has to depend on the
-+ * other in order for IPS to do the appropriate communication of
-+ * GPU turbo limits to i915.
-+ */
-+static void
-+ips_ping_for_i915_load(void)
-+{
-+	void (*link)(void);
-+
-+	link = symbol_get(ips_link_to_i915_driver);
-+	if (link) {
-+		link();
-+		symbol_put(ips_link_to_i915_driver);
-+	}
-+}
-+
-+/**
-  * i915_driver_load - setup chip and create an initial config
-  * @dev: DRM device
-  * @flags: startup flags
-@@ -2075,6 +2096,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
- 	dev_priv->mchdev_lock = &mchdev_lock;
- 	spin_unlock(&mchdev_lock);
- 
-+	ips_ping_for_i915_load();
-+
- 	return 0;
- 
- out_workqueue_free:
-diff --git a/drivers/platform/x86/intel_ips.c b/drivers/platform/x86/intel_ips.c
-index c44a5e8..f0b3ad1 100644
---- a/drivers/platform/x86/intel_ips.c
-+++ b/drivers/platform/x86/intel_ips.c
-@@ -75,6 +75,7 @@
- #include <drm/i915_drm.h>
- #include <asm/msr.h>
- #include <asm/processor.h>
-+#include "intel_ips.h"
- 
- #define PCI_DEVICE_ID_INTEL_THERMAL_SENSOR 0x3b32
- 
-@@ -245,6 +246,7 @@
- #define thm_writel(off, val) writel((val), ips->regmap + (off))
- 
- static const int IPS_ADJUST_PERIOD = 5000; /* ms */
-+static bool late_i915_load = false;
- 
- /* For initial average collection */
- static const int IPS_SAMPLE_PERIOD = 200; /* ms */
-@@ -339,6 +341,9 @@ struct ips_driver {
- 	u64 orig_turbo_ratios;
- };
- 
-+static bool
-+ips_gpu_turbo_enabled(struct ips_driver *ips);
-+
- /**
-  * ips_cpu_busy - is CPU busy?
-  * @ips: IPS driver struct
-@@ -517,7 +522,7 @@ static void ips_disable_cpu_turbo(struct ips_driver *ips)
-  */
- static bool ips_gpu_busy(struct ips_driver *ips)
- {
--	if (!ips->gpu_turbo_enabled)
-+	if (!ips_gpu_turbo_enabled(ips))
- 		return false;
- 
- 	return ips->gpu_busy();
-@@ -532,7 +537,7 @@ static bool ips_gpu_busy(struct ips_driver *ips)
-  */
- static void ips_gpu_raise(struct ips_driver *ips)
- {
--	if (!ips->gpu_turbo_enabled)
-+	if (!ips_gpu_turbo_enabled(ips))
- 		return;
- 
- 	if (!ips->gpu_raise())
-@@ -549,7 +554,7 @@ static void ips_gpu_raise(struct ips_driver *ips)
-  */
- static void ips_gpu_lower(struct ips_driver *ips)
- {
--	if (!ips->gpu_turbo_enabled)
-+	if (!ips_gpu_turbo_enabled(ips))
- 		return;
- 
- 	if (!ips->gpu_lower())
-@@ -1454,6 +1459,31 @@ out_err:
- 	return false;
- }
- 
-+static bool
-+ips_gpu_turbo_enabled(struct ips_driver *ips)
-+{
-+	if (!ips->gpu_busy && late_i915_load) {
-+		if (ips_get_i915_syms(ips)) {
-+			dev_info(&ips->dev->dev,
-+				 "i915 driver attached, reenabling gpu turbo\n");
-+			ips->gpu_turbo_enabled = !(thm_readl(THM_HTS) & HTS_GTD_DIS);
-+		}
-+	}
-+
-+	return ips->gpu_turbo_enabled;
-+}
-+
-+void
-+ips_link_to_i915_driver()
-+{
-+	/* We can't cleanly get at the various ips_driver structs from
-+	 * this caller (the i915 driver), so just set a flag saying
-+	 * that it's time to try getting the symbols again.
-+	 */
-+	late_i915_load = true;
-+}
-+EXPORT_SYMBOL_GPL(ips_link_to_i915_driver);
-+
- static DEFINE_PCI_DEVICE_TABLE(ips_id_table) = {
- 	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL,
- 		     PCI_DEVICE_ID_INTEL_THERMAL_SENSOR), },
-diff --git a/drivers/platform/x86/intel_ips.h b/drivers/platform/x86/intel_ips.h
-new file mode 100644
-index 0000000..73299be
---- /dev/null
-+++ b/drivers/platform/x86/intel_ips.h
-@@ -0,0 +1,21 @@
-+/*
-+ * Copyright (c) 2010 Intel Corporation
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms and conditions of the GNU General Public License,
-+ * version 2, as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope 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.
-+ *
-+ * The full GNU General Public License is included in this distribution in
-+ * the file called "COPYING".
-+ */
-+
-+void ips_link_to_i915_driver(void);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch b/recipes-kernel/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch
deleted file mode 100644
index e0f4515..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From b3ae260de2254a0aed982b5964396a9914859c0e Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris at chris-wilson.co.uk>
-Date: Tue, 14 Dec 2010 19:21:29 +0000
-Subject: [PATCH 09/65] drm/i915: Verify Ironlake eDP presence on DP_A using the capability fuse
-
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
- drivers/gpu/drm/i915/i915_reg.h      |    7 +++++++
- drivers/gpu/drm/i915/intel_display.c |   19 ++++++++++++++++++-
- 2 files changed, 25 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
-index 8470a97..cb8f434 100644
---- a/drivers/gpu/drm/i915/i915_reg.h
-+++ b/drivers/gpu/drm/i915/i915_reg.h
-@@ -2591,6 +2591,13 @@
- #define ILK_DISPLAY_CHICKEN2	0x42004
- #define  ILK_DPARB_GATE	(1<<22)
- #define  ILK_VSDPFD_FULL	(1<<21)
-+#define ILK_DISPLAY_CHICKEN_FUSES	0x42014
-+#define  ILK_INTERNAL_GRAPHICS_DISABLE	(1<<31)
-+#define  ILK_INTERNAL_DISPLAY_DISABLE	(1<<30)
-+#define  ILK_DISPLAY_DEBUG_DISABLE	(1<<29)
-+#define  ILK_HDCP_DISABLE		(1<<25)
-+#define  ILK_eDP_A_DISABLE		(1<<24)
-+#define  ILK_DESKTOP			(1<<23)
- #define ILK_DSPCLK_GATE		0x42020
- #define  ILK_DPARB_CLK_GATE	(1<<5)
- /* According to spec this bit 7/8/9 of 0x42020 should be set to enable FBC */
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 97e374e..fca5232 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -5379,6 +5379,23 @@ static int intel_encoder_clones(struct drm_device *dev, int type_mask)
- 	return index_mask;
- }
- 
-+static bool has_edp_a(struct drm_device *dev)
-+{
-+	struct drm_i915_private *dev_priv = dev->dev_private;
-+
-+	if (!IS_MOBILE(dev))
-+		return false;
-+
-+	if ((I915_READ(DP_A) & DP_DETECTED) == 0)
-+		return false;
-+
-+	if (IS_GEN5(dev) &&
-+	    (I915_READ(ILK_DISPLAY_CHICKEN_FUSES) & ILK_eDP_A_DISABLE))
-+		return false;
-+
-+	return true;
-+}
-+
- static void intel_setup_outputs(struct drm_device *dev)
- {
- 	struct drm_i915_private *dev_priv = dev->dev_private;
-@@ -5396,7 +5413,7 @@ static void intel_setup_outputs(struct drm_device *dev)
- 	if (HAS_PCH_SPLIT(dev)) {
- 		dpd_is_edp = intel_dpd_is_edp(dev);
- 
--		if (IS_MOBILE(dev) && (I915_READ(DP_A) & DP_DETECTED))
-+		if (has_edp_a(dev))
- 			intel_dp_init(dev, DP_A);
- 
- 		if (dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED))
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch b/recipes-kernel/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch
deleted file mode 100644
index 1eeffc2..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 233828cbb5d2331e47cba932130428ea5f915f91 Mon Sep 17 00:00:00 2001
-From: Stephen Warren <swarren at nvidia.com>
-Date: Wed, 22 Dec 2010 04:52:05 +0100
-Subject: [PATCH 10/65] ARM: 6536/1: Add missing SZ_{32,64,128}
-
-... and also remove misleading comment stating that this header is
-auto-generated.
-
-Signed-off-by: Stephen Warren <swarren at nvidia.com>
-Acked-by: Uwe Kleine-Knig <u.kleine-koenig at pengutronix.de>
-Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
----
- arch/arm/include/asm/sizes.h |    6 +++---
- 1 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/arch/arm/include/asm/sizes.h b/arch/arm/include/asm/sizes.h
-index 4fc1565..316bb2b 100644
---- a/arch/arm/include/asm/sizes.h
-+++ b/arch/arm/include/asm/sizes.h
-@@ -13,9 +13,6 @@
-  * along with this program; if not, write to the Free Software
-  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-  */
--/* DO NOT EDIT!! - this file automatically generated
-- *                 from .s file by awk -f s2h.awk
-- */
- /*  Size definitions
-  *  Copyright (C) ARM Limited 1998. All rights reserved.
-  */
-@@ -25,6 +22,9 @@
- 
- /* handy sizes */
- #define SZ_16				0x00000010
-+#define SZ_32				0x00000020
-+#define SZ_64				0x00000040
-+#define SZ_128				0x00000080
- #define SZ_256				0x00000100
- #define SZ_512				0x00000200
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch b/recipes-kernel/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch
deleted file mode 100644
index 99a9ce2..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 1efad2ad25ed60a4d90a87f7e77babb808b3052f Mon Sep 17 00:00:00 2001
-From: Linus Walleij <linus.walleij at stericsson.com>
-Date: Wed, 22 Dec 2010 09:18:29 +0100
-Subject: [PATCH 11/65] ARM: 6537/1: update Nomadik, U300 and Ux500 maintainers
-
-Adding in self as maintainer for Nomadik and Ux500, I'm running
-an active -next tree for that stuff now. Extend file matchers to
-cover a few more relevant drivers and add git references.
-
-Cc: Alessandro Rubini <rubini at unipv.it>
-Acked-by: Srinidhi Kasagar <srinidhi.kasagar at stericsson.com>
-Signed-off-by: Linus Walleij <linus.walleij at stericsson.com>
-Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
----
- MAINTAINERS |   17 ++++++++++++++++-
- 1 files changed, 16 insertions(+), 1 deletions(-)
-
-diff --git a/MAINTAINERS b/MAINTAINERS
-index 4607f18..1c15602 100644
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -792,11 +792,14 @@ S:	Maintained
- 
- ARM/NOMADIK ARCHITECTURE
- M:	Alessandro Rubini <rubini at unipv.it>
-+M:	Linus Walleij <linus.walleij at stericsson.com>
- M:	STEricsson <STEricsson_nomadik_linux at list.st.com>
- L:	linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
- S:	Maintained
- F:	arch/arm/mach-nomadik/
- F:	arch/arm/plat-nomadik/
-+F:	drivers/i2c/busses/i2c-nomadik.c
-+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
- 
- ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
- M:	Nelson Castillo <arhuaco at freaks-unidos.net>
-@@ -998,12 +1001,24 @@ F:	drivers/i2c/busses/i2c-stu300.c
- F:	drivers/rtc/rtc-coh901331.c
- F:	drivers/watchdog/coh901327_wdt.c
- F:	drivers/dma/coh901318*
-+F:	drivers/mfd/ab3100*
-+F:	drivers/rtc/rtc-ab3100.c
-+F:	drivers/rtc/rtc-coh901331.c
-+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
- 
--ARM/U8500 ARM ARCHITECTURE
-+ARM/Ux500 ARM ARCHITECTURE
- M:	Srinidhi Kasagar <srinidhi.kasagar at stericsson.com>
-+M:	Linus Walleij <linus.walleij at stericsson.com>
- L:	linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
- S:	Maintained
- F:	arch/arm/mach-ux500/
-+F:	drivers/dma/ste_dma40*
-+F:	drivers/mfd/ab3550*
-+F:	drivers/mfd/abx500*
-+F:	drivers/mfd/ab8500*
-+F:	drivers/mfd/stmpe*
-+F:	drivers/rtc/rtc-ab8500.c
-+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
- 
- ARM/VFP SUPPORT
- M:	Russell King <linux at arm.linux.org.uk>
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch b/recipes-kernel/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch
deleted file mode 100644
index 0e55c52..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From d0427fe2982e2f4f644b936fe39636916b69fee1 Mon Sep 17 00:00:00 2001
-From: Todd Android Poynor <toddpoynor at google.com>
-Date: Thu, 23 Dec 2010 01:52:44 +0100
-Subject: [PATCH 12/65] ARM: 6540/1: Stop irqsoff trace on return to user
-
-If the irqsoff tracer is in use, stop tracing the interrupt disable
-interval when returning to userspace.  Tracing userspace execution time
-as interrupts disabled time is not helpful for kernel performance
-analysis purposes.  Only do so if the irqsoff tracer is enabled, to
-avoid overhead for lockdep, which doesn't care.
-
-Signed-off-by: Todd Poynor <toddpoynor at google.com>
-Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
----
- arch/arm/kernel/entry-common.S |    6 ++++++
- 1 files changed, 6 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
-index 8bfa987..80bf8cd 100644
---- a/arch/arm/kernel/entry-common.S
-+++ b/arch/arm/kernel/entry-common.S
-@@ -29,6 +29,9 @@ ret_fast_syscall:
- 	ldr	r1, [tsk, #TI_FLAGS]
- 	tst	r1, #_TIF_WORK_MASK
- 	bne	fast_work_pending
-+#if defined(CONFIG_IRQSOFF_TRACER)
-+	asm_trace_hardirqs_on
-+#endif
- 
- 	/* perform architecture specific actions before user return */
- 	arch_ret_to_user r1, lr
-@@ -65,6 +68,9 @@ ret_slow_syscall:
- 	tst	r1, #_TIF_WORK_MASK
- 	bne	work_pending
- no_work_pending:
-+#if defined(CONFIG_IRQSOFF_TRACER)
-+	asm_trace_hardirqs_on
-+#endif
- 	/* perform architecture specific actions before user return */
- 	arch_ret_to_user r1, lr
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch b/recipes-kernel/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch
deleted file mode 100644
index e62a9d8..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From c23a13703fb00384d49a00875fc12a5e00f1946a Mon Sep 17 00:00:00 2001
-From: Dan Williams <dcbw at redhat.com>
-Date: Sun, 19 Dec 2010 08:17:50 +0000
-Subject: [PATCH 13/65] ueagle-atm: fix PHY signal initialization race
-
-A race exists when initializing ueagle-atm devices where the generic atm
-device may not yet be created before the driver attempts to initialize
-it's PHY signal state, which checks whether the atm device has been
-created or not.  This often causes the sysfs 'carrier' attribute to be
-'1' even though no signal has actually been found.
-
-uea_probe
-   usbatm_usb_probe
-      driver->bind (uea_bind)
-         uea_boot
-            kthread_run(uea_kthread)     uea_kthread
-      usbatm_atm_init                       uea_start_reset
-         atm_dev_register                      UPDATE_ATM_SIGNAL
-
-UPDATE_ATM_SIGNAL checks whether the ATM device has been created and if
-not, will not update the PHY signal state.  Because of the race that
-does not always happen in time, and the PHY signal state remains
-ATM_PHY_SIG_FOUND even though no signal exists.
-
-To fix the race, just create the kthread during initialization, and only
-after initialization is complete, start the thread that reboots the
-device and initializes PHY state.
-
-[ 3030.490931] uea_probe: calling usbatm_usb_probe
-[ 3030.490946] ueagle-atm 8-2:1.0: usbatm_usb_probe: trying driver ueagle-atm with vendor=1110, product=9031, ifnum  0
-[ 3030.493691] uea_bind: setting usbatm
-[ 3030.496932] usb 8-2: [ueagle-atm] using iso mode
-[ 3030.497283] ueagle-atm 8-2:1.0: usbatm_usb_probe: using 3021 byte buffer for rx channel 0xffff880125953508
-   <kthread already started before usbatm_usb_probe() has returned>
-[ 3030.497292] usb 8-2: [ueagle-atm] (re)booting started
-   <UPDATE_ATM_SIGNAL checks whether ATM device has been created yet before setting PHY state>
-[ 3030.497298] uea_start_reset: atm dev (null)
-   <and since it hasn't been created yet PHY state is not set>
-[ 3030.497306] ueagle-atm 8-2:1.0: usbatm_usb_probe: using 3392 byte buffer for tx channel 0xffff8801259535b8
-[ 3030.497374] usbatm_usb_probe: about to init
-[ 3030.497379] usbatm_usb_probe: calling usbatm_atm_init
-   <atm device finally gets created>
-[ 3030.497384] usbatm_atm_init: creating atm device!
-
-Signed-off-by: Dan Williams <dcbw at redhat.com>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/usb/atm/ueagle-atm.c |   22 +++++++++++++++++++---
- 1 files changed, 19 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c
-index 44447f5..99ac70e 100644
---- a/drivers/usb/atm/ueagle-atm.c
-+++ b/drivers/usb/atm/ueagle-atm.c
-@@ -2206,8 +2206,11 @@ static int uea_boot(struct uea_softc *sc)
- 		goto err1;
- 	}
- 
--	sc->kthread = kthread_run(uea_kthread, sc, "ueagle-atm");
--	if (sc->kthread == ERR_PTR(-ENOMEM)) {
-+	/* Create worker thread, but don't start it here.  Start it after
-+	 * all usbatm generic initialization is done.
-+	 */
-+	sc->kthread = kthread_create(uea_kthread, sc, "ueagle-atm");
-+	if (IS_ERR(sc->kthread)) {
- 		uea_err(INS_TO_USBDEV(sc), "failed to create thread\n");
- 		goto err2;
- 	}
-@@ -2624,6 +2627,7 @@ static struct usbatm_driver uea_usbatm_driver = {
- static int uea_probe(struct usb_interface *intf, const struct usb_device_id *id)
- {
- 	struct usb_device *usb = interface_to_usbdev(intf);
-+	int ret;
- 
- 	uea_enters(usb);
- 	uea_info(usb, "ADSL device founded vid (%#X) pid (%#X) Rev (%#X): %s\n",
-@@ -2637,7 +2641,19 @@ static int uea_probe(struct usb_interface *intf, const struct usb_device_id *id)
- 	if (UEA_IS_PREFIRM(id))
- 		return uea_load_firmware(usb, UEA_CHIP_VERSION(id));
- 
--	return usbatm_usb_probe(intf, id, &uea_usbatm_driver);
-+	ret = usbatm_usb_probe(intf, id, &uea_usbatm_driver);
-+	if (ret == 0) {
-+		struct usbatm_data *usbatm = usb_get_intfdata(intf);
-+		struct uea_softc *sc = usbatm->driver_data;
-+
-+		/* Ensure carrier is initialized to off as early as possible */
-+		UPDATE_ATM_SIGNAL(ATM_PHY_SIG_LOST);
-+
-+		/* Only start the worker thread when all init is done */
-+		wake_up_process(sc->kthread);
-+	}
-+
-+	return ret;
- }
- 
- static void uea_disconnect(struct usb_interface *intf)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch b/recipes-kernel/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch
deleted file mode 100644
index 24557a3..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From a6b08e88ed5a716b2f27989c949cdfa0704c1dfd Mon Sep 17 00:00:00 2001
-From: Breno Leitao <leitao at linux.vnet.ibm.com>
-Date: Mon, 20 Dec 2010 09:02:37 +0000
-Subject: [PATCH 14/65] ehea: Avoid changing vlan flags
-
-This patch avoids disabling the vlan flags using ethtool.
-
-Signed-off-by: Breno Leitao <leitao at linux.vnet.ibm.com>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/ehea/ehea_ethtool.c |    7 +++++++
- 1 files changed, 7 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c
-index 1f37ee6..d6cf502 100644
---- a/drivers/net/ehea/ehea_ethtool.c
-+++ b/drivers/net/ehea/ehea_ethtool.c
-@@ -263,6 +263,13 @@ static void ehea_get_ethtool_stats(struct net_device *dev,
- 
- static int ehea_set_flags(struct net_device *dev, u32 data)
- {
-+	/* Avoid changing the VLAN flags */
-+	if ((data & (ETH_FLAG_RXVLAN | ETH_FLAG_TXVLAN)) !=
-+	    (ethtool_op_get_flags(dev) & (ETH_FLAG_RXVLAN |
-+					  ETH_FLAG_TXVLAN))){
-+		return -EINVAL;
-+	}
-+
- 	return ethtool_op_set_flags(dev, data, ETH_FLAG_LRO
- 					| ETH_FLAG_TXVLAN
- 					| ETH_FLAG_RXVLAN);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch b/recipes-kernel/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch
deleted file mode 100644
index b06d2c5..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 3b4878d988f13c50a8a6d68e9359eb28cc432a4f Mon Sep 17 00:00:00 2001
-From: stephen hemminger <shemminger at vyatta.com>
-Date: Mon, 20 Dec 2010 17:58:33 +0000
-Subject: [PATCH 15/65] ppp: allow disabling multilink protocol ID compression
-
-Linux would not connect to other router running old version Cisco IOS (12.0).
-This is most likely a bug in that version of IOS, since it is fixed
-in later versions. As a workaround this patch allows a module parameter
-to be set to disable compressing the protocol ID.
-
-See: https://bugzilla.vyatta.com/show_bug.cgi?id=3979
-
-RFC 1990 allows an implementation to formulate MP fragments as if protocol
-compression had been negotiated.  This allows us to always send compressed
-protocol IDs.  But some implementations don't accept MP fragments with
-compressed protocol IDs.  This parameter allows us to interoperate with
-them.  The default value of the configurable parameter is the same as the
-current behavior:  protocol compression is enabled.  If protocol compression
-is disabled we will not send compressed protocol IDs.
-
-This is based on an earlier patch by Bob Gilligan (using a sysctl).
-Module parameter is writable to allow for enabling even if ppp
-is already loaded for other uses.
-
-Signed-off-by: Stephen Hemminger <shemminger at vyatta.com>
-Acked-by: Eric Dumazet <eric.dumazet at gmail.com>
-Acked-by: Paul Mackerras <paulus at samba.org>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/ppp_generic.c |    9 +++++++--
- 1 files changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c
-index 3965997..89294b4 100644
---- a/drivers/net/ppp_generic.c
-+++ b/drivers/net/ppp_generic.c
-@@ -1285,6 +1285,11 @@ ppp_push(struct ppp *ppp)
- }
- 
- #ifdef CONFIG_PPP_MULTILINK
-+static bool mp_protocol_compress __read_mostly = true;
-+module_param(mp_protocol_compress, bool, S_IRUGO | S_IWUSR);
-+MODULE_PARM_DESC(mp_protocol_compress,
-+		 "compress protocol id in multilink fragments");
-+
- /*
-  * Divide a packet to be transmitted into fragments and
-  * send them out the individual links.
-@@ -1347,10 +1352,10 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb)
- 	if (nfree == 0 || nfree < navail / 2)
- 		return 0; /* can't take now, leave it in xmit_pending */
- 
--	/* Do protocol field compression (XXX this should be optional) */
-+	/* Do protocol field compression */
- 	p = skb->data;
- 	len = skb->len;
--	if (*p == 0) {
-+	if (*p == 0 && mp_protocol_compress) {
- 		++p;
- 		--len;
- 	}
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch b/recipes-kernel/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch
deleted file mode 100644
index 951a281..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 276d3ef4021021959540cdb7a5041c477432d29e Mon Sep 17 00:00:00 2001
-From: Dan Carpenter <error27 at gmail.com>
-Date: Thu, 23 Dec 2010 19:17:34 +0000
-Subject: [PATCH 16/65] skfp: testing the wrong variable in skfp_driver_init()
-
-The intent here was to test if the allocation failed but we tested
-"SharedMemSize" instead of "SharedMemAddr" by mistake.
-
-Signed-off-by: Dan Carpenter <error27 at gmail.com>
-Reviewed-by: Jiri Pirko <jpirko at redhat.com>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/skfp/skfddi.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/net/skfp/skfddi.c b/drivers/net/skfp/skfddi.c
-index 0a66fed..16c6265 100644
---- a/drivers/net/skfp/skfddi.c
-+++ b/drivers/net/skfp/skfddi.c
-@@ -412,7 +412,7 @@ static  int skfp_driver_init(struct net_device *dev)
- 		bp->SharedMemAddr = pci_alloc_consistent(&bp->pdev,
- 							 bp->SharedMemSize,
- 							 &bp->SharedMemDMA);
--		if (!bp->SharedMemSize) {
-+		if (!bp->SharedMemAddr) {
- 			printk("could not allocate mem for ");
- 			printk("hardware module: %ld byte\n",
- 			       bp->SharedMemSize);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch b/recipes-kernel/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch
deleted file mode 100644
index bb5a944..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From d03eac98a7ae4af982f3c19161f850effbfd0f57 Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:08:57 +0100
-Subject: [PATCH 17/65] ASoC: codecs: Add missing control_type initialization
-
-Some codec drivers do not initialize the control_type field in their private
-device struct, but still use it when calling snd_soc_codec_set_cache_io.
-This patch fixes the issue by properly initializing it in the drivers probe
-functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm8940.c |    1 +
- sound/soc/codecs/wm8955.c |    1 +
- sound/soc/codecs/wm8960.c |    1 +
- sound/soc/codecs/wm8971.c |    1 +
- sound/soc/codecs/wm9081.c |    1 +
- 5 files changed, 5 insertions(+), 0 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c
-index 2cb16f8..23086e2 100644
---- a/sound/soc/codecs/wm8940.c
-+++ b/sound/soc/codecs/wm8940.c
-@@ -768,6 +768,7 @@ static __devinit int wm8940_i2c_probe(struct i2c_client *i2c,
- 
- 	i2c_set_clientdata(i2c, wm8940);
- 	wm8940->control_data = i2c;
-+	wm8940->control_type = SND_SOC_I2C;
- 
- 	ret = snd_soc_register_codec(&i2c->dev,
- 			&soc_codec_dev_wm8940, &wm8940_dai, 1);
-diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
-index 9cbab8e..a2ad91d 100644
---- a/sound/soc/codecs/wm8955.c
-+++ b/sound/soc/codecs/wm8955.c
-@@ -1003,6 +1003,7 @@ static __devinit int wm8955_i2c_probe(struct i2c_client *i2c,
- 		return -ENOMEM;
- 
- 	i2c_set_clientdata(i2c, wm8955);
-+	wm8955->control_type = SND_SOC_I2C;
- 
- 	ret = snd_soc_register_codec(&i2c->dev,
- 			&soc_codec_dev_wm8955, &wm8955_dai, 1);
-diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
-index 21986c4..ff6ff2f 100644
---- a/sound/soc/codecs/wm8960.c
-+++ b/sound/soc/codecs/wm8960.c
-@@ -1013,6 +1013,7 @@ static __devinit int wm8960_i2c_probe(struct i2c_client *i2c,
- 		return -ENOMEM;
- 
- 	i2c_set_clientdata(i2c, wm8960);
-+	wm8960->control_type = SND_SOC_I2C;
- 	wm8960->control_data = i2c;
- 
- 	ret = snd_soc_register_codec(&i2c->dev,
-diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c
-index 63f6dbf..9f18db6 100644
---- a/sound/soc/codecs/wm8971.c
-+++ b/sound/soc/codecs/wm8971.c
-@@ -718,6 +718,7 @@ static __devinit int wm8971_i2c_probe(struct i2c_client *i2c,
- 	if (wm8971 == NULL)
- 		return -ENOMEM;
- 
-+	wm8971->control_type = SND_SOC_I2C;
- 	i2c_set_clientdata(i2c, wm8971);
- 
- 	ret = snd_soc_register_codec(&i2c->dev,
-diff --git a/sound/soc/codecs/wm9081.c b/sound/soc/codecs/wm9081.c
-index ecc7c37..a486670 100644
---- a/sound/soc/codecs/wm9081.c
-+++ b/sound/soc/codecs/wm9081.c
-@@ -1335,6 +1335,7 @@ static __devinit int wm9081_i2c_probe(struct i2c_client *i2c,
- 		return -ENOMEM;
- 
- 	i2c_set_clientdata(i2c, wm9081);
-+	wm9081->control_type = SND_SOC_I2C;
- 	wm9081->control_data = i2c;
- 
- 	ret = snd_soc_register_codec(&i2c->dev,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch
deleted file mode 100644
index 5c139ab..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 0ff8217bd7272d8aef1e58250d84cf5680b16b2d Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:37:56 +0100
-Subject: [PATCH 18/65] ASoC: codecs: max98088: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the max98088 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the max98088 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Cc: Peter Hsiang <Peter.Hsiang at maxim-ic.com>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/max98088.c |   10 ++++------
- 1 files changed, 4 insertions(+), 6 deletions(-)
-
-diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
-index d63e287..6447dbb 100644
---- a/sound/soc/codecs/max98088.c
-+++ b/sound/soc/codecs/max98088.c
-@@ -40,7 +40,6 @@ struct max98088_cdata {
- };
- 
- struct max98088_priv {
--       u8 reg_cache[M98088_REG_CNT];
-        enum max98088_type devtype;
-        void *control_data;
-        struct max98088_pdata *pdata;
-@@ -1588,7 +1587,7 @@ static int max98088_dai2_set_fmt(struct snd_soc_dai *codec_dai,
- 
- static void max98088_sync_cache(struct snd_soc_codec *codec)
- {
--       struct max98088_priv *max98088 = snd_soc_codec_get_drvdata(codec);
-+       u16 *reg_cache = codec->reg_cache;
-        int i;
- 
-        if (!codec->cache_sync)
-@@ -1599,14 +1598,14 @@ static void max98088_sync_cache(struct snd_soc_codec *codec)
-        /* write back cached values if they're writeable and
-         * different from the hardware default.
-         */
--       for (i = 1; i < ARRAY_SIZE(max98088->reg_cache); i++) {
-+       for (i = 1; i < codec->driver->reg_cache_size; i++) {
-                if (!max98088_access[i].writable)
-                        continue;
- 
--               if (max98088->reg_cache[i] == max98088_reg[i])
-+               if (reg_cache[i] == max98088_reg[i])
-                        continue;
- 
--               snd_soc_write(codec, i, max98088->reg_cache[i]);
-+               snd_soc_write(codec, i, reg_cache[i]);
-        }
- 
-        codec->cache_sync = 0;
-@@ -1951,7 +1950,6 @@ static int max98088_probe(struct snd_soc_codec *codec)
-        int ret = 0;
- 
-        codec->cache_sync = 1;
--       memcpy(codec->reg_cache, max98088_reg, sizeof(max98088_reg));
- 
-        ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_I2C);
-        if (ret != 0) {
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch
deleted file mode 100644
index 6ef2360..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 50e75c326e4d3278b73385a3baf78fc4660d3610 Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:37:57 +0100
-Subject: [PATCH 19/65] ASoC: codecs: wm8523: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm8523 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the wm8523 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Cc: Ian Lartey <ian at opensource.wolfsonmicro.com>
-Cc: Dimitris Papastamos <dp at opensource.wolfsonmicro.com>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm8523.c |    9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c
-index 9a433a5..deca79e 100644
---- a/sound/soc/codecs/wm8523.c
-+++ b/sound/soc/codecs/wm8523.c
-@@ -41,7 +41,6 @@ static const char *wm8523_supply_names[WM8523_NUM_SUPPLIES] = {
- /* codec private data */
- struct wm8523_priv {
- 	enum snd_soc_control_type control_type;
--	u16 reg_cache[WM8523_REGISTER_COUNT];
- 	struct regulator_bulk_data supplies[WM8523_NUM_SUPPLIES];
- 	unsigned int sysclk;
- 	unsigned int rate_constraint_list[WM8523_NUM_RATES];
-@@ -314,6 +313,7 @@ static int wm8523_set_bias_level(struct snd_soc_codec *codec,
- 				 enum snd_soc_bias_level level)
- {
- 	struct wm8523_priv *wm8523 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret, i;
- 
- 	switch (level) {
-@@ -344,7 +344,7 @@ static int wm8523_set_bias_level(struct snd_soc_codec *codec,
- 			/* Sync back default/cached values */
- 			for (i = WM8523_AIF_CTRL1;
- 			     i < WM8523_MAX_REGISTER; i++)
--				snd_soc_write(codec, i, wm8523->reg_cache[i]);
-+				snd_soc_write(codec, i, reg_cache[i]);
- 
- 
- 			msleep(100);
-@@ -414,6 +414,7 @@ static int wm8523_resume(struct snd_soc_codec *codec)
- static int wm8523_probe(struct snd_soc_codec *codec)
- {
- 	struct wm8523_priv *wm8523 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret, i;
- 
- 	codec->hw_write = (hw_write_t)i2c_master_send;
-@@ -470,8 +471,8 @@ static int wm8523_probe(struct snd_soc_codec *codec)
- 	}
- 
- 	/* Change some default settings - latch VU and enable ZC */
--	wm8523->reg_cache[WM8523_DAC_GAINR] |= WM8523_DACR_VU;
--	wm8523->reg_cache[WM8523_DAC_CTRL3] |= WM8523_ZC;
-+	reg_cache[WM8523_DAC_GAINR] |= WM8523_DACR_VU;
-+	reg_cache[WM8523_DAC_CTRL3] |= WM8523_ZC;
- 
- 	wm8523_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch
deleted file mode 100644
index f4ee49e..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From ed4250725ac617b420d25e2b4ca0958818a7cde9 Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:37:58 +0100
-Subject: [PATCH 20/65] ASoC: codecs: wm8741: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm8741 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the wm8741 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Cc: Ian Lartey <ian at opensource.wolfsonmicro.com>
-Cc: Dimitris Papastamos <dp at opensource.wolfsonmicro.com>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm8741.c |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
-index 90e31e9..aea60ef 100644
---- a/sound/soc/codecs/wm8741.c
-+++ b/sound/soc/codecs/wm8741.c
-@@ -41,7 +41,6 @@ static const char *wm8741_supply_names[WM8741_NUM_SUPPLIES] = {
- /* codec private data */
- struct wm8741_priv {
- 	enum snd_soc_control_type control_type;
--	u16 reg_cache[WM8741_REGISTER_COUNT];
- 	struct regulator_bulk_data supplies[WM8741_NUM_SUPPLIES];
- 	unsigned int sysclk;
- 	struct snd_pcm_hw_constraint_list *sysclk_constraints;
-@@ -422,6 +421,7 @@ static int wm8741_resume(struct snd_soc_codec *codec)
- static int wm8741_probe(struct snd_soc_codec *codec)
- {
- 	struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret = 0;
- 
- 	ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8741->control_type);
-@@ -437,10 +437,10 @@ static int wm8741_probe(struct snd_soc_codec *codec)
- 	}
- 
- 	/* Change some default settings - latch VU */
--	wm8741->reg_cache[WM8741_DACLLSB_ATTENUATION] |= WM8741_UPDATELL;
--	wm8741->reg_cache[WM8741_DACLMSB_ATTENUATION] |= WM8741_UPDATELM;
--	wm8741->reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERL;
--	wm8741->reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERM;
-+	reg_cache[WM8741_DACLLSB_ATTENUATION] |= WM8741_UPDATELL;
-+	reg_cache[WM8741_DACLMSB_ATTENUATION] |= WM8741_UPDATELM;
-+	reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERL;
-+	reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERM;
- 
- 	snd_soc_add_controls(codec, wm8741_snd_controls,
- 			     ARRAY_SIZE(wm8741_snd_controls));
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch
deleted file mode 100644
index 51363a4..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-From 2f369c65cdd41f8eda535cd4065edd63346a016b Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:37:59 +0100
-Subject: [PATCH 21/65] ASoC: codecs: wm8904: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm8904 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the wm8904 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Cc: Ian Lartey <ian at opensource.wolfsonmicro.com>
-Cc: Dimitris Papastamos <dp at opensource.wolfsonmicro.com>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm8904.c |   37 ++++++++++++++++++-------------------
- 1 files changed, 18 insertions(+), 19 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
-index 9001cc4..1ec12ef 100644
---- a/sound/soc/codecs/wm8904.c
-+++ b/sound/soc/codecs/wm8904.c
-@@ -50,8 +50,6 @@ static const char *wm8904_supply_names[WM8904_NUM_SUPPLIES] = {
- /* codec private data */
- struct wm8904_priv {
- 
--	u16 reg_cache[WM8904_MAX_REGISTER + 1];
--
- 	enum wm8904_type devtype;
- 	void *control_data;
- 
-@@ -2094,7 +2092,7 @@ static int wm8904_digital_mute(struct snd_soc_dai *codec_dai, int mute)
- 
- static void wm8904_sync_cache(struct snd_soc_codec *codec)
- {
--	struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int i;
- 
- 	if (!codec->cache_sync)
-@@ -2105,14 +2103,14 @@ static void wm8904_sync_cache(struct snd_soc_codec *codec)
- 	/* Sync back cached values if they're different from the
- 	 * hardware default.
- 	 */
--	for (i = 1; i < ARRAY_SIZE(wm8904->reg_cache); i++) {
-+	for (i = 1; i < codec->driver->reg_cache_size; i++) {
- 		if (!wm8904_access[i].writable)
- 			continue;
- 
--		if (wm8904->reg_cache[i] == wm8904_reg[i])
-+		if (reg_cache[i] == wm8904_reg[i])
- 			continue;
- 
--		snd_soc_write(codec, i, wm8904->reg_cache[i]);
-+		snd_soc_write(codec, i, reg_cache[i]);
- 	}
- 
- 	codec->cache_sync = 0;
-@@ -2371,6 +2369,7 @@ static int wm8904_probe(struct snd_soc_codec *codec)
- {
- 	struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
- 	struct wm8904_pdata *pdata = wm8904->pdata;
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret, i;
- 
- 	codec->cache_sync = 1;
-@@ -2437,19 +2436,19 @@ static int wm8904_probe(struct snd_soc_codec *codec)
- 	}
- 
- 	/* Change some default settings - latch VU and enable ZC */
--	wm8904->reg_cache[WM8904_ADC_DIGITAL_VOLUME_LEFT] |= WM8904_ADC_VU;
--	wm8904->reg_cache[WM8904_ADC_DIGITAL_VOLUME_RIGHT] |= WM8904_ADC_VU;
--	wm8904->reg_cache[WM8904_DAC_DIGITAL_VOLUME_LEFT] |= WM8904_DAC_VU;
--	wm8904->reg_cache[WM8904_DAC_DIGITAL_VOLUME_RIGHT] |= WM8904_DAC_VU;
--	wm8904->reg_cache[WM8904_ANALOGUE_OUT1_LEFT] |= WM8904_HPOUT_VU |
-+	reg_cache[WM8904_ADC_DIGITAL_VOLUME_LEFT] |= WM8904_ADC_VU;
-+	reg_cache[WM8904_ADC_DIGITAL_VOLUME_RIGHT] |= WM8904_ADC_VU;
-+	reg_cache[WM8904_DAC_DIGITAL_VOLUME_LEFT] |= WM8904_DAC_VU;
-+	reg_cache[WM8904_DAC_DIGITAL_VOLUME_RIGHT] |= WM8904_DAC_VU;
-+	reg_cache[WM8904_ANALOGUE_OUT1_LEFT] |= WM8904_HPOUT_VU |
- 		WM8904_HPOUTLZC;
--	wm8904->reg_cache[WM8904_ANALOGUE_OUT1_RIGHT] |= WM8904_HPOUT_VU |
-+	reg_cache[WM8904_ANALOGUE_OUT1_RIGHT] |= WM8904_HPOUT_VU |
- 		WM8904_HPOUTRZC;
--	wm8904->reg_cache[WM8904_ANALOGUE_OUT2_LEFT] |= WM8904_LINEOUT_VU |
-+	reg_cache[WM8904_ANALOGUE_OUT2_LEFT] |= WM8904_LINEOUT_VU |
- 		WM8904_LINEOUTLZC;
--	wm8904->reg_cache[WM8904_ANALOGUE_OUT2_RIGHT] |= WM8904_LINEOUT_VU |
-+	reg_cache[WM8904_ANALOGUE_OUT2_RIGHT] |= WM8904_LINEOUT_VU |
- 		WM8904_LINEOUTRZC;
--	wm8904->reg_cache[WM8904_CLOCK_RATES_0] &= ~WM8904_SR_MODE;
-+	reg_cache[WM8904_CLOCK_RATES_0] &= ~WM8904_SR_MODE;
- 
- 	/* Apply configuration from the platform data. */
- 	if (wm8904->pdata) {
-@@ -2457,23 +2456,23 @@ static int wm8904_probe(struct snd_soc_codec *codec)
- 			if (!pdata->gpio_cfg[i])
- 				continue;
- 
--			wm8904->reg_cache[WM8904_GPIO_CONTROL_1 + i]
-+			reg_cache[WM8904_GPIO_CONTROL_1 + i]
- 				= pdata->gpio_cfg[i] & 0xffff;
- 		}
- 
- 		/* Zero is the default value for these anyway */
- 		for (i = 0; i < WM8904_MIC_REGS; i++)
--			wm8904->reg_cache[WM8904_MIC_BIAS_CONTROL_0 + i]
-+			reg_cache[WM8904_MIC_BIAS_CONTROL_0 + i]
- 				= pdata->mic_cfg[i];
- 	}
- 
- 	/* Set Class W by default - this will be managed by the Class
- 	 * G widget at runtime where bypass paths are available.
- 	 */
--	wm8904->reg_cache[WM8904_CLASS_W_0] |= WM8904_CP_DYN_PWR;
-+	reg_cache[WM8904_CLASS_W_0] |= WM8904_CP_DYN_PWR;
- 
- 	/* Use normal bias source */
--	wm8904->reg_cache[WM8904_BIAS_CONTROL_0] &= ~WM8904_POBCTRL;
-+	reg_cache[WM8904_BIAS_CONTROL_0] &= ~WM8904_POBCTRL;
- 
- 	wm8904_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch
deleted file mode 100644
index 420b4cc..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 8febc5cbe3b8d4a4a056df364e4a82958a6eb1df Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:38:00 +0100
-Subject: [PATCH 22/65] ASoC: codecs: wm8955: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm8955 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the wm8955 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm8955.c |   30 +++++++++++++++---------------
- 1 files changed, 15 insertions(+), 15 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
-index a2ad91d..2ac35b0 100644
---- a/sound/soc/codecs/wm8955.c
-+++ b/sound/soc/codecs/wm8955.c
-@@ -42,8 +42,6 @@ static const char *wm8955_supply_names[WM8955_NUM_SUPPLIES] = {
- struct wm8955_priv {
- 	enum snd_soc_control_type control_type;
- 
--	u16 reg_cache[WM8955_MAX_REGISTER + 1];
--
- 	unsigned int mclk_rate;
- 
- 	int deemph;
-@@ -768,6 +766,7 @@ static int wm8955_set_bias_level(struct snd_soc_codec *codec,
- 				 enum snd_soc_bias_level level)
- {
- 	struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret, i;
- 
- 	switch (level) {
-@@ -800,14 +799,14 @@ static int wm8955_set_bias_level(struct snd_soc_codec *codec,
- 			/* Sync back cached values if they're
- 			 * different from the hardware default.
- 			 */
--			for (i = 0; i < ARRAY_SIZE(wm8955->reg_cache); i++) {
-+			for (i = 0; i < codec->driver->reg_cache_size; i++) {
- 				if (i == WM8955_RESET)
- 					continue;
- 
--				if (wm8955->reg_cache[i] == wm8955_reg[i])
-+				if (reg_cache[i] == wm8955_reg[i])
- 					continue;
- 
--				snd_soc_write(codec, i, wm8955->reg_cache[i]);
-+				snd_soc_write(codec, i, reg_cache[i]);
- 			}
- 
- 			/* Enable VREF and VMID */
-@@ -902,6 +901,7 @@ static int wm8955_probe(struct snd_soc_codec *codec)
- {
- 	struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
- 	struct wm8955_pdata *pdata = dev_get_platdata(codec->dev);
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret, i;
- 
- 	ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8955->control_type);
-@@ -934,25 +934,25 @@ static int wm8955_probe(struct snd_soc_codec *codec)
- 	}
- 
- 	/* Change some default settings - latch VU and enable ZC */
--	wm8955->reg_cache[WM8955_LEFT_DAC_VOLUME] |= WM8955_LDVU;
--	wm8955->reg_cache[WM8955_RIGHT_DAC_VOLUME] |= WM8955_RDVU;
--	wm8955->reg_cache[WM8955_LOUT1_VOLUME] |= WM8955_LO1VU | WM8955_LO1ZC;
--	wm8955->reg_cache[WM8955_ROUT1_VOLUME] |= WM8955_RO1VU | WM8955_RO1ZC;
--	wm8955->reg_cache[WM8955_LOUT2_VOLUME] |= WM8955_LO2VU | WM8955_LO2ZC;
--	wm8955->reg_cache[WM8955_ROUT2_VOLUME] |= WM8955_RO2VU | WM8955_RO2ZC;
--	wm8955->reg_cache[WM8955_MONOOUT_VOLUME] |= WM8955_MOZC;
-+	reg_cache[WM8955_LEFT_DAC_VOLUME] |= WM8955_LDVU;
-+	reg_cache[WM8955_RIGHT_DAC_VOLUME] |= WM8955_RDVU;
-+	reg_cache[WM8955_LOUT1_VOLUME] |= WM8955_LO1VU | WM8955_LO1ZC;
-+	reg_cache[WM8955_ROUT1_VOLUME] |= WM8955_RO1VU | WM8955_RO1ZC;
-+	reg_cache[WM8955_LOUT2_VOLUME] |= WM8955_LO2VU | WM8955_LO2ZC;
-+	reg_cache[WM8955_ROUT2_VOLUME] |= WM8955_RO2VU | WM8955_RO2ZC;
-+	reg_cache[WM8955_MONOOUT_VOLUME] |= WM8955_MOZC;
- 
- 	/* Also enable adaptive bass boost by default */
--	wm8955->reg_cache[WM8955_BASS_CONTROL] |= WM8955_BB;
-+	reg_cache[WM8955_BASS_CONTROL] |= WM8955_BB;
- 
- 	/* Set platform data values */
- 	if (pdata) {
- 		if (pdata->out2_speaker)
--			wm8955->reg_cache[WM8955_ADDITIONAL_CONTROL_2]
-+			reg_cache[WM8955_ADDITIONAL_CONTROL_2]
- 				|= WM8955_ROUT2INV;
- 
- 		if (pdata->monoin_diff)
--			wm8955->reg_cache[WM8955_MONO_OUT_MIX_1]
-+			reg_cache[WM8955_MONO_OUT_MIX_1]
- 				|= WM8955_DMEN;
- 	}
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch
deleted file mode 100644
index 3e7aa10..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 9760063610bb4890c0f88c1dd839ec1531706f33 Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:38:01 +0100
-Subject: [PATCH 23/65] ASoC: codecs: wm8962: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm8962 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the wm8962 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm8962.c |   45 ++++++++++++++++++++-------------------------
- 1 files changed, 20 insertions(+), 25 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
-index 1304ca9..7c421cc 100644
---- a/sound/soc/codecs/wm8962.c
-+++ b/sound/soc/codecs/wm8962.c
-@@ -52,8 +52,6 @@ static const char *wm8962_supply_names[WM8962_NUM_SUPPLIES] = {
- struct wm8962_priv {
- 	struct snd_soc_codec *codec;
- 
--	u16 reg_cache[WM8962_MAX_REGISTER + 1];
--
- 	int sysclk;
- 	int sysclk_rate;
- 
-@@ -1991,8 +1989,7 @@ static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
- 			    struct snd_ctl_elem_value *ucontrol)
- {
- 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
--	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
--	u16 *reg_cache = wm8962->reg_cache;
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret;
- 
- 	/* Apply the update (if any) */
-@@ -2020,8 +2017,7 @@ static int wm8962_put_spk_sw(struct snd_kcontrol *kcontrol,
- 			    struct snd_ctl_elem_value *ucontrol)
- {
- 	struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
--	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
--	u16 *reg_cache = wm8962->reg_cache;
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret;
- 
- 	/* Apply the update (if any) */
-@@ -2329,8 +2325,7 @@ static int out_pga_event(struct snd_soc_dapm_widget *w,
- 			 struct snd_kcontrol *kcontrol, int event)
- {
- 	struct snd_soc_codec *codec = w->codec;
--	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
--	u16 *reg_cache = wm8962->reg_cache;
-+	u16 *reg_cache = codec->reg_cache;
- 	int reg;
- 
- 	switch (w->shift) {
-@@ -2719,7 +2714,7 @@ static int wm8962_add_widgets(struct snd_soc_codec *codec)
- 
- static void wm8962_sync_cache(struct snd_soc_codec *codec)
- {
--	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int i;
- 
- 	if (!codec->cache_sync)
-@@ -2732,13 +2727,13 @@ static void wm8962_sync_cache(struct snd_soc_codec *codec)
- 	/* Sync back cached values if they're different from the
- 	 * hardware default.
- 	 */
--	for (i = 1; i < ARRAY_SIZE(wm8962->reg_cache); i++) {
-+	for (i = 1; i < codec->driver->reg_cache_size; i++) {
- 		if (i == WM8962_SOFTWARE_RESET)
- 			continue;
--		if (wm8962->reg_cache[i] == wm8962_reg[i])
-+		if (reg_cache[i] == wm8962_reg[i])
- 			continue;
- 
--		snd_soc_write(codec, i, wm8962->reg_cache[i]);
-+		snd_soc_write(codec, i, reg_cache[i]);
- 	}
- 
- 	codec->cache_sync = 0;
-@@ -3406,12 +3401,11 @@ EXPORT_SYMBOL_GPL(wm8962_mic_detect);
- #ifdef CONFIG_PM
- static int wm8962_resume(struct snd_soc_codec *codec)
- {
--	struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
- 	u16 *reg_cache = codec->reg_cache;
- 	int i;
- 
- 	/* Restore the registers */
--	for (i = 1; i < ARRAY_SIZE(wm8962->reg_cache); i++) {
-+	for (i = 1; i < codec->driver->reg_cache_size; i++) {
- 		switch (i) {
- 		case WM8962_SOFTWARE_RESET:
- 			continue;
-@@ -3705,6 +3699,7 @@ static int wm8962_probe(struct snd_soc_codec *codec)
- 	struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
- 	struct i2c_client *i2c = container_of(codec->dev, struct i2c_client,
- 					      dev);
-+	u16 *reg_cache = codec->reg_cache;
- 	int i, trigger, irq_pol;
- 
- 	wm8962->codec = codec;
-@@ -3804,7 +3799,7 @@ static int wm8962_probe(struct snd_soc_codec *codec)
- 
- 		/* Put the speakers into mono mode? */
- 		if (pdata->spk_mono)
--			wm8962->reg_cache[WM8962_CLASS_D_CONTROL_2]
-+			reg_cache[WM8962_CLASS_D_CONTROL_2]
- 				|= WM8962_SPK_MONO;
- 
- 		/* Micbias setup, detection enable and detection
-@@ -3819,16 +3814,16 @@ static int wm8962_probe(struct snd_soc_codec *codec)
- 	}
- 
- 	/* Latch volume update bits */
--	wm8962->reg_cache[WM8962_LEFT_INPUT_VOLUME] |= WM8962_IN_VU;
--	wm8962->reg_cache[WM8962_RIGHT_INPUT_VOLUME] |= WM8962_IN_VU;
--	wm8962->reg_cache[WM8962_LEFT_ADC_VOLUME] |= WM8962_ADC_VU;
--	wm8962->reg_cache[WM8962_RIGHT_ADC_VOLUME] |= WM8962_ADC_VU;	
--	wm8962->reg_cache[WM8962_LEFT_DAC_VOLUME] |= WM8962_DAC_VU;
--	wm8962->reg_cache[WM8962_RIGHT_DAC_VOLUME] |= WM8962_DAC_VU;
--	wm8962->reg_cache[WM8962_SPKOUTL_VOLUME] |= WM8962_SPKOUT_VU;
--	wm8962->reg_cache[WM8962_SPKOUTR_VOLUME] |= WM8962_SPKOUT_VU;
--	wm8962->reg_cache[WM8962_HPOUTL_VOLUME] |= WM8962_HPOUT_VU;
--	wm8962->reg_cache[WM8962_HPOUTR_VOLUME] |= WM8962_HPOUT_VU;
-+	reg_cache[WM8962_LEFT_INPUT_VOLUME] |= WM8962_IN_VU;
-+	reg_cache[WM8962_RIGHT_INPUT_VOLUME] |= WM8962_IN_VU;
-+	reg_cache[WM8962_LEFT_ADC_VOLUME] |= WM8962_ADC_VU;
-+	reg_cache[WM8962_RIGHT_ADC_VOLUME] |= WM8962_ADC_VU;
-+	reg_cache[WM8962_LEFT_DAC_VOLUME] |= WM8962_DAC_VU;
-+	reg_cache[WM8962_RIGHT_DAC_VOLUME] |= WM8962_DAC_VU;
-+	reg_cache[WM8962_SPKOUTL_VOLUME] |= WM8962_SPKOUT_VU;
-+	reg_cache[WM8962_SPKOUTR_VOLUME] |= WM8962_SPKOUT_VU;
-+	reg_cache[WM8962_HPOUTL_VOLUME] |= WM8962_HPOUT_VU;
-+	reg_cache[WM8962_HPOUTR_VOLUME] |= WM8962_HPOUT_VU;
- 
- 	wm8962_add_widgets(codec);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch
deleted file mode 100644
index ad5aedd..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 2f2f23c75c1c055ca6274b04bd2dc71d0a6e8c62 Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:38:02 +0100
-Subject: [PATCH 24/65] ASoC: codecs: wm9090: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm9090 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Thus we end up with two from each other incoherent caches, which can lead to
-undefined behaviour.
-This patch fixes the issue by changing the wm9090 driver to use the
-generic register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
-Cc: stable at kernel.org (for 2.6.37 only)
----
- sound/soc/codecs/wm9090.c |   18 +++++++++---------
- 1 files changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/sound/soc/codecs/wm9090.c b/sound/soc/codecs/wm9090.c
-index 99c046b..6e5f64f 100644
---- a/sound/soc/codecs/wm9090.c
-+++ b/sound/soc/codecs/wm9090.c
-@@ -141,7 +141,6 @@ static const u16 wm9090_reg_defaults[] = {
- /* This struct is used to save the context */
- struct wm9090_priv {
- 	struct mutex mutex;
--	u16 reg_cache[WM9090_MAX_REGISTER + 1];
- 	struct wm9090_platform_data pdata;
- 	void *control_data;
- };
-@@ -552,6 +551,7 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec,
- static int wm9090_probe(struct snd_soc_codec *codec)
- {
- 	struct wm9090_priv *wm9090 = snd_soc_codec_get_drvdata(codec);
-+	u16 *reg_cache = codec->reg_cache;
- 	int ret;
- 
- 	codec->control_data = wm9090->control_data;
-@@ -576,22 +576,22 @@ static int wm9090_probe(struct snd_soc_codec *codec)
- 	/* Configure some defaults; they will be written out when we
- 	 * bring the bias up.
- 	 */
--	wm9090->reg_cache[WM9090_IN1_LINE_INPUT_A_VOLUME] |= WM9090_IN1_VU
-+	reg_cache[WM9090_IN1_LINE_INPUT_A_VOLUME] |= WM9090_IN1_VU
- 		| WM9090_IN1A_ZC;
--	wm9090->reg_cache[WM9090_IN1_LINE_INPUT_B_VOLUME] |= WM9090_IN1_VU
-+	reg_cache[WM9090_IN1_LINE_INPUT_B_VOLUME] |= WM9090_IN1_VU
- 		| WM9090_IN1B_ZC;
--	wm9090->reg_cache[WM9090_IN2_LINE_INPUT_A_VOLUME] |= WM9090_IN2_VU
-+	reg_cache[WM9090_IN2_LINE_INPUT_A_VOLUME] |= WM9090_IN2_VU
- 		| WM9090_IN2A_ZC;
--	wm9090->reg_cache[WM9090_IN2_LINE_INPUT_B_VOLUME] |= WM9090_IN2_VU
-+	reg_cache[WM9090_IN2_LINE_INPUT_B_VOLUME] |= WM9090_IN2_VU
- 		| WM9090_IN2B_ZC;
--	wm9090->reg_cache[WM9090_SPEAKER_VOLUME_LEFT] |=
-+	reg_cache[WM9090_SPEAKER_VOLUME_LEFT] |=
- 		WM9090_SPKOUT_VU | WM9090_SPKOUTL_ZC;
--	wm9090->reg_cache[WM9090_LEFT_OUTPUT_VOLUME] |=
-+	reg_cache[WM9090_LEFT_OUTPUT_VOLUME] |=
- 		WM9090_HPOUT1_VU | WM9090_HPOUT1L_ZC;
--	wm9090->reg_cache[WM9090_RIGHT_OUTPUT_VOLUME] |=
-+	reg_cache[WM9090_RIGHT_OUTPUT_VOLUME] |=
- 		WM9090_HPOUT1_VU | WM9090_HPOUT1R_ZC;
- 
--	wm9090->reg_cache[WM9090_CLOCKING_1] |= WM9090_TOCLK_ENA;
-+	reg_cache[WM9090_CLOCKING_1] |= WM9090_TOCLK_ENA;
- 
- 	wm9090_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch b/recipes-kernel/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch
deleted file mode 100644
index 574c76e..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch
+++ /dev/null
@@ -1,514 +0,0 @@
-From 0e07d2db08fa60b3e1bbc9837775feaf1cb8a381 Mon Sep 17 00:00:00 2001
-From: Lars-Peter Clausen <lars at metafoo.de>
-Date: Tue, 28 Dec 2010 21:38:03 +0100
-Subject: [PATCH 25/65] ASoC: codecs: wm8753: Fix register cache incoherency
-
-The multi-component patch(commit f0fba2ad1) moved the allocation of the
-register cache from the driver to the ASoC core. Most drivers where adjusted to
-this, but the wm8753 driver still uses its own register cache for its
-private functions, while functions from the ASoC core use the generic cache.
-Furthermore the generic cache uses zero-based numbering while the wm8753 cache
-uses one-based numbering.
-Thus we end up with two from each other incoherent caches, which leads to undefined
-behaviour and crashes.
-This patch fixes the issue by changing the wm8753 driver to use the generic
-register cache in its private functions.
-
-Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
-Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
----
- sound/soc/codecs/wm8753.c |  226 +++++++++++++++++----------------------------
- 1 files changed, 83 insertions(+), 143 deletions(-)
-
-diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
-index 8f679a1..87caae5 100644
---- a/sound/soc/codecs/wm8753.c
-+++ b/sound/soc/codecs/wm8753.c
-@@ -65,22 +65,22 @@ static void wm8753_set_dai_mode(struct snd_soc_codec *codec,
-  * are using 2 wire for device control, so we cache them instead.
-  */
- static const u16 wm8753_reg[] = {
--	0x0008, 0x0000, 0x000a, 0x000a,
--	0x0033, 0x0000, 0x0007, 0x00ff,
--	0x00ff, 0x000f, 0x000f, 0x007b,
--	0x0000, 0x0032, 0x0000, 0x00c3,
--	0x00c3, 0x00c0, 0x0000, 0x0000,
-+	0x0000, 0x0008, 0x0000, 0x000a,
-+	0x000a, 0x0033, 0x0000, 0x0007,
-+	0x00ff, 0x00ff, 0x000f, 0x000f,
-+	0x007b, 0x0000, 0x0032, 0x0000,
-+	0x00c3, 0x00c3, 0x00c0, 0x0000,
- 	0x0000, 0x0000, 0x0000, 0x0000,
- 	0x0000, 0x0000, 0x0000, 0x0000,
--	0x0000, 0x0000, 0x0000, 0x0055,
--	0x0005, 0x0050, 0x0055, 0x0050,
--	0x0055, 0x0050, 0x0055, 0x0079,
--	0x0079, 0x0079, 0x0079, 0x0079,
- 	0x0000, 0x0000, 0x0000, 0x0000,
--	0x0097, 0x0097, 0x0000, 0x0004,
--	0x0000, 0x0083, 0x0024, 0x01ba,
--	0x0000, 0x0083, 0x0024, 0x01ba,
--	0x0000, 0x0000, 0x0000
-+	0x0055, 0x0005, 0x0050, 0x0055,
-+	0x0050, 0x0055, 0x0050, 0x0055,
-+	0x0079, 0x0079, 0x0079, 0x0079,
-+	0x0079, 0x0000, 0x0000, 0x0000,
-+	0x0000, 0x0097, 0x0097, 0x0000,
-+	0x0004, 0x0000, 0x0083, 0x0024,
-+	0x01ba, 0x0000, 0x0083, 0x0024,
-+	0x01ba, 0x0000, 0x0000, 0x0000
- };
- 
- /* codec private data */
-@@ -88,57 +88,10 @@ struct wm8753_priv {
- 	enum snd_soc_control_type control_type;
- 	unsigned int sysclk;
- 	unsigned int pcmclk;
--	u16 reg_cache[ARRAY_SIZE(wm8753_reg)];
- 	int dai_func;
- };
- 
--/*
-- * read wm8753 register cache
-- */
--static inline unsigned int wm8753_read_reg_cache(struct snd_soc_codec *codec,
--	unsigned int reg)
--{
--	u16 *cache = codec->reg_cache;
--	if (reg < 1 || reg >= (ARRAY_SIZE(wm8753_reg) + 1))
--		return -1;
--	return cache[reg - 1];
--}
--
--/*
-- * write wm8753 register cache
-- */
--static inline void wm8753_write_reg_cache(struct snd_soc_codec *codec,
--	unsigned int reg, unsigned int value)
--{
--	u16 *cache = codec->reg_cache;
--	if (reg < 1 || reg >= (ARRAY_SIZE(wm8753_reg) + 1))
--		return;
--	cache[reg - 1] = value;
--}
--
--/*
-- * write to the WM8753 register space
-- */
--static int wm8753_write(struct snd_soc_codec *codec, unsigned int reg,
--	unsigned int value)
--{
--	u8 data[2];
--
--	/* data is
--	 *   D15..D9 WM8753 register offset
--	 *   D8...D0 register data
--	 */
--	data[0] = (reg << 1) | ((value >> 8) & 0x0001);
--	data[1] = value & 0x00ff;
--
--	wm8753_write_reg_cache(codec, reg, value);
--	if (codec->hw_write(codec->control_data, data, 2) == 2)
--		return 0;
--	else
--		return -EIO;
--}
--
--#define wm8753_reset(c) wm8753_write(c, WM8753_RESET, 0)
-+#define wm8753_reset(c) snd_soc_write(c, WM8753_RESET, 0)
- 
- /*
-  * WM8753 Controls
-@@ -218,7 +171,7 @@ static int wm8753_get_dai(struct snd_kcontrol *kcontrol,
- 	struct snd_ctl_elem_value *ucontrol)
- {
- 	struct snd_soc_codec *codec =  snd_kcontrol_chip(kcontrol);
--	int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL);
-+	int mode = snd_soc_read(codec, WM8753_IOCTL);
- 
- 	ucontrol->value.integer.value[0] = (mode & 0xc) >> 2;
- 	return 0;
-@@ -228,7 +181,7 @@ static int wm8753_set_dai(struct snd_kcontrol *kcontrol,
- 	struct snd_ctl_elem_value *ucontrol)
- {
- 	struct snd_soc_codec *codec =  snd_kcontrol_chip(kcontrol);
--	int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL);
-+	int mode = snd_soc_read(codec, WM8753_IOCTL);
- 	struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
- 
- 	if (((mode & 0xc) >> 2) == ucontrol->value.integer.value[0])
-@@ -738,17 +691,17 @@ static int wm8753_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
- 	if (pll_id == WM8753_PLL1) {
- 		offset = 0;
- 		enable = 0x10;
--		reg = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xffef;
-+		reg = snd_soc_read(codec, WM8753_CLOCK) & 0xffef;
- 	} else {
- 		offset = 4;
- 		enable = 0x8;
--		reg = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfff7;
-+		reg = snd_soc_read(codec, WM8753_CLOCK) & 0xfff7;
- 	}
- 
- 	if (!freq_in || !freq_out) {
- 		/* disable PLL  */
--		wm8753_write(codec, WM8753_PLL1CTL1 + offset, 0x0026);
--		wm8753_write(codec, WM8753_CLOCK, reg);
-+		snd_soc_write(codec, WM8753_PLL1CTL1 + offset, 0x0026);
-+		snd_soc_write(codec, WM8753_CLOCK, reg);
- 		return 0;
- 	} else {
- 		u16 value = 0;
-@@ -759,20 +712,20 @@ static int wm8753_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
- 		/* set up N and K PLL divisor ratios */
- 		/* bits 8:5 = PLL_N, bits 3:0 = PLL_K[21:18] */
- 		value = (pll_div.n << 5) + ((pll_div.k & 0x3c0000) >> 18);
--		wm8753_write(codec, WM8753_PLL1CTL2 + offset, value);
-+		snd_soc_write(codec, WM8753_PLL1CTL2 + offset, value);
- 
- 		/* bits 8:0 = PLL_K[17:9] */
- 		value = (pll_div.k & 0x03fe00) >> 9;
--		wm8753_write(codec, WM8753_PLL1CTL3 + offset, value);
-+		snd_soc_write(codec, WM8753_PLL1CTL3 + offset, value);
- 
- 		/* bits 8:0 = PLL_K[8:0] */
- 		value = pll_div.k & 0x0001ff;
--		wm8753_write(codec, WM8753_PLL1CTL4 + offset, value);
-+		snd_soc_write(codec, WM8753_PLL1CTL4 + offset, value);
- 
- 		/* set PLL as input and enable */
--		wm8753_write(codec, WM8753_PLL1CTL1 + offset, 0x0027 |
-+		snd_soc_write(codec, WM8753_PLL1CTL1 + offset, 0x0027 |
- 			(pll_div.div2 << 3));
--		wm8753_write(codec, WM8753_CLOCK, reg | enable);
-+		snd_soc_write(codec, WM8753_CLOCK, reg | enable);
- 	}
- 	return 0;
- }
-@@ -879,7 +832,7 @@ static int wm8753_vdac_adc_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 		unsigned int fmt)
- {
- 	struct snd_soc_codec *codec = codec_dai->codec;
--	u16 voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x01ec;
-+	u16 voice = snd_soc_read(codec, WM8753_PCM) & 0x01ec;
- 
- 	/* interface format */
- 	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-@@ -901,7 +854,7 @@ static int wm8753_vdac_adc_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 		return -EINVAL;
- 	}
- 
--	wm8753_write(codec, WM8753_PCM, voice);
-+	snd_soc_write(codec, WM8753_PCM, voice);
- 	return 0;
- }
- 
-@@ -922,8 +875,8 @@ static int wm8753_pcm_hw_params(struct snd_pcm_substream *substream,
- 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
- 	struct snd_soc_codec *codec = rtd->codec;
- 	struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
--	u16 voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x01f3;
--	u16 srate = wm8753_read_reg_cache(codec, WM8753_SRATE1) & 0x017f;
-+	u16 voice = snd_soc_read(codec, WM8753_PCM) & 0x01f3;
-+	u16 srate = snd_soc_read(codec, WM8753_SRATE1) & 0x017f;
- 
- 	/* bit size */
- 	switch (params_format(params)) {
-@@ -943,9 +896,9 @@ static int wm8753_pcm_hw_params(struct snd_pcm_substream *substream,
- 	/* sample rate */
- 	if (params_rate(params) * 384 == wm8753->pcmclk)
- 		srate |= 0x80;
--	wm8753_write(codec, WM8753_SRATE1, srate);
-+	snd_soc_write(codec, WM8753_SRATE1, srate);
- 
--	wm8753_write(codec, WM8753_PCM, voice);
-+	snd_soc_write(codec, WM8753_PCM, voice);
- 	return 0;
- }
- 
-@@ -958,8 +911,8 @@ static int wm8753_pcm_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 	struct snd_soc_codec *codec = codec_dai->codec;
- 	u16 voice, ioctl;
- 
--	voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x011f;
--	ioctl = wm8753_read_reg_cache(codec, WM8753_IOCTL) & 0x015d;
-+	voice = snd_soc_read(codec, WM8753_PCM) & 0x011f;
-+	ioctl = snd_soc_read(codec, WM8753_IOCTL) & 0x015d;
- 
- 	/* set master/slave audio interface */
- 	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-@@ -1013,8 +966,8 @@ static int wm8753_pcm_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 		return -EINVAL;
- 	}
- 
--	wm8753_write(codec, WM8753_PCM, voice);
--	wm8753_write(codec, WM8753_IOCTL, ioctl);
-+	snd_soc_write(codec, WM8753_PCM, voice);
-+	snd_soc_write(codec, WM8753_IOCTL, ioctl);
- 	return 0;
- }
- 
-@@ -1026,16 +979,16 @@ static int wm8753_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
- 
- 	switch (div_id) {
- 	case WM8753_PCMDIV:
--		reg = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0x003f;
--		wm8753_write(codec, WM8753_CLOCK, reg | div);
-+		reg = snd_soc_read(codec, WM8753_CLOCK) & 0x003f;
-+		snd_soc_write(codec, WM8753_CLOCK, reg | div);
- 		break;
- 	case WM8753_BCLKDIV:
--		reg = wm8753_read_reg_cache(codec, WM8753_SRATE2) & 0x01c7;
--		wm8753_write(codec, WM8753_SRATE2, reg | div);
-+		reg = snd_soc_read(codec, WM8753_SRATE2) & 0x01c7;
-+		snd_soc_write(codec, WM8753_SRATE2, reg | div);
- 		break;
- 	case WM8753_VXCLKDIV:
--		reg = wm8753_read_reg_cache(codec, WM8753_SRATE2) & 0x003f;
--		wm8753_write(codec, WM8753_SRATE2, reg | div);
-+		reg = snd_soc_read(codec, WM8753_SRATE2) & 0x003f;
-+		snd_soc_write(codec, WM8753_SRATE2, reg | div);
- 		break;
- 	default:
- 		return -EINVAL;
-@@ -1050,7 +1003,7 @@ static int wm8753_hdac_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 		unsigned int fmt)
- {
- 	struct snd_soc_codec *codec = codec_dai->codec;
--	u16 hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x01e0;
-+	u16 hifi = snd_soc_read(codec, WM8753_HIFI) & 0x01e0;
- 
- 	/* interface format */
- 	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-@@ -1072,7 +1025,7 @@ static int wm8753_hdac_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 		return -EINVAL;
- 	}
- 
--	wm8753_write(codec, WM8753_HIFI, hifi);
-+	snd_soc_write(codec, WM8753_HIFI, hifi);
- 	return 0;
- }
- 
-@@ -1085,8 +1038,8 @@ static int wm8753_i2s_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 	struct snd_soc_codec *codec = codec_dai->codec;
- 	u16 ioctl, hifi;
- 
--	hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x011f;
--	ioctl = wm8753_read_reg_cache(codec, WM8753_IOCTL) & 0x00ae;
-+	hifi = snd_soc_read(codec, WM8753_HIFI) & 0x011f;
-+	ioctl = snd_soc_read(codec, WM8753_IOCTL) & 0x00ae;
- 
- 	/* set master/slave audio interface */
- 	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
-@@ -1140,8 +1093,8 @@ static int wm8753_i2s_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 		return -EINVAL;
- 	}
- 
--	wm8753_write(codec, WM8753_HIFI, hifi);
--	wm8753_write(codec, WM8753_IOCTL, ioctl);
-+	snd_soc_write(codec, WM8753_HIFI, hifi);
-+	snd_soc_write(codec, WM8753_IOCTL, ioctl);
- 	return 0;
- }
- 
-@@ -1162,8 +1115,8 @@ static int wm8753_i2s_hw_params(struct snd_pcm_substream *substream,
- 	struct snd_soc_pcm_runtime *rtd = substream->private_data;
- 	struct snd_soc_codec *codec = rtd->codec;
- 	struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
--	u16 srate = wm8753_read_reg_cache(codec, WM8753_SRATE1) & 0x01c0;
--	u16 hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x01f3;
-+	u16 srate = snd_soc_read(codec, WM8753_SRATE1) & 0x01c0;
-+	u16 hifi = snd_soc_read(codec, WM8753_HIFI) & 0x01f3;
- 	int coeff;
- 
- 	/* is digital filter coefficient valid ? */
-@@ -1172,7 +1125,7 @@ static int wm8753_i2s_hw_params(struct snd_pcm_substream *substream,
- 		printk(KERN_ERR "wm8753 invalid MCLK or rate\n");
- 		return coeff;
- 	}
--	wm8753_write(codec, WM8753_SRATE1, srate | (coeff_div[coeff].sr << 1) |
-+	snd_soc_write(codec, WM8753_SRATE1, srate | (coeff_div[coeff].sr << 1) |
- 		coeff_div[coeff].usb);
- 
- 	/* bit size */
-@@ -1190,7 +1143,7 @@ static int wm8753_i2s_hw_params(struct snd_pcm_substream *substream,
- 		break;
- 	}
- 
--	wm8753_write(codec, WM8753_HIFI, hifi);
-+	snd_soc_write(codec, WM8753_HIFI, hifi);
- 	return 0;
- }
- 
-@@ -1201,8 +1154,8 @@ static int wm8753_mode1v_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 	u16 clock;
- 
- 	/* set clk source as pcmclk */
--	clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
--	wm8753_write(codec, WM8753_CLOCK, clock);
-+	clock = snd_soc_read(codec, WM8753_CLOCK) & 0xfffb;
-+	snd_soc_write(codec, WM8753_CLOCK, clock);
- 
- 	if (wm8753_vdac_adc_set_dai_fmt(codec_dai, fmt) < 0)
- 		return -EINVAL;
-@@ -1224,8 +1177,8 @@ static int wm8753_mode2_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 	u16 clock;
- 
- 	/* set clk source as pcmclk */
--	clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
--	wm8753_write(codec, WM8753_CLOCK, clock);
-+	clock = snd_soc_read(codec, WM8753_CLOCK) & 0xfffb;
-+	snd_soc_write(codec, WM8753_CLOCK, clock);
- 
- 	if (wm8753_vdac_adc_set_dai_fmt(codec_dai, fmt) < 0)
- 		return -EINVAL;
-@@ -1239,8 +1192,8 @@ static int wm8753_mode3_4_set_dai_fmt(struct snd_soc_dai *codec_dai,
- 	u16 clock;
- 
- 	/* set clk source as mclk */
--	clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
--	wm8753_write(codec, WM8753_CLOCK, clock | 0x4);
-+	clock = snd_soc_read(codec, WM8753_CLOCK) & 0xfffb;
-+	snd_soc_write(codec, WM8753_CLOCK, clock | 0x4);
- 
- 	if (wm8753_hdac_set_dai_fmt(codec_dai, fmt) < 0)
- 		return -EINVAL;
-@@ -1252,19 +1205,19 @@ static int wm8753_mode3_4_set_dai_fmt(struct snd_soc_dai *codec_dai,
- static int wm8753_mute(struct snd_soc_dai *dai, int mute)
- {
- 	struct snd_soc_codec *codec = dai->codec;
--	u16 mute_reg = wm8753_read_reg_cache(codec, WM8753_DAC) & 0xfff7;
-+	u16 mute_reg = snd_soc_read(codec, WM8753_DAC) & 0xfff7;
- 	struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
- 
- 	/* the digital mute covers the HiFi and Voice DAC's on the WM8753.
- 	 * make sure we check if they are not both active when we mute */
- 	if (mute && wm8753->dai_func == 1) {
- 		if (!codec->active)
--			wm8753_write(codec, WM8753_DAC, mute_reg | 0x8);
-+			snd_soc_write(codec, WM8753_DAC, mute_reg | 0x8);
- 	} else {
- 		if (mute)
--			wm8753_write(codec, WM8753_DAC, mute_reg | 0x8);
-+			snd_soc_write(codec, WM8753_DAC, mute_reg | 0x8);
- 		else
--			wm8753_write(codec, WM8753_DAC, mute_reg);
-+			snd_soc_write(codec, WM8753_DAC, mute_reg);
- 	}
- 
- 	return 0;
-@@ -1273,23 +1226,23 @@ static int wm8753_mute(struct snd_soc_dai *dai, int mute)
- static int wm8753_set_bias_level(struct snd_soc_codec *codec,
- 				 enum snd_soc_bias_level level)
- {
--	u16 pwr_reg = wm8753_read_reg_cache(codec, WM8753_PWR1) & 0xfe3e;
-+	u16 pwr_reg = snd_soc_read(codec, WM8753_PWR1) & 0xfe3e;
- 
- 	switch (level) {
- 	case SND_SOC_BIAS_ON:
- 		/* set vmid to 50k and unmute dac */
--		wm8753_write(codec, WM8753_PWR1, pwr_reg | 0x00c0);
-+		snd_soc_write(codec, WM8753_PWR1, pwr_reg | 0x00c0);
- 		break;
- 	case SND_SOC_BIAS_PREPARE:
- 		/* set vmid to 5k for quick power up */
--		wm8753_write(codec, WM8753_PWR1, pwr_reg | 0x01c1);
-+		snd_soc_write(codec, WM8753_PWR1, pwr_reg | 0x01c1);
- 		break;
- 	case SND_SOC_BIAS_STANDBY:
- 		/* mute dac and set vmid to 500k, enable VREF */
--		wm8753_write(codec, WM8753_PWR1, pwr_reg | 0x0141);
-+		snd_soc_write(codec, WM8753_PWR1, pwr_reg | 0x0141);
- 		break;
- 	case SND_SOC_BIAS_OFF:
--		wm8753_write(codec, WM8753_PWR1, 0x0001);
-+		snd_soc_write(codec, WM8753_PWR1, 0x0001);
- 		break;
- 	}
- 	codec->bias_level = level;
-@@ -1477,7 +1430,7 @@ static void wm8753_set_dai_mode(struct snd_soc_codec *codec,
- 		else
- 			dai->driver = &wm8753_all_dai[(wm8753->dai_func << 1) + 1];
- 	}
--	wm8753_write(codec, WM8753_IOCTL, wm8753->dai_func);
-+	snd_soc_write(codec, WM8753_IOCTL, wm8753->dai_func);
- }
- 
- static void wm8753_work(struct work_struct *work)
-@@ -1495,22 +1448,19 @@ static int wm8753_suspend(struct snd_soc_codec *codec, pm_message_t state)
- 
- static int wm8753_resume(struct snd_soc_codec *codec)
- {
-+	u16 *reg_cache = codec->reg_cache;
- 	int i;
--	u8 data[2];
--	u16 *cache = codec->reg_cache;
- 
- 	/* Sync reg_cache with the hardware */
--	for (i = 0; i < ARRAY_SIZE(wm8753_reg); i++) {
--		if (i + 1 == WM8753_RESET)
-+	for (i = 1; i < ARRAY_SIZE(wm8753_reg); i++) {
-+		if (i == WM8753_RESET)
- 			continue;
- 
- 		/* No point in writing hardware default values back */
--		if (cache[i] == wm8753_reg[i])
-+		if (reg_cache[i] == wm8753_reg[i])
- 			continue;
- 
--		data[0] = ((i + 1) << 1) | ((cache[i] >> 8) & 0x0001);
--		data[1] = cache[i] & 0x00ff;
--		codec->hw_write(codec->control_data, data, 2);
-+		snd_soc_write(codec, i, reg_cache[i]);
- 	}
- 
- 	wm8753_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-@@ -1548,7 +1498,7 @@ static int run_delayed_work(struct delayed_work *dwork)
- static int wm8753_probe(struct snd_soc_codec *codec)
- {
- 	struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
--	int ret = 0, reg;
-+	int ret;
- 
- 	INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work);
- 
-@@ -1573,26 +1523,16 @@ static int wm8753_probe(struct snd_soc_codec *codec)
- 			      msecs_to_jiffies(caps_charge));
- 
- 	/* set the update bits */
--	reg = wm8753_read_reg_cache(codec, WM8753_LDAC);
--	wm8753_write(codec, WM8753_LDAC, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_RDAC);
--	wm8753_write(codec, WM8753_RDAC, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_LADC);
--	wm8753_write(codec, WM8753_LADC, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_RADC);
--	wm8753_write(codec, WM8753_RADC, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_LOUT1V);
--	wm8753_write(codec, WM8753_LOUT1V, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_ROUT1V);
--	wm8753_write(codec, WM8753_ROUT1V, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_LOUT2V);
--	wm8753_write(codec, WM8753_LOUT2V, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_ROUT2V);
--	wm8753_write(codec, WM8753_ROUT2V, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_LINVOL);
--	wm8753_write(codec, WM8753_LINVOL, reg | 0x0100);
--	reg = wm8753_read_reg_cache(codec, WM8753_RINVOL);
--	wm8753_write(codec, WM8753_RINVOL, reg | 0x0100);
-+	snd_soc_update_bits(codec, WM8753_LDAC, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_RDAC, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_LDAC, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_RDAC, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_LOUT1V, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_ROUT1V, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_LOUT2V, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_ROUT2V, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_LINVOL, 0x0100, 0x0100);
-+	snd_soc_update_bits(codec, WM8753_RINVOL, 0x0100, 0x0100);
- 
- 	snd_soc_add_controls(codec, wm8753_snd_controls,
- 			     ARRAY_SIZE(wm8753_snd_controls));
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch b/recipes-kernel/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch
deleted file mode 100644
index 9372cf0..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 22c5ed7018eb4157e317c8513fe2ced2c8ec5e0c Mon Sep 17 00:00:00 2001
-From: Avi Kivity <avi at redhat.com>
-Date: Tue, 28 Dec 2010 12:09:07 +0200
-Subject: [PATCH 26/65] KVM: MMU: Fix incorrect direct gfn for unpaged mode shadow
-
-We use the physical address instead of the base gfn for the four
-PAE page directories we use in unpaged mode.  When the guest accesses
-an address above 1GB that is backed by a large host page, a BUG_ON()
-in kvm_mmu_set_gfn() triggers.
-
-Resolves: https://bugzilla.kernel.org/show_bug.cgi?id=21962
-Reported-and-tested-by: Nicolas Prochazka <prochazka.nicolas at gmail.com>
-KVM-Stable-Tag.
-Signed-off-by: Avi Kivity <avi at redhat.com>
----
- arch/x86/kvm/mmu.c |    3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
-diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
-index fb8b376..fbb04ae 100644
---- a/arch/x86/kvm/mmu.c
-+++ b/arch/x86/kvm/mmu.c
-@@ -2394,7 +2394,8 @@ static int mmu_alloc_direct_roots(struct kvm_vcpu *vcpu)
- 			ASSERT(!VALID_PAGE(root));
- 			spin_lock(&vcpu->kvm->mmu_lock);
- 			kvm_mmu_free_some_pages(vcpu);
--			sp = kvm_mmu_get_page(vcpu, i << 30, i << 30,
-+			sp = kvm_mmu_get_page(vcpu, i << (30 - PAGE_SHIFT),
-+					      i << 30,
- 					      PT32_ROOT_LEVEL, 1, ACC_ALL,
- 					      NULL);
- 			root = __pa(sp->spt);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch b/recipes-kernel/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch
deleted file mode 100644
index 8ddca9c..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 2bffbb04acdf2e58726ba8192d468f2bda528fdf Mon Sep 17 00:00:00 2001
-From: Hillf Danton <dhillf at gmail.com>
-Date: Wed, 29 Dec 2010 21:55:28 +0800
-Subject: [PATCH 27/65] fix freeing user_struct in user cache
-
-When racing on adding into user cache, the new allocated from mm slab
-is freed without putting user namespace.
-
-Since the user namespace is already operated by getting, putting has
-to be issued.
-
-Signed-off-by: Hillf Danton <dhillf at gmail.com>
-Acked-by: Serge Hallyn <serge at hallyn.com>
-Cc: stable at kernel.org
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- kernel/user.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/kernel/user.c b/kernel/user.c
-index 2c7d8d5..5c598ca 100644
---- a/kernel/user.c
-+++ b/kernel/user.c
-@@ -158,6 +158,7 @@ struct user_struct *alloc_uid(struct user_namespace *ns, uid_t uid)
- 		spin_lock_irq(&uidhash_lock);
- 		up = uid_hash_find(uid, hashent);
- 		if (up) {
-+			put_user_ns(ns);
- 			key_put(new->uid_keyring);
- 			key_put(new->session_keyring);
- 			kmem_cache_free(uid_cachep, new);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch b/recipes-kernel/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch
deleted file mode 100644
index 4c3acd7..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From 72ce69f5fe32170f9662b5c87b0226d6ba19462f Mon Sep 17 00:00:00 2001
-From: Gregory CLEMENT <gregory.clement at free-electrons.com>
-Date: Wed, 29 Dec 2010 11:52:53 +0100
-Subject: [PATCH 28/65] spi/omap2_mcspi.c: Force CS to be in inactive state after off-mode transition
-
-When SPI wake up from OFF mode, CS is in the wrong state: force it to the
-inactive state.
-
-During the system life, I monitored the CS behavior using a oscilloscope.
-I also activated debug in omap2_mcspi, so I saw when driver disable the clocks
-and restore context when device is not used.Each time the CS was in the correct
-state.  It was only when system was put suspend to ram with off-mode activated
-that on resume the CS was in wrong state( ie activated).
-
-Changelog:
-* Change from v1 to v2:
-  - Rebase on linus/master (after 2.6.37-rc1)
-  - Do some clean-up and fix indentation on both patches
-  - Add more explanations for patch 2
-
-* Change from v2 to v3:
-  - Use directly resume function of spi_master instead of using function
-  - from spi_device as Grant Likely pointed it out.
-  - Force this transition explicitly for each CS used by a device.
-
-* Change from v3 to v4:
-  - Patch clean-up according to Kevin Hilman and checkpatch.
-  - Now force CS to be in inactive state only if it was inactive when it was
-    suspended.
-
-* Change from v4 to v5:
-  - Rebase on linus/master (after 2.6.37-rc3)
-  - Collapse some lines as pointed by Grant Likely
-  - Fix a spelling
-
-* Change from v5 to v6:
-  - Rebase on linus/master (after 2.6.37-rc7)
-  - Use CONFIG_SUSPEND instead of CONFIG_PM
-  - Didn't use legacy PM methods anymore. Instead, add a struct dev_pm_ops and
-    add the resume method there.
-  - Fix multi-line comment style
-
-* Change from v6 to v7:
-  - Rebase on linus/master (after 2.6.37-rc8)
-  - Drop an extra line
-
-Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
-Acked-by: David Brownell <dbrownell at users.sourceforge.net>
-Reviewed-by: Kevin Hilman <khilman at deeprootsystems.com>
-Signed-off-by: Grant Likely <grant.likely at secretlab.ca>
----
- drivers/spi/omap2_mcspi.c |   39 +++++++++++++++++++++++++++++++++++++++
- 1 files changed, 39 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
-index 2a651e6..951a160 100644
---- a/drivers/spi/omap2_mcspi.c
-+++ b/drivers/spi/omap2_mcspi.c
-@@ -1305,10 +1305,49 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
- /* work with hotplug and coldplug */
- MODULE_ALIAS("platform:omap2_mcspi");
- 
-+#ifdef	CONFIG_SUSPEND
-+/*
-+ * When SPI wake up from off-mode, CS is in activate state. If it was in
-+ * unactive state when driver was suspend, then force it to unactive state at
-+ * wake up.
-+ */
-+static int omap2_mcspi_resume(struct device *dev)
-+{
-+	struct spi_master	*master = dev_get_drvdata(dev);
-+	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
-+	struct omap2_mcspi_cs *cs;
-+
-+	omap2_mcspi_enable_clocks(mcspi);
-+	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
-+			    node) {
-+		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
-+
-+			/*
-+			 * We need to toggle CS state for OMAP take this
-+			 * change in account.
-+			 */
-+			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
-+			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
-+			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
-+			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
-+		}
-+	}
-+	omap2_mcspi_disable_clocks(mcspi);
-+	return 0;
-+}
-+#else
-+#define	omap2_mcspi_resume	NULL
-+#endif
-+
-+static const struct dev_pm_ops omap2_mcspi_pm_ops = {
-+	.resume = omap2_mcspi_resume,
-+};
-+
- static struct platform_driver omap2_mcspi_driver = {
- 	.driver = {
- 		.name =		"omap2_mcspi",
- 		.owner =	THIS_MODULE,
-+		.pm =		&omap2_mcspi_pm_ops
- 	},
- 	.remove =	__exit_p(omap2_mcspi_remove),
- };
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch b/recipes-kernel/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch
deleted file mode 100644
index c1af011..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 38f5b0c391281eded0e6e5b2bc75a28ae72d0abe Mon Sep 17 00:00:00 2001
-From: Jan Beulich <JBeulich at novell.com>
-Date: Thu, 9 Dec 2010 08:11:38 +0000
-Subject: [PATCH 29/65] kconfig: fix undesirable side effect of adding "visible" menu attribute
-
-This lead to non-selected, non-user-selectable options to be written
-out to .config. This is not only pointless, but also preventing the
-user to be prompted should any of those options eventually become
-visible (e.g. by de-selecting the *_AUTO options the "visible"
-attribute was added for.
-
-Furthermore it is quite logical for the "visible" attribute of a menu
-to control the visibility of all contained prompts, which is what the
-patch does.
-
-Signed-off-by: Jan Beulich <jbeulich at novell.com>
-Signed-off-by: Michal Marek <mmarek at suse.cz>
----
- scripts/kconfig/menu.c |   14 ++++++++++++++
- 1 files changed, 14 insertions(+), 0 deletions(-)
-
-diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
-index b9d9aa1..5f77dcb 100644
---- a/scripts/kconfig/menu.c
-+++ b/scripts/kconfig/menu.c
-@@ -140,6 +140,20 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e
- 		}
- 		if (current_entry->prompt && current_entry != &rootmenu)
- 			prop_warn(prop, "prompt redefined");
-+
-+		/* Apply all upper menus' visibilities to actual prompts. */
-+		if(type == P_PROMPT) {
-+			struct menu *menu = current_entry;
-+
-+			while ((menu = menu->parent) != NULL) {
-+				if (!menu->visibility)
-+					continue;
-+				prop->visible.expr
-+					= expr_alloc_and(prop->visible.expr,
-+							 menu->visibility);
-+			}
-+		}
-+
- 		current_entry->prompt = prop;
- 	}
- 	prop->text = prompt;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch b/recipes-kernel/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch
deleted file mode 100644
index c6dcff2..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 806e90c4e5253095f9576113edc6fc78b2d5fec1 Mon Sep 17 00:00:00 2001
-From: Jate Sujjavanich <jsujjavanich at syntech-fuelmaster.com>
-Date: Wed, 29 Sep 2010 09:44:32 -0400
-Subject: [PATCH 30/65] spi/m68knommu: Coldfire QSPI platform support
-
-After grabbing a msg from the msgq, the mcfqspi_work function calls
-list_del_init on the mcfqspi->msgq which unintentionally deletes the rest
-of the list before it can be processed. If qspi call was made using
-spi_sync, this can result in a process hang.
-
-Signed-off-by: Jate Sujjavanich <jsujjavanich at syntech-fuelmaster.com>
-Acked-by: Steven King <sfking at fdwdc.com>
-Signed-off-by: Grant Likely <grant.likely at secretlab.ca>
----
- drivers/spi/coldfire_qspi.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/spi/coldfire_qspi.c b/drivers/spi/coldfire_qspi.c
-index 052b3c7..8856bcc 100644
---- a/drivers/spi/coldfire_qspi.c
-+++ b/drivers/spi/coldfire_qspi.c
-@@ -317,7 +317,7 @@ static void mcfqspi_work(struct work_struct *work)
- 		msg = container_of(mcfqspi->msgq.next, struct spi_message,
- 				   queue);
- 
--		list_del_init(&mcfqspi->msgq);
-+		list_del_init(&msg->queue);
- 		spin_unlock_irqrestore(&mcfqspi->lock, flags);
- 
- 		spi = msg->spi;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch b/recipes-kernel/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch
deleted file mode 100644
index 473a408..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 6540a62434750fe29b877293e54dbf05c0fb54c4 Mon Sep 17 00:00:00 2001
-From: Dan Rosenberg <drosenberg at vsecurity.com>
-Date: Sat, 25 Dec 2010 16:23:40 -0500
-Subject: [PATCH 31/65] sound: Prevent buffer overflow in OSS load_mixer_volumes
-
-The load_mixer_volumes() function, which can be triggered by
-unprivileged users via the SOUND_MIXER_SETLEVELS ioctl, is vulnerable to
-a buffer overflow.  Because the provided "name" argument isn't
-guaranteed to be NULL terminated at the expected 32 bytes, it's possible
-to overflow past the end of the last element in the mixer_vols array.
-Further exploitation can result in an arbitrary kernel write (via
-subsequent calls to load_mixer_volumes()) leading to privilege
-escalation, or arbitrary kernel reads via get_mixer_levels().  In
-addition, the strcmp() may leak bytes beyond the mixer_vols array.
-
-Signed-off-by: Dan Rosenberg <drosenberg at vsecurity.com>
-Cc: stable <stable at kernel.org>
-Signed-off-by: Takashi Iwai <tiwai at suse.de>
----
- sound/oss/soundcard.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/sound/oss/soundcard.c b/sound/oss/soundcard.c
-index 46c0d03..fcb14a0 100644
---- a/sound/oss/soundcard.c
-+++ b/sound/oss/soundcard.c
-@@ -87,7 +87,7 @@ int *load_mixer_volumes(char *name, int *levels, int present)
- 	int             i, n;
- 
- 	for (i = 0; i < num_mixer_volumes; i++) {
--		if (strcmp(name, mixer_vols[i].name) == 0) {
-+		if (strncmp(name, mixer_vols[i].name, 32) == 0) {
- 			if (present)
- 				mixer_vols[i].num = i;
- 			return mixer_vols[i].levels;
-@@ -99,7 +99,7 @@ int *load_mixer_volumes(char *name, int *levels, int present)
- 	}
- 	n = num_mixer_volumes++;
- 
--	strcpy(mixer_vols[n].name, name);
-+	strncpy(mixer_vols[n].name, name, 32);
- 
- 	if (present)
- 		mixer_vols[n].num = n;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch b/recipes-kernel/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch
deleted file mode 100644
index 048a3db..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 927b580b918babc2ecc22a1ae1b6deef428d933f Mon Sep 17 00:00:00 2001
-From: Daniel T Chen <crimsun at ubuntu.com>
-Date: Tue, 28 Dec 2010 17:20:02 -0500
-Subject: [PATCH 32/65] ALSA: hda: Use LPIB quirk for Dell Inspiron m101z/1120
-
-Sjoerd Simons reports that, without using position_fix=1, recording
-experiences overruns. Work around that by applying the LPIB quirk
-for his hardware.
-
-Reported-and-tested-by: Sjoerd Simons <sjoerd at debian.org>
-Cc: <stable at kernel.org>
-Signed-off-by: Daniel T Chen <crimsun at ubuntu.com>
-Signed-off-by: Takashi Iwai <tiwai at suse.de>
----
- sound/pci/hda/hda_intel.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
-index b030c8e..a1c4008 100644
---- a/sound/pci/hda/hda_intel.c
-+++ b/sound/pci/hda/hda_intel.c
-@@ -2300,6 +2300,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
- 	SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
- 	SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
- 	SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB),
-+	SND_PCI_QUIRK(0x1028, 0x0470, "Dell Inspiron 1120", POS_FIX_LPIB),
- 	SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
- 	SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
- 	SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch b/recipes-kernel/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch
deleted file mode 100644
index ffffd87..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 5cd3371a75c27fe5b105037b1a9a53b661a3624e Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris at chris-wilson.co.uk>
-Date: Thu, 30 Dec 2010 09:07:15 +0000
-Subject: [PATCH 33/65] Revert "drm/i915/bios: Reverse order of 100/120 Mhz SSC clocks"
-
-As I feared, whilst this fixed the clocks for the Lenovo U160, it broke
-many other machines. So lets reverts commit 448f53a1ede54eb854d036abf
-and search for the real bug.
-
-Reported-and-tested-by: Travis Hume <travis at computoring.org> [et al]
-Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=25842
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=32698
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
- drivers/gpu/drm/i915/intel_bios.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
-index 2b20786..b0b1200 100644
---- a/drivers/gpu/drm/i915/intel_bios.c
-+++ b/drivers/gpu/drm/i915/intel_bios.c
-@@ -270,7 +270,7 @@ parse_general_features(struct drm_i915_private *dev_priv,
- 					general->ssc_freq ? 66 : 48;
- 			else if (IS_GEN5(dev) || IS_GEN6(dev))
- 				dev_priv->lvds_ssc_freq =
--					general->ssc_freq ? 120 : 100;
-+					general->ssc_freq ? 100 : 120;
- 			else
- 				dev_priv->lvds_ssc_freq =
- 					general->ssc_freq ? 100 : 96;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch b/recipes-kernel/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch
deleted file mode 100644
index 8747c9f..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From a5cbe1d2c6eede52b1773eefcff8e3c1c171b99b Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris at chris-wilson.co.uk>
-Date: Thu, 30 Dec 2010 12:54:00 +0000
-Subject: [PATCH 34/65] drm/i915/dvo: Report LVDS attached to ch701x as connected
-
-As we have already detected something attached to the chip during
-initialisation, always report the LVDS connector status as connected
-during probing.
-
-Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
----
- drivers/gpu/drm/i915/dvo_ch7017.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/dvo_ch7017.c b/drivers/gpu/drm/i915/dvo_ch7017.c
-index af70337..d3e8c54 100644
---- a/drivers/gpu/drm/i915/dvo_ch7017.c
-+++ b/drivers/gpu/drm/i915/dvo_ch7017.c
-@@ -242,7 +242,7 @@ fail:
- 
- static enum drm_connector_status ch7017_detect(struct intel_dvo_device *dvo)
- {
--	return connector_status_unknown;
-+	return connector_status_connected;
- }
- 
- static enum drm_mode_status ch7017_mode_valid(struct intel_dvo_device *dvo,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch b/recipes-kernel/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch
deleted file mode 100644
index 5a5610b..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch
+++ /dev/null
@@ -1,402 +0,0 @@
-From 84a03bcb1f1fb5b6a9f6f508fa0a1fae41a5827a Mon Sep 17 00:00:00 2001
-From: Christoph Hellwig <hch>
-Date: Thu, 16 Dec 2010 12:04:54 +0100
-Subject: [PATCH 35/65] update Documentation/filesystems/Locking
-
-Mostly inspired by all the recent BKL removal changes, but a lot of older
-updates also weren't properly recorded.
-
-Signed-off-by: Christoph Hellwig <hch at lst.de>
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- Documentation/filesystems/Locking |  214 ++++++++++++++++++-------------------
- 1 files changed, 102 insertions(+), 112 deletions(-)
-
-diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
-index b6426f1..7686e76 100644
---- a/Documentation/filesystems/Locking
-+++ b/Documentation/filesystems/Locking
-@@ -18,7 +18,6 @@ prototypes:
- 	char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
- 
- locking rules:
--	none have BKL
- 		dcache_lock	rename_lock	->d_lock	may block
- d_revalidate:	no		no		no		yes
- d_hash		no		no		no		yes
-@@ -42,18 +41,23 @@ ata *);
- 	int (*rename) (struct inode *, struct dentry *,
- 			struct inode *, struct dentry *);
- 	int (*readlink) (struct dentry *, char __user *,int);
--	int (*follow_link) (struct dentry *, struct nameidata *);
-+	void * (*follow_link) (struct dentry *, struct nameidata *);
-+	void (*put_link) (struct dentry *, struct nameidata *, void *);
- 	void (*truncate) (struct inode *);
- 	int (*permission) (struct inode *, int, struct nameidata *);
-+	int (*check_acl)(struct inode *, int);
- 	int (*setattr) (struct dentry *, struct iattr *);
- 	int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
- 	int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
- 	ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
- 	ssize_t (*listxattr) (struct dentry *, char *, size_t);
- 	int (*removexattr) (struct dentry *, const char *);
-+	void (*truncate_range)(struct inode *, loff_t, loff_t);
-+	long (*fallocate)(struct inode *inode, int mode, loff_t offset, loff_t len);
-+	int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
- 
- locking rules:
--	all may block, none have BKL
-+	all may block
- 		i_mutex(inode)
- lookup:		yes
- create:		yes
-@@ -66,19 +70,24 @@ rmdir:		yes (both)	(see below)
- rename:		yes (all)	(see below)
- readlink:	no
- follow_link:	no
-+put_link:	no
- truncate:	yes		(see below)
- setattr:	yes
- permission:	no
-+check_acl:	no
- getattr:	no
- setxattr:	yes
- getxattr:	no
- listxattr:	no
- removexattr:	yes
-+truncate_range:	yes
-+fallocate:	no
-+fiemap:		no
- 	Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
- victim.
- 	cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
- 	->truncate() is never called directly - it's a callback, not a
--method. It's called by vmtruncate() - library function normally used by
-+method. It's called by vmtruncate() - deprecated library function used by
- ->setattr(). Locking information above applies to that call (i.e. is
- inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been
- passed).
-@@ -91,7 +100,7 @@ prototypes:
- 	struct inode *(*alloc_inode)(struct super_block *sb);
- 	void (*destroy_inode)(struct inode *);
- 	void (*dirty_inode) (struct inode *);
--	int (*write_inode) (struct inode *, int);
-+	int (*write_inode) (struct inode *, struct writeback_control *wbc);
- 	int (*drop_inode) (struct inode *);
- 	void (*evict_inode) (struct inode *);
- 	void (*put_super) (struct super_block *);
-@@ -105,10 +114,11 @@ prototypes:
- 	int (*show_options)(struct seq_file *, struct vfsmount *);
- 	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
- 	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
-+	int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
-+	int (*trim_fs) (struct super_block *, struct fstrim_range *);
- 
- locking rules:
- 	All may block [not true, see below]
--	None have BKL
- 			s_umount
- alloc_inode:
- destroy_inode:
-@@ -127,6 +137,8 @@ umount_begin:		no
- show_options:		no		(namespace_sem)
- quota_read:		no		(see below)
- quota_write:		no		(see below)
-+bdev_try_to_free_page:	no		(see below)
-+trim_fs:		no
- 
- ->statfs() has s_umount (shared) when called by ustat(2) (native or
- compat), but that's an accident of bad API; s_umount is used to pin
-@@ -139,19 +151,25 @@ be the only ones operating on the quota file by the quota code (via
- dqio_sem) (unless an admin really wants to screw up something and
- writes to quota files with quotas on). For other details about locking
- see also dquot_operations section.
-+->bdev_try_to_free_page is called from the ->releasepage handler of
-+the block device inode.  See there for more details.
- 
- --------------------------- file_system_type ---------------------------
- prototypes:
- 	int (*get_sb) (struct file_system_type *, int,
- 		       const char *, void *, struct vfsmount *);
-+	struct dentry *(*mount) (struct file_system_type *, int,
-+		       const char *, void *);
- 	void (*kill_sb) (struct super_block *);
- locking rules:
--		may block	BKL
--get_sb		yes		no
--kill_sb		yes		no
-+		may block
-+get_sb		yes
-+mount		yes
-+kill_sb		yes
- 
- ->get_sb() returns error or 0 with locked superblock attached to the vfsmount
- (exclusive on ->s_umount).
-+->mount() returns ERR_PTR or the root dentry.
- ->kill_sb() takes a write-locked superblock, does all shutdown work on it,
- unlocks and drops the reference.
- 
-@@ -176,27 +194,35 @@ prototypes:
- 	void (*freepage)(struct page *);
- 	int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
- 			loff_t offset, unsigned long nr_segs);
--	int (*launder_page) (struct page *);
-+	int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **,
-+				unsigned long *);
-+	int (*migratepage)(struct address_space *, struct page *, struct page *);
-+	int (*launder_page)(struct page *);
-+	int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long);
-+	int (*error_remove_page)(struct address_space *, struct page *);
- 
- locking rules:
- 	All except set_page_dirty and freepage may block
- 
--			BKL	PageLocked(page)	i_mutex
--writepage:		no	yes, unlocks (see below)
--readpage:		no	yes, unlocks
--sync_page:		no	maybe
--writepages:		no
--set_page_dirty		no	no
--readpages:		no
--write_begin:		no	locks the page		yes
--write_end:		no	yes, unlocks		yes
--perform_write:		no	n/a			yes
--bmap:			no
--invalidatepage:		no	yes
--releasepage:		no	yes
--freepage:		no	yes
--direct_IO:		no
--launder_page:		no	yes
-+			PageLocked(page)	i_mutex
-+writepage:		yes, unlocks (see below)
-+readpage:		yes, unlocks
-+sync_page:		maybe
-+writepages:
-+set_page_dirty		no
-+readpages:
-+write_begin:		locks the page		yes
-+write_end:		yes, unlocks		yes
-+bmap:
-+invalidatepage:		yes
-+releasepage:		yes
-+freepage:		yes
-+direct_IO:
-+get_xip_mem:					maybe
-+migratepage:		yes (both)
-+launder_page:		yes
-+is_partially_uptodate:	yes
-+error_remove_page:	yes
- 
- 	->write_begin(), ->write_end(), ->sync_page() and ->readpage()
- may be called from the request handler (/dev/loop).
-@@ -276,9 +302,8 @@ under spinlock (it cannot block) and is sometimes called with the page
- not locked.
- 
- 	->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some
--filesystems and by the swapper. The latter will eventually go away. All
--instances do not actually need the BKL. Please, keep it that way and don't
--breed new callers.
-+filesystems and by the swapper. The latter will eventually go away.  Please,
-+keep it that way and don't breed new callers.
- 
- 	->invalidatepage() is called when the filesystem must attempt to drop
- some or all of the buffers from the page when it is being truncated.  It
-@@ -299,47 +324,37 @@ cleaned, or an error value if not. Note that in order to prevent the page
- getting mapped back in and redirtied, it needs to be kept locked
- across the entire operation.
- 
--	Note: currently almost all instances of address_space methods are
--using BKL for internal serialization and that's one of the worst sources
--of contention. Normally they are calling library functions (in fs/buffer.c)
--and pass foo_get_block() as a callback (on local block-based filesystems,
--indeed). BKL is not needed for library stuff and is usually taken by
--foo_get_block(). It's an overkill, since block bitmaps can be protected by
--internal fs locking and real critical areas are much smaller than the areas
--filesystems protect now.
--
- ----------------------- file_lock_operations ------------------------------
- prototypes:
--	void (*fl_insert)(struct file_lock *);	/* lock insertion callback */
--	void (*fl_remove)(struct file_lock *);	/* lock removal callback */
- 	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
- 	void (*fl_release_private)(struct file_lock *);
- 
- 
- locking rules:
--			BKL	may block
--fl_insert:		yes	no
--fl_remove:		yes	no
--fl_copy_lock:		yes	no
--fl_release_private:	yes	yes
-+			file_lock_lock	may block
-+fl_copy_lock:		yes		no
-+fl_release_private:	maybe		no
- 
- ----------------------- lock_manager_operations ---------------------------
- prototypes:
- 	int (*fl_compare_owner)(struct file_lock *, struct file_lock *);
- 	void (*fl_notify)(struct file_lock *);  /* unblock callback */
-+	int (*fl_grant)(struct file_lock *, struct file_lock *, int);
- 	void (*fl_release_private)(struct file_lock *);
- 	void (*fl_break)(struct file_lock *); /* break_lease callback */
-+	int (*fl_mylease)(struct file_lock *, struct file_lock *);
-+	int (*fl_change)(struct file_lock **, int);
- 
- locking rules:
--			BKL	may block
--fl_compare_owner:	yes	no
--fl_notify:		yes	no
--fl_release_private:	yes	yes
--fl_break:		yes	no
--
--	Currently only NFSD and NLM provide instances of this class. None of the
--them block. If you have out-of-tree instances - please, show up. Locking
--in that area will change.
-+			file_lock_lock	may block
-+fl_compare_owner:	yes		no
-+fl_notify:		yes		no
-+fl_grant:		no		no
-+fl_release_private:	maybe		no
-+fl_break:		yes		no
-+fl_mylease:		yes		no
-+fl_change		yes		no
-+
- --------------------------- buffer_head -----------------------------------
- prototypes:
- 	void (*b_end_io)(struct buffer_head *bh, int uptodate);
-@@ -364,17 +379,17 @@ prototypes:
- 	void (*swap_slot_free_notify) (struct block_device *, unsigned long);
- 
- locking rules:
--			BKL	bd_mutex
--open:			no	yes
--release:		no	yes
--ioctl:			no	no
--compat_ioctl:		no	no
--direct_access:		no	no
--media_changed:		no	no
--unlock_native_capacity:	no	no
--revalidate_disk:	no	no
--getgeo:			no	no
--swap_slot_free_notify:	no	no	(see below)
-+			bd_mutex
-+open:			yes
-+release:		yes
-+ioctl:			no
-+compat_ioctl:		no
-+direct_access:		no
-+media_changed:		no
-+unlock_native_capacity:	no
-+revalidate_disk:	no
-+getgeo:			no
-+swap_slot_free_notify:	no	(see below)
- 
- media_changed, unlock_native_capacity and revalidate_disk are called only from
- check_disk_change().
-@@ -413,34 +428,21 @@ prototypes:
- 	unsigned long (*get_unmapped_area)(struct file *, unsigned long,
- 			unsigned long, unsigned long, unsigned long);
- 	int (*check_flags)(int);
-+	int (*flock) (struct file *, int, struct file_lock *);
-+	ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *,
-+			size_t, unsigned int);
-+	ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *,
-+			size_t, unsigned int);
-+	int (*setlease)(struct file *, long, struct file_lock **);
- };
- 
- locking rules:
--	All may block.
--			BKL
--llseek:			no	(see below)
--read:			no
--aio_read:		no
--write:			no
--aio_write:		no
--readdir: 		no
--poll:			no
--unlocked_ioctl:		no
--compat_ioctl:		no
--mmap:			no
--open:			no
--flush:			no
--release:		no
--fsync:			no	(see below)
--aio_fsync:		no
--fasync:			no
--lock:			yes
--readv:			no
--writev:			no
--sendfile:		no
--sendpage:		no
--get_unmapped_area:	no
--check_flags:		no
-+	All may block except for ->setlease.
-+	No VFS locks held on entry except for ->fsync and ->setlease.
-+
-+->fsync() has i_mutex on inode.
-+
-+->setlease has the file_list_lock held and must not sleep.
- 
- ->llseek() locking has moved from llseek to the individual llseek
- implementations.  If your fs is not using generic_file_llseek, you
-@@ -450,17 +452,10 @@ mutex or just to use i_size_read() instead.
- Note: this does not protect the file->f_pos against concurrent modifications
- since this is something the userspace has to take care about.
- 
--Note: ext2_release() was *the* source of contention on fs-intensive
--loads and dropping BKL on ->release() helps to get rid of that (we still
--grab BKL for cases when we close a file that had been opened r/w, but that
--can and should be done using the internal locking with smaller critical areas).
--Current worst offender is ext2_get_block()...
--
--->fasync() is called without BKL protection, and is responsible for
--maintaining the FASYNC bit in filp->f_flags.  Most instances call
--fasync_helper(), which does that maintenance, so it's not normally
--something one needs to worry about.  Return values > 0 will be mapped to
--zero in the VFS layer.
-+->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags.
-+Most instances call fasync_helper(), which does that maintenance, so it's
-+not normally something one needs to worry about.  Return values > 0 will be
-+mapped to zero in the VFS layer.
- 
- ->readdir() and ->ioctl() on directories must be changed. Ideally we would
- move ->readdir() to inode_operations and use a separate method for directory
-@@ -471,8 +466,6 @@ components. And there are other reasons why the current interface is a mess...
- ->read on directories probably must go away - we should just enforce -EISDIR
- in sys_read() and friends.
- 
--->fsync() has i_mutex on inode.
--
- --------------------------- dquot_operations -------------------------------
- prototypes:
- 	int (*write_dquot) (struct dquot *);
-@@ -507,12 +500,12 @@ prototypes:
- 	int (*access)(struct vm_area_struct *, unsigned long, void*, int, int);
- 
- locking rules:
--		BKL	mmap_sem	PageLocked(page)
--open:		no	yes
--close:		no	yes
--fault:		no	yes		can return with page locked
--page_mkwrite:	no	yes		can return with page locked
--access:		no	yes
-+		mmap_sem	PageLocked(page)
-+open:		yes
-+close:		yes
-+fault:		yes		can return with page locked
-+page_mkwrite:	yes		can return with page locked
-+access:		yes
- 
- 	->fault() is called when a previously not present pte is about
- to be faulted in. The filesystem must find and return the page associated
-@@ -539,6 +532,3 @@ VM_IO | VM_PFNMAP VMAs.
- 
- (if you break something or notice that it is broken and do not fix it yourself
- - at least put it here)
--
--ipc/shm.c::shm_delete() - may need BKL.
--->read() and ->write() in many drivers are (probably) missing BKL.
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch b/recipes-kernel/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch
deleted file mode 100644
index cbdc9be..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 06410121f430702f9f482331a1f6d9ba3ebe5911 Mon Sep 17 00:00:00 2001
-From: KAMEZAWA Hiroyuki <kamezawa.hiroyu at jp.fujitsu.com>
-Date: Wed, 29 Dec 2010 14:07:11 -0800
-Subject: [PATCH 36/65] memcg: fix wrong VM_BUG_ON() in try_charge()'s mm->owner check
-
-At __mem_cgroup_try_charge(), VM_BUG_ON(!mm->owner) is checked.
-But as commented in mem_cgroup_from_task(), mm->owner can be NULL
-in some racy case. This check of VM_BUG_ON() is bad.
-
-A possible story to hit this is at swapoff()->try_to_unuse(). It passes
-mm_struct to mem_cgroup_try_charge_swapin() while mm->owner is NULL. If we
-can't get proper mem_cgroup from swap_cgroup information, mm->owner is used
-as charge target and we see NULL.
-
-Cc: Daisuke Nishimura <nishimura at mxp.nes.nec.co.jp>
-Cc: KOSAKI Motohiro <kosaki.motohiro at jp.fujitsu.com>
-Reported-by: Hugh Dickins <hughd at google.com>
-Reported-by: Thomas Meyer <thomas at m3y3r.de>
-Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu at jp.fujitsu.com>
-Reviewed-by: Balbir Singh <balbir at linux.vnet.ibm.com>
-Signed-off-by: Hugh Dickins <hughd at google.com>
-Cc: stable at kernel.org
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- mm/memcontrol.c |   19 +++++++++----------
- 1 files changed, 9 insertions(+), 10 deletions(-)
-
-diff --git a/mm/memcontrol.c b/mm/memcontrol.c
-index 7a22b41..00bb8a6 100644
---- a/mm/memcontrol.c
-+++ b/mm/memcontrol.c
-@@ -1925,19 +1925,18 @@ again:
- 
- 		rcu_read_lock();
- 		p = rcu_dereference(mm->owner);
--		VM_BUG_ON(!p);
- 		/*
--		 * because we don't have task_lock(), "p" can exit while
--		 * we're here. In that case, "mem" can point to root
--		 * cgroup but never be NULL. (and task_struct itself is freed
--		 * by RCU, cgroup itself is RCU safe.) Then, we have small
--		 * risk here to get wrong cgroup. But such kind of mis-account
--		 * by race always happens because we don't have cgroup_mutex().
--		 * It's overkill and we allow that small race, here.
-+		 * Because we don't have task_lock(), "p" can exit.
-+		 * In that case, "mem" can point to root or p can be NULL with
-+		 * race with swapoff. Then, we have small risk of mis-accouning.
-+		 * But such kind of mis-account by race always happens because
-+		 * we don't have cgroup_mutex(). It's overkill and we allo that
-+		 * small race, here.
-+		 * (*) swapoff at el will charge against mm-struct not against
-+		 * task-struct. So, mm->owner can be NULL.
- 		 */
- 		mem = mem_cgroup_from_task(p);
--		VM_BUG_ON(!mem);
--		if (mem_cgroup_is_root(mem)) {
-+		if (!mem || mem_cgroup_is_root(mem)) {
- 			rcu_read_unlock();
- 			goto done;
- 		}
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch b/recipes-kernel/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch
deleted file mode 100644
index 03e390e..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 9214e9d423fea726c5497ae5be07d3069246e6bd Mon Sep 17 00:00:00 2001
-From: Nitin Gupta <ngupta at vflare.org>
-Date: Thu, 30 Dec 2010 04:07:58 -0500
-Subject: [PATCH 37/65] Revert "Staging: zram: work around oops due to startup ordering snafu"
-
-This reverts commit 7e24cce38a99f373450db67bf576fe73e8168d66 because it
-was never appropriate for mainline.
-
-Do not check for init flag before starting I/O - zram module is unusable
-without this fix.
-
-The oops mentioned in the reverted commit message was actually a problem
-only with the zram version as present in project's own repository where
-we allocate struct zram_stats_cpu upon device initialization.  OTOH, In
-mainline/staging version of zram, we allocate struct stats upfront, so
-this oops cannot happen in mainline version.
-
-Checking for init_done flag in zram_make_request() results in a *no-op*
-for any I/O operation since we simply always return success.  This flag
-is actually set when the first write occurs on a zram disk which
-triggers its initialization.
-
-Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=25722
-
-Reported-by: Dennis Jansen <dennis.jansen at web.de>
-Signed-off-by: Nitin Gupta <ngupta at vflare.org>
-Cc: Anton Blanchard <anton at samba.org>
-Cc: Andrew Morton <akpm at linux-foundation.org>
-Cc: Greg Kroah-Hartman <gregkh at suse.de>
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- drivers/staging/zram/zram_drv.c |    6 ------
- 1 files changed, 0 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c
-index 8c3c057..d0e9e02 100644
---- a/drivers/staging/zram/zram_drv.c
-+++ b/drivers/staging/zram/zram_drv.c
-@@ -435,12 +435,6 @@ static int zram_make_request(struct request_queue *queue, struct bio *bio)
- 	int ret = 0;
- 	struct zram *zram = queue->queuedata;
- 
--	if (unlikely(!zram->init_done)) {
--		set_bit(BIO_UPTODATE, &bio->bi_flags);
--		bio_endio(bio, 0);
--		return 0;
--	}
--
- 	if (!valid_io_request(zram, bio)) {
- 		zram_stat64_inc(zram, &zram->stats.invalid_io);
- 		bio_io_error(bio);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch b/recipes-kernel/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch
deleted file mode 100644
index 130a640..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 177f55e48f91842a6e33e896d64ebb9a44db298b Mon Sep 17 00:00:00 2001
-From: Dan Rosenberg <drosenberg at vsecurity.com>
-Date: Sun, 26 Dec 2010 06:54:53 +0000
-Subject: [PATCH 38/65] CAN: Use inode instead of kernel address for /proc file
-
-Since the socket address is just being used as a unique identifier, its
-inode number is an alternative that does not leak potentially sensitive
-information.
-
-CC-ing stable because MITRE has assigned CVE-2010-4565 to the issue.
-
-Signed-off-by: Dan Rosenberg <drosenberg at vsecurity.com>
-Acked-by: Oliver Hartkopp <socketcan at hartkopp.net>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- net/can/bcm.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/net/can/bcm.c b/net/can/bcm.c
-index 6faa825..9d5e8ac 100644
---- a/net/can/bcm.c
-+++ b/net/can/bcm.c
-@@ -125,7 +125,7 @@ struct bcm_sock {
- 	struct list_head tx_ops;
- 	unsigned long dropped_usr_msgs;
- 	struct proc_dir_entry *bcm_proc_read;
--	char procname [20]; /* pointer printed in ASCII with \0 */
-+	char procname [32]; /* inode number in decimal with \0 */
- };
- 
- static inline struct bcm_sock *bcm_sk(const struct sock *sk)
-@@ -1521,7 +1521,7 @@ static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len,
- 
- 	if (proc_dir) {
- 		/* unique socket address as filename */
--		sprintf(bo->procname, "%p", sock);
-+		sprintf(bo->procname, "%lu", sock_i_ino(sk));
- 		bo->bcm_proc_read = proc_create_data(bo->procname, 0644,
- 						     proc_dir,
- 						     &bcm_proc_fops, sk);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch b/recipes-kernel/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch
deleted file mode 100644
index 24fdff6..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 7b63a1b5eed2e8f4c90cef7ba893dd95ab1d71ae Mon Sep 17 00:00:00 2001
-From: Jesper Juhl <jj at chaosbits.net>
-Date: Sun, 26 Dec 2010 09:59:58 +0000
-Subject: [PATCH 39/65] ISDN, Gigaset: Fix memory leak in do_disconnect_req()
-
-Hi,
-
-In drivers/isdn/gigaset/capi.c::do_disconnect_req() we will leak the
-memory allocated (with kmalloc) to 'b3cmsg' if the call to alloc_skb()
-fails.
-
-...
-		b3cmsg = kmalloc(sizeof(*b3cmsg), GFP_KERNEL);
-	allocation here ------^
-		if (!b3cmsg) {
-			dev_err(cs->dev, "%s: out of memory\n", __func__);
-			send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR);
-			return;
-		}
-		capi_cmsg_header(b3cmsg, ap->id, CAPI_DISCONNECT_B3, CAPI_IND,
-				 ap->nextMessageNumber++,
-				 cmsg->adr.adrPLCI | (1 << 16));
-		b3cmsg->Reason_B3 = CapiProtocolErrorLayer1;
-		b3skb = alloc_skb(CAPI_DISCONNECT_B3_IND_BASELEN, GFP_KERNEL);
-		if (b3skb == NULL) {
-			dev_err(cs->dev, "%s: out of memory\n", __func__);
-			send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR);
-			return;
-	leak here ------^
-...
-
-This leak is easily fixed by just kfree()'ing the memory allocated to
-'b3cmsg' right before we return. The following patch does that.
-
-Signed-off-by: Jesper Juhl <jj at chaosbits.net>
-Acked-by: Tilman Schmidt <tilman at imap.cc>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/isdn/gigaset/capi.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
-index bcc174e..658e75f 100644
---- a/drivers/isdn/gigaset/capi.c
-+++ b/drivers/isdn/gigaset/capi.c
-@@ -1900,6 +1900,7 @@ static void do_disconnect_req(struct gigaset_capi_ctr *iif,
- 		if (b3skb == NULL) {
- 			dev_err(cs->dev, "%s: out of memory\n", __func__);
- 			send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR);
-+			kfree(b3cmsg);
- 			return;
- 		}
- 		capi_cmsg2message(b3cmsg,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch b/recipes-kernel/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch
deleted file mode 100644
index b9be413..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From dcb64d3c0d57e8bc674ec4ca6bf7f4812f49f7b2 Mon Sep 17 00:00:00 2001
-From: Jesper Juhl <jj at chaosbits.net>
-Date: Fri, 31 Dec 2010 11:18:48 -0800
-Subject: [PATCH 40/65] Broadcom CNIC core network driver: fix mem leak on allocation failures in cnic_alloc_uio_rings()
-
-We are leaking memory in drivers/net/cnic.c::cnic_alloc_uio_rings() if
-either of the calls to dma_alloc_coherent() fail. This patch fixes it by
-freeing both the memory allocated with kzalloc() and memory allocated with
-previous calls to dma_alloc_coherent() when there's a failure.
-
-Thanks to  Joe Perches <joe at perches.com>  for suggesting a better
-implementation than my initial version.
-
-Signed-off-by: Jesper Juhl <jj at chaosbits.net>
-Acked-by: Michael Chan <mchan at broadcom.com>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/cnic.c |   10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c
-index 92bac19..6dff321 100644
---- a/drivers/net/cnic.c
-+++ b/drivers/net/cnic.c
-@@ -940,7 +940,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
- 					   &udev->l2_ring_map,
- 					   GFP_KERNEL | __GFP_COMP);
- 	if (!udev->l2_ring)
--		return -ENOMEM;
-+		goto err_udev;
- 
- 	udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size;
- 	udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size);
-@@ -948,7 +948,7 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
- 					  &udev->l2_buf_map,
- 					  GFP_KERNEL | __GFP_COMP);
- 	if (!udev->l2_buf)
--		return -ENOMEM;
-+		goto err_dma;
- 
- 	write_lock(&cnic_dev_lock);
- 	list_add(&udev->list, &cnic_udev_list);
-@@ -959,6 +959,12 @@ static int cnic_alloc_uio_rings(struct cnic_dev *dev, int pages)
- 	cp->udev = udev;
- 
- 	return 0;
-+ err_dma:
-+	dma_free_coherent(&udev->pdev->dev, udev->l2_ring_size,
-+			  udev->l2_ring, udev->l2_ring_map);
-+ err_udev:
-+	kfree(udev);
-+	return -ENOMEM;
- }
- 
- static int cnic_init_uio(struct cnic_dev *dev)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch b/recipes-kernel/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch
deleted file mode 100644
index c77fb85..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 8742365f4de2afdd0168366b49a3118e67354a21 Mon Sep 17 00:00:00 2001
-From: David Sterba <dsterba at suse.cz>
-Date: Wed, 29 Dec 2010 03:40:31 +0000
-Subject: [PATCH 41/65] tg3: fix return value check in tg3_read_vpd()
-
-Besides -ETIMEDOUT and -EINTR, pci_read_vpd may return other error
-values like -ENODEV or -EINVAL which are ignored due to the buggy
-check, but the data are not read from VPD anyway and this is checked
-subsequently with at most 3 needless loop iterations. This does not
-show up as a runtime bug.
-
-CC: Matt Carlson <mcarlson at broadcom.com>
-CC: Michael Chan <mchan at broadcom.com>
-Signed-off-by: David Sterba <dsterba at suse.cz>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/tg3.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
-index 30ccbb6..6f97b7b 100644
---- a/drivers/net/tg3.c
-+++ b/drivers/net/tg3.c
-@@ -12658,7 +12658,7 @@ static void __devinit tg3_read_vpd(struct tg3 *tp)
- 			cnt = pci_read_vpd(tp->pdev, pos,
- 					   TG3_NVM_VPD_LEN - pos,
- 					   &vpd_data[pos]);
--			if (cnt == -ETIMEDOUT || -EINTR)
-+			if (cnt == -ETIMEDOUT || cnt == -EINTR)
- 				cnt = 0;
- 			else if (cnt < 0)
- 				goto out_not_found;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch b/recipes-kernel/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch
deleted file mode 100644
index c2ed56e..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From f6a826af05cb9de0de0218f3cd05af203170fd12 Mon Sep 17 00:00:00 2001
-From: Ben Hutchings <ben at decadent.org.uk>
-Date: Wed, 29 Dec 2010 04:26:17 +0000
-Subject: [PATCH 42/65] starfire: Fix dma_addr_t size test for MIPS
-
-Commit 56543af "starfire: use BUILD_BUG_ON for netdrv_addr_t" revealed
-that the preprocessor condition used to find the size of dma_addr_t
-yielded the wrong result for some architectures and configurations.
-This was kluged for 64-bit PowerPC in commit 3e502e6 by adding yet
-another case to the condition.  However, 64-bit MIPS configurations
-are not detected reliably either.
-
-This should be fixed by using CONFIG_ARCH_DMA_ADDR_T_64BIT, but that
-isn't yet defined everywhere it should be.
-
-Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/starfire.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c
-index 4adf124..a4f2bd5 100644
---- a/drivers/net/starfire.c
-+++ b/drivers/net/starfire.c
-@@ -148,7 +148,7 @@ static int full_duplex[MAX_UNITS] = {0, };
-  * This SUCKS.
-  * We need a much better method to determine if dma_addr_t is 64-bit.
-  */
--#if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT))
-+#if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || (defined(CONFIG_MIPS) && ((defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || defined(CONFIG_64BIT))) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT))
- /* 64-bit dma_addr_t */
- #define ADDR_64BITS	/* This chip uses 64 bit addresses. */
- #define netdrv_addr_t __le64
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch b/recipes-kernel/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch
deleted file mode 100644
index 20077bf..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 0af81f1e48cd0f4a1cdce5939408e1d9ad508190 Mon Sep 17 00:00:00 2001
-From: Julia Lawall <julia at diku.dk>
-Date: Wed, 29 Dec 2010 04:01:03 +0000
-Subject: [PATCH 43/65] drivers/atm/atmtcp.c: add missing atm_dev_put
-
-The earlier call to atm_dev_lookup increases the reference count of dev,
-so decrease it on the way out.
-
-The semantic match that finds this problem is as follows:
-(http://coccinelle.lip6.fr/)
-
-// <smpl>
-@@
-expression x, E;
-constant C;
-@@
-
-x = atm_dev_lookup(...);
-... when != false x != NULL
-    when != true x == NULL
-    when != \(E = x\|x = E\)
-    when != atm_dev_put(dev);
-*return -C;
-// </smpl>
-
-Signed-off-by: Julia Lawall <julia at diku.dk>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/atm/atmtcp.c |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
-index 2b464b6..0b06250 100644
---- a/drivers/atm/atmtcp.c
-+++ b/drivers/atm/atmtcp.c
-@@ -392,7 +392,10 @@ static int atmtcp_attach(struct atm_vcc *vcc,int itf)
- 			atm_dev_put(dev);
- 			return -EMEDIUMTYPE;
- 		}
--		if (PRIV(dev)->vcc) return -EBUSY;
-+		if (PRIV(dev)->vcc) {
-+			atm_dev_put(dev);
-+			return -EBUSY;
-+		}
- 	}
- 	else {
- 		int error;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch b/recipes-kernel/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch
deleted file mode 100644
index 0f47f86..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 1e144569ab9d311fa5e08efc9a7fb35853d697d9 Mon Sep 17 00:00:00 2001
-From: Avi Kivity <avi at redhat.com>
-Date: Fri, 31 Dec 2010 10:52:15 +0200
-Subject: [PATCH 44/65] KVM: i8259: initialize isr_ack
-
-isr_ack is never initialized.  So, until the first PIC reset, interrupts
-may fail to be injected.  This can cause Windows XP to fail to boot, as
-reported in the fallout from the fix to
-https://bugzilla.kernel.org/show_bug.cgi?id=21962.
-
-Reported-and-tested-by: Nicolas Prochazka <prochazka.nicolas at gmail.com>
-Signed-off-by: Avi Kivity <avi at redhat.com>
----
- arch/x86/kvm/i8259.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
-index f628234..3cece05 100644
---- a/arch/x86/kvm/i8259.c
-+++ b/arch/x86/kvm/i8259.c
-@@ -575,6 +575,8 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm)
- 	s->pics[1].elcr_mask = 0xde;
- 	s->pics[0].pics_state = s;
- 	s->pics[1].pics_state = s;
-+	s->pics[0].isr_ack = 0xff;
-+	s->pics[1].isr_ack = 0xff;
- 
- 	/*
- 	 * Initialize PIO device
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch b/recipes-kernel/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch
deleted file mode 100644
index c322f9c..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From cdca50978acd2a0be9ef675b8cdd3b77fadab492 Mon Sep 17 00:00:00 2001
-From: Maurus Cuelenaere <mcuelenaere at gmail.com>
-Date: Sun, 2 Jan 2011 14:48:16 -0500
-Subject: [PATCH 45/65] hwmon: (s3c-hwmon) Fix compilation
-
-The owner field was removed from struct attribute in
-6fd69dc578fa0b1bbc3aad70ae3af9a137211707, so don't assign it anymore.
-
-Signed-off-by: Maurus Cuelenaere <mcuelenaere at gmail.com>
-Signed-off-by: Guenter Roeck <guenter.roeck at ericsson.com>
----
- drivers/hwmon/s3c-hwmon.c |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/hwmon/s3c-hwmon.c b/drivers/hwmon/s3c-hwmon.c
-index 05248f2..92b42db 100644
---- a/drivers/hwmon/s3c-hwmon.c
-+++ b/drivers/hwmon/s3c-hwmon.c
-@@ -234,7 +234,6 @@ static int s3c_hwmon_create_attr(struct device *dev,
- 	attr->index = channel;
- 	attr->dev_attr.attr.name  = attrs->in_name;
- 	attr->dev_attr.attr.mode  = S_IRUGO;
--	attr->dev_attr.attr.owner = THIS_MODULE;
- 	attr->dev_attr.show = s3c_hwmon_ch_show;
- 
- 	ret =  device_create_file(dev, &attr->dev_attr);
-@@ -252,7 +251,6 @@ static int s3c_hwmon_create_attr(struct device *dev,
- 		attr->index = channel;
- 		attr->dev_attr.attr.name  = attrs->label_name;
- 		attr->dev_attr.attr.mode  = S_IRUGO;
--		attr->dev_attr.attr.owner = THIS_MODULE;
- 		attr->dev_attr.show = s3c_hwmon_label_show;
- 
- 		ret = device_create_file(dev, &attr->dev_attr);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch b/recipes-kernel/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch
deleted file mode 100644
index b490dc0..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 358160309eeeb8e29b74240874267ea9f7e43d36 Mon Sep 17 00:00:00 2001
-From: Ben Hutchings <ben at decadent.org.uk>
-Date: Sun, 2 Jan 2011 23:02:42 +0000
-Subject: [PATCH 46/65] watchdog: Improve initialisation error message and documentation
-
-The error message 'NMI watchdog failed to create perf event...'
-does not make it clear that this is a fatal error for the
-watchdog.  It also currently prints the error value as a
-pointer, rather than extracting the error code with PTR_ERR().
-Fix that.
-
-Add a note to the description of the 'nowatchdog' kernel
-parameter to associate it with this message.
-
-Reported-by: Cesare Leonardi <celeonar at gmail.com>
-Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
-Cc: 599368 at bugs.debian.org
-Cc: 608138 at bugs.debian.org
-Cc: Don Zickus <dzickus at redhat.com>
-Cc: Frederic Weisbecker <fweisbec at gmail.com>
-Cc: <stable at kernel.org> # .37.x and later
-LKML-Reference: <1294009362.3167.126.camel at localhost>
-Signed-off-by: Ingo Molnar <mingo at elte.hu>
----
- Documentation/kernel-parameters.txt |    2 +-
- kernel/watchdog.c                   |    3 ++-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 8b61c93..01ece1b 100644
---- a/Documentation/kernel-parameters.txt
-+++ b/Documentation/kernel-parameters.txt
-@@ -1759,7 +1759,7 @@ and is between 256 and 4096 characters. It is defined in the file
- 
- 	nousb		[USB] Disable the USB subsystem
- 
--	nowatchdog	[KNL] Disable the lockup detector.
-+	nowatchdog	[KNL] Disable the lockup detector (NMI watchdog).
- 
- 	nowb		[ARM]
- 
-diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index 6e3c41a..5b08215 100644
---- a/kernel/watchdog.c
-+++ b/kernel/watchdog.c
-@@ -364,7 +364,8 @@ static int watchdog_nmi_enable(int cpu)
- 		goto out_save;
- 	}
- 
--	printk(KERN_ERR "NMI watchdog failed to create perf event on cpu%i: %p\n", cpu, event);
-+	printk(KERN_ERR "NMI watchdog disabled for cpu%i: unable to create perf event: %ld\n",
-+	       cpu, PTR_ERR(event));
- 	return PTR_ERR(event);
- 
- 	/* success path */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch b/recipes-kernel/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch
deleted file mode 100644
index 1b08388..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From ff3df95843c9713d7b7247c461b955b1f794db76 Mon Sep 17 00:00:00 2001
-From: Axel Lin <axel.lin at gmail.com>
-Date: Mon, 3 Jan 2011 02:26:53 +0100
-Subject: [PATCH 47/65] ARM: 6605/1: Add missing include "asm/memory.h"
-
-This patch fixes below build error by adding the missing asm/memory.h,
-which is needed for arch_is_coherent().
-
-$ make pxa3xx_defconfig; make
-  CC      init/do_mounts_rd.o
-In file included from include/linux/list_bl.h:5,
-                 from include/linux/rculist_bl.h:7,
-                 from include/linux/dcache.h:7,
-                 from include/linux/fs.h:381,
-                 from init/do_mounts_rd.c:3:
-include/linux/bit_spinlock.h: In function 'bit_spin_unlock':
-include/linux/bit_spinlock.h:61: error: implicit declaration of function 'arch_is_coherent'
-make[1]: *** [init/do_mounts_rd.o] Error 1
-make: *** [init] Error 2
-
-Signed-off-by: Axel Lin <axel.lin at gmail.com>
-Acked-by: Peter Huewe <peterhuewe at gmx.de>
-Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
----
- arch/arm/include/asm/system.h |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
-index 1120f18..8002594 100644
---- a/arch/arm/include/asm/system.h
-+++ b/arch/arm/include/asm/system.h
-@@ -150,6 +150,7 @@ extern unsigned int user_debug;
- #define rmb()		dmb()
- #define wmb()		mb()
- #else
-+#include <asm/memory.h>
- #define mb()	do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
- #define rmb()	do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
- #define wmb()	do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch b/recipes-kernel/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch
deleted file mode 100644
index 6c1d846..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From b4c914578637d1d92b92842c50b02a98f2a7357d Mon Sep 17 00:00:00 2001
-From: Saeed Bishara <saeed at marvell.com>
-Date: Tue, 21 Dec 2010 16:53:39 +0200
-Subject: [PATCH 48/65] mv_xor: fix race in tasklet function
-
-use mv_xor_slot_cleanup() instead of __mv_xor_slot_cleanup() as the former function
-aquires the spin lock that needed to protect the drivers data.
-
-Cc: <stable at kernel.org>
-Signed-off-by: Saeed Bishara <saeed at marvell.com>
-Signed-off-by: Dan Williams <dan.j.williams at intel.com>
----
- drivers/dma/mv_xor.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
-index 411d5bf..a25f5f6 100644
---- a/drivers/dma/mv_xor.c
-+++ b/drivers/dma/mv_xor.c
-@@ -449,7 +449,7 @@ mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
- static void mv_xor_tasklet(unsigned long data)
- {
- 	struct mv_xor_chan *chan = (struct mv_xor_chan *) data;
--	__mv_xor_slot_cleanup(chan);
-+	mv_xor_slot_cleanup(chan);
- }
- 
- static struct mv_xor_desc_slot *
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch b/recipes-kernel/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch
deleted file mode 100644
index a5a0850..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 8948bfb494b67389d7ea6249b3d6e765f4500d88 Mon Sep 17 00:00:00 2001
-From: Guennadi Liakhovetski <g.liakhovetski at gmx.de>
-Date: Wed, 22 Dec 2010 14:46:46 +0100
-Subject: [PATCH 49/65] dmaengine: provide dummy functions for DMA_ENGINE=n
-
-This lets drivers, optionally using the dmaengine, build with DMA_ENGINE
-unselected.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski at gmx.de>
-Signed-off-by: Dan Williams <dan.j.williams at intel.com>
----
- include/linux/dmaengine.h |   13 ++++++++++---
- 1 files changed, 10 insertions(+), 3 deletions(-)
-
-diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
-index 9d8688b..8cd00ad 100644
---- a/include/linux/dmaengine.h
-+++ b/include/linux/dmaengine.h
-@@ -824,6 +824,8 @@ enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie);
- #ifdef CONFIG_DMA_ENGINE
- enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
- void dma_issue_pending_all(void);
-+struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, void *fn_param);
-+void dma_release_channel(struct dma_chan *chan);
- #else
- static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx)
- {
-@@ -831,7 +833,14 @@ static inline enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descript
- }
- static inline void dma_issue_pending_all(void)
- {
--	do { } while (0);
-+}
-+static inline struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask,
-+					      dma_filter_fn fn, void *fn_param)
-+{
-+	return NULL;
-+}
-+static inline void dma_release_channel(struct dma_chan *chan)
-+{
- }
- #endif
- 
-@@ -842,8 +851,6 @@ void dma_async_device_unregister(struct dma_device *device);
- void dma_run_dependencies(struct dma_async_tx_descriptor *tx);
- struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type);
- #define dma_request_channel(mask, x, y) __dma_request_channel(&(mask), x, y)
--struct dma_chan *__dma_request_channel(dma_cap_mask_t *mask, dma_filter_fn fn, void *fn_param);
--void dma_release_channel(struct dma_chan *chan);
- 
- /* --- Helper iov-locking functions --- */
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch b/recipes-kernel/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch
deleted file mode 100644
index b1b8401..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 99ce7fb9211326fed836b7dee035f8a4b1df0250 Mon Sep 17 00:00:00 2001
-From: Andy Walls <awalls at md.metrocast.net>
-Date: Sun, 5 Dec 2010 19:42:30 -0300
-Subject: [PATCH 50/65] cx25840: Prevent device probe failure due to volume control ERANGE error
-
-This patch fixes a regression that crept into 2.6.36.
-
-The volume control scale in the cx25840 driver has an unusual mapping
-from register values to v4l2 volume control values.  Enforce the mapping
-limits, so that the default volume control setting does not fall out of
-bounds to prevent the cx25840 module device probe from failing.
-
-Signed-off-by: Andy Walls <awalls at md.metrocast.net>
-Cc: Hans Verkuil <hverkuil at xs4all.nl>
-Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
----
- drivers/media/video/cx25840/cx25840-core.c |   19 +++++++++++++++++--
- 1 files changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
-index dfb198d..f164618 100644
---- a/drivers/media/video/cx25840/cx25840-core.c
-+++ b/drivers/media/video/cx25840/cx25840-core.c
-@@ -1989,8 +1989,23 @@ static int cx25840_probe(struct i2c_client *client,
- 	v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
- 			V4L2_CID_HUE, -128, 127, 1, 0);
- 	if (!is_cx2583x(state)) {
--		default_volume = 228 - cx25840_read(client, 0x8d4);
--		default_volume = ((default_volume / 2) + 23) << 9;
-+		default_volume = cx25840_read(client, 0x8d4);
-+		/*
-+		 * Enforce the legacy PVR-350/MSP3400 to PVR-150/CX25843 volume
-+		 * scale mapping limits to avoid -ERANGE errors when
-+		 * initializing the volume control
-+		 */
-+		if (default_volume > 228) {
-+			/* Bottom out at -96 dB, v4l2 vol range 0x2e00-0x2fff */
-+			default_volume = 228;
-+			cx25840_write(client, 0x8d4, 228);
-+		}
-+		else if (default_volume < 20) {
-+			/* Top out at + 8 dB, v4l2 vol range 0xfe00-0xffff */
-+			default_volume = 20;
-+			cx25840_write(client, 0x8d4, 20);
-+		}
-+		default_volume = (((228 - default_volume) >> 1) + 23) << 9;
- 
- 		state->volume = v4l2_ctrl_new_std(&state->hdl,
- 			&cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_VOLUME,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch b/recipes-kernel/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch
deleted file mode 100644
index 792fe44..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch
+++ /dev/null
@@ -1,518 +0,0 @@
-From 2d2e6426126f420da1df0e4c2b37069e00aefdb8 Mon Sep 17 00:00:00 2001
-From: Mauro Carvalho Chehab <mchehab at redhat.com>
-Date: Mon, 3 Jan 2011 09:09:56 -0200
-Subject: [PATCH 51/65] wm8775: Revert changeset fcb9757333 to avoid a regression
-
-It seems that cx88 and ivtv use wm8775 on some different modes. The
-patch that added support for a board with wm8775 broke ivtv boards with
-this device. As we're too close to release 2.6.37, let's just revert
-it.
-
-Reported-by: Andy Walls <awalls at md.metrocast.net>
-Reported-by: Eric Sharkey <eric at lisaneric.org>
-Reported-by: Auric <auric at aanet.com.au>
-Reported by: David Gesswein <djg at pdp8online.com>
-Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
----
- drivers/media/video/cx88/cx88-alsa.c  |   99 ++++---------------------------
- drivers/media/video/cx88/cx88-cards.c |    7 ++
- drivers/media/video/cx88/cx88-video.c |   27 +--------
- drivers/media/video/cx88/cx88.h       |    6 +-
- drivers/media/video/wm8775.c          |  104 ++++++++++++--------------------
- include/media/wm8775.h                |    3 -
- 6 files changed, 61 insertions(+), 185 deletions(-)
-
-diff --git a/drivers/media/video/cx88/cx88-alsa.c b/drivers/media/video/cx88/cx88-alsa.c
-index 4aaa47c..54b7fcd 100644
---- a/drivers/media/video/cx88/cx88-alsa.c
-+++ b/drivers/media/video/cx88/cx88-alsa.c
-@@ -40,7 +40,6 @@
- #include <sound/control.h>
- #include <sound/initval.h>
- #include <sound/tlv.h>
--#include <media/wm8775.h>
- 
- #include "cx88.h"
- #include "cx88-reg.h"
-@@ -587,47 +586,26 @@ static int snd_cx88_volume_put(struct snd_kcontrol *kcontrol,
- 	int left, right, v, b;
- 	int changed = 0;
- 	u32 old;
--	struct v4l2_control client_ctl;
--
--	/* Pass volume & balance onto any WM8775 */
--	if (value->value.integer.value[0] >= value->value.integer.value[1]) {
--		v = value->value.integer.value[0] << 10;
--		b = value->value.integer.value[0] ?
--			(0x8000 * value->value.integer.value[1]) / value->value.integer.value[0] :
--			0x8000;
--	} else {
--		v = value->value.integer.value[1] << 10;
--		b = value->value.integer.value[1] ?
--		0xffff - (0x8000 * value->value.integer.value[0]) / value->value.integer.value[1] :
--		0x8000;
--	}
--	client_ctl.value = v;
--	client_ctl.id = V4L2_CID_AUDIO_VOLUME;
--	call_hw(core, WM8775_GID, core, s_ctrl, &client_ctl);
--
--	client_ctl.value = b;
--	client_ctl.id = V4L2_CID_AUDIO_BALANCE;
--	call_hw(core, WM8775_GID, core, s_ctrl, &client_ctl);
- 
- 	left = value->value.integer.value[0] & 0x3f;
- 	right = value->value.integer.value[1] & 0x3f;
- 	b = right - left;
- 	if (b < 0) {
--		v = 0x3f - left;
--		b = (-b) | 0x40;
-+	    v = 0x3f - left;
-+	    b = (-b) | 0x40;
- 	} else {
--		v = 0x3f - right;
-+	    v = 0x3f - right;
- 	}
- 	/* Do we really know this will always be called with IRQs on? */
- 	spin_lock_irq(&chip->reg_lock);
- 	old = cx_read(AUD_VOL_CTL);
- 	if (v != (old & 0x3f)) {
--		cx_swrite(SHADOW_AUD_VOL_CTL, AUD_VOL_CTL, (old & ~0x3f) | v);
--		changed = 1;
-+	    cx_write(AUD_VOL_CTL, (old & ~0x3f) | v);
-+	    changed = 1;
- 	}
--	if ((cx_read(AUD_BAL_CTL) & 0x7f) != b) {
--		cx_write(AUD_BAL_CTL, b);
--		changed = 1;
-+	if (cx_read(AUD_BAL_CTL) != b) {
-+	    cx_write(AUD_BAL_CTL, b);
-+	    changed = 1;
- 	}
- 	spin_unlock_irq(&chip->reg_lock);
- 
-@@ -640,7 +618,7 @@ static const struct snd_kcontrol_new snd_cx88_volume = {
- 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
- 	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
- 		  SNDRV_CTL_ELEM_ACCESS_TLV_READ,
--	.name = "Analog-TV Volume",
-+	.name = "Playback Volume",
- 	.info = snd_cx88_volume_info,
- 	.get = snd_cx88_volume_get,
- 	.put = snd_cx88_volume_put,
-@@ -671,14 +649,7 @@ static int snd_cx88_switch_put(struct snd_kcontrol *kcontrol,
- 	vol = cx_read(AUD_VOL_CTL);
- 	if (value->value.integer.value[0] != !(vol & bit)) {
- 		vol ^= bit;
--		cx_swrite(SHADOW_AUD_VOL_CTL, AUD_VOL_CTL, vol);
--		/* Pass mute onto any WM8775 */
--		if ((1<<6) == bit) {
--			struct v4l2_control client_ctl;
--			client_ctl.value = 0 != (vol & bit);
--			client_ctl.id = V4L2_CID_AUDIO_MUTE;
--			call_hw(core, WM8775_GID, core, s_ctrl, &client_ctl);
--		}
-+		cx_write(AUD_VOL_CTL, vol);
- 		ret = 1;
- 	}
- 	spin_unlock_irq(&chip->reg_lock);
-@@ -687,7 +658,7 @@ static int snd_cx88_switch_put(struct snd_kcontrol *kcontrol,
- 
- static const struct snd_kcontrol_new snd_cx88_dac_switch = {
- 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
--	.name = "Audio-Out Switch",
-+	.name = "Playback Switch",
- 	.info = snd_ctl_boolean_mono_info,
- 	.get = snd_cx88_switch_get,
- 	.put = snd_cx88_switch_put,
-@@ -696,49 +667,13 @@ static const struct snd_kcontrol_new snd_cx88_dac_switch = {
- 
- static const struct snd_kcontrol_new snd_cx88_source_switch = {
- 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
--	.name = "Analog-TV Switch",
-+	.name = "Capture Switch",
- 	.info = snd_ctl_boolean_mono_info,
- 	.get = snd_cx88_switch_get,
- 	.put = snd_cx88_switch_put,
- 	.private_value = (1<<6),
- };
- 
--static int snd_cx88_alc_get(struct snd_kcontrol *kcontrol,
--			       struct snd_ctl_elem_value *value)
--{
--	snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol);
--	struct cx88_core *core = chip->core;
--	struct v4l2_control client_ctl;
--
--	client_ctl.id = V4L2_CID_AUDIO_LOUDNESS;
--	call_hw(core, WM8775_GID, core, g_ctrl, &client_ctl);
--	value->value.integer.value[0] = client_ctl.value ? 1 : 0;
--
--	return 0;
--}
--
--static int snd_cx88_alc_put(struct snd_kcontrol *kcontrol,
--				       struct snd_ctl_elem_value *value)
--{
--	snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol);
--	struct cx88_core *core = chip->core;
--	struct v4l2_control client_ctl;
--
--	client_ctl.value = 0 != value->value.integer.value[0];
--	client_ctl.id = V4L2_CID_AUDIO_LOUDNESS;
--	call_hw(core, WM8775_GID, core, s_ctrl, &client_ctl);
--
--	return 0;
--}
--
--static struct snd_kcontrol_new snd_cx88_alc_switch = {
--	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
--	.name = "Line-In ALC Switch",
--	.info = snd_ctl_boolean_mono_info,
--	.get = snd_cx88_alc_get,
--	.put = snd_cx88_alc_put,
--};
--
- /****************************************************************************
- 			Basic Flow for Sound Devices
-  ****************************************************************************/
-@@ -860,7 +795,6 @@ static int __devinit cx88_audio_initdev(struct pci_dev *pci,
- {
- 	struct snd_card  *card;
- 	snd_cx88_card_t  *chip;
--	struct v4l2_subdev *sd;
- 	int              err;
- 
- 	if (devno >= SNDRV_CARDS)
-@@ -896,15 +830,6 @@ static int __devinit cx88_audio_initdev(struct pci_dev *pci,
- 	if (err < 0)
- 		goto error;
- 
--	/* If there's a wm8775 then add a Line-In ALC switch */
--	list_for_each_entry(sd, &chip->core->v4l2_dev.subdevs, list) {
--		if (WM8775_GID == sd->grp_id) {
--			snd_ctl_add(card, snd_ctl_new1(&snd_cx88_alc_switch,
--						       chip));
--			break;
--		}
--	}
--
- 	strcpy (card->driver, "CX88x");
- 	sprintf(card->shortname, "Conexant CX%x", pci->device);
- 	sprintf(card->longname, "%s at %#llx",
-diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
-index 9b9e169..0ccc2af 100644
---- a/drivers/media/video/cx88/cx88-cards.c
-+++ b/drivers/media/video/cx88/cx88-cards.c
-@@ -1007,15 +1007,22 @@ static const struct cx88_board cx88_boards[] = {
- 		.radio_type	= UNSET,
- 		.tuner_addr	= ADDR_UNSET,
- 		.radio_addr	= ADDR_UNSET,
-+		.audio_chip = V4L2_IDENT_WM8775,
- 		.input		= {{
- 			.type	= CX88_VMUX_DVB,
- 			.vmux	= 0,
-+			/* 2: Line-In */
-+			.audioroute = 2,
- 		},{
- 			.type	= CX88_VMUX_COMPOSITE1,
- 			.vmux	= 1,
-+			/* 2: Line-In */
-+			.audioroute = 2,
- 		},{
- 			.type	= CX88_VMUX_SVIDEO,
- 			.vmux	= 2,
-+			/* 2: Line-In */
-+			.audioroute = 2,
- 		}},
- 		.mpeg           = CX88_MPEG_DVB,
- 	},
-diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c
-index 62cea95..d9249e5 100644
---- a/drivers/media/video/cx88/cx88-video.c
-+++ b/drivers/media/video/cx88/cx88-video.c
-@@ -40,7 +40,6 @@
- #include "cx88.h"
- #include <media/v4l2-common.h>
- #include <media/v4l2-ioctl.h>
--#include <media/wm8775.h>
- 
- MODULE_DESCRIPTION("v4l2 driver module for cx2388x based TV cards");
- MODULE_AUTHOR("Gerd Knorr <kraxel at bytesex.org> [SuSE Labs]");
-@@ -977,7 +976,6 @@ int cx88_set_control(struct cx88_core *core, struct v4l2_control *ctl)
- 	const struct cx88_ctrl *c = NULL;
- 	u32 value,mask;
- 	int i;
--	struct v4l2_control client_ctl;
- 
- 	for (i = 0; i < CX8800_CTLS; i++) {
- 		if (cx8800_ctls[i].v.id == ctl->id) {
-@@ -991,27 +989,6 @@ int cx88_set_control(struct cx88_core *core, struct v4l2_control *ctl)
- 		ctl->value = c->v.minimum;
- 	if (ctl->value > c->v.maximum)
- 		ctl->value = c->v.maximum;
--
--	/* Pass changes onto any WM8775 */
--	client_ctl.id = ctl->id;
--	switch (ctl->id) {
--	case V4L2_CID_AUDIO_MUTE:
--		client_ctl.value = ctl->value;
--		break;
--	case V4L2_CID_AUDIO_VOLUME:
--		client_ctl.value = (ctl->value) ?
--			(0x90 + ctl->value) << 8 : 0;
--		break;
--	case V4L2_CID_AUDIO_BALANCE:
--		client_ctl.value = ctl->value << 9;
--		break;
--	default:
--		client_ctl.id = 0;
--		break;
--	}
--	if (client_ctl.id)
--		call_hw(core, WM8775_GID, core, s_ctrl, &client_ctl);
--
- 	mask=c->mask;
- 	switch (ctl->id) {
- 	case V4L2_CID_AUDIO_BALANCE:
-@@ -1558,9 +1535,7 @@ static int radio_queryctrl (struct file *file, void *priv,
- 	if (c->id <  V4L2_CID_BASE ||
- 		c->id >= V4L2_CID_LASTP1)
- 		return -EINVAL;
--	if (c->id == V4L2_CID_AUDIO_MUTE ||
--		c->id == V4L2_CID_AUDIO_VOLUME ||
--		c->id == V4L2_CID_AUDIO_BALANCE) {
-+	if (c->id == V4L2_CID_AUDIO_MUTE) {
- 		for (i = 0; i < CX8800_CTLS; i++) {
- 			if (cx8800_ctls[i].v.id == c->id)
- 				break;
-diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
-index e8c732e..c9981e7 100644
---- a/drivers/media/video/cx88/cx88.h
-+++ b/drivers/media/video/cx88/cx88.h
-@@ -398,19 +398,17 @@ static inline struct cx88_core *to_core(struct v4l2_device *v4l2_dev)
- 	return container_of(v4l2_dev, struct cx88_core, v4l2_dev);
- }
- 
--#define call_hw(core, grpid, o, f, args...) \
-+#define call_all(core, o, f, args...) 				\
- 	do {							\
- 		if (!core->i2c_rc) {				\
- 			if (core->gate_ctrl)			\
- 				core->gate_ctrl(core, 1);	\
--			v4l2_device_call_all(&core->v4l2_dev, grpid, o, f, ##args); \
-+			v4l2_device_call_all(&core->v4l2_dev, 0, o, f, ##args); \
- 			if (core->gate_ctrl)			\
- 				core->gate_ctrl(core, 0);	\
- 		}						\
- 	} while (0)
- 
--#define call_all(core, o, f, args...) call_hw(core, 0, o, f, ##args)
--
- struct cx8800_dev;
- struct cx8802_dev;
- 
-diff --git a/drivers/media/video/wm8775.c b/drivers/media/video/wm8775.c
-index 1355256..fe8ef64 100644
---- a/drivers/media/video/wm8775.c
-+++ b/drivers/media/video/wm8775.c
-@@ -35,7 +35,6 @@
- #include <media/v4l2-device.h>
- #include <media/v4l2-chip-ident.h>
- #include <media/v4l2-ctrls.h>
--#include <media/wm8775.h>
- 
- MODULE_DESCRIPTION("wm8775 driver");
- MODULE_AUTHOR("Ulf Eklund, Hans Verkuil");
-@@ -51,16 +50,10 @@ enum {
- 	TOT_REGS
- };
- 
--#define ALC_HOLD 0x85 /* R17: use zero cross detection, ALC hold time 42.6 ms */
--#define ALC_EN 0x100  /* R17: ALC enable */
--
- struct wm8775_state {
- 	struct v4l2_subdev sd;
- 	struct v4l2_ctrl_handler hdl;
- 	struct v4l2_ctrl *mute;
--	struct v4l2_ctrl *vol;
--	struct v4l2_ctrl *bal;
--	struct v4l2_ctrl *loud;
- 	u8 input;		/* Last selected input (0-0xf) */
- };
- 
-@@ -92,30 +85,6 @@ static int wm8775_write(struct v4l2_subdev *sd, int reg, u16 val)
- 	return -1;
- }
- 
--static void wm8775_set_audio(struct v4l2_subdev *sd, int quietly)
--{
--	struct wm8775_state *state = to_state(sd);
--	u8 vol_l, vol_r;
--	int muted = 0 != state->mute->val;
--	u16 volume = (u16)state->vol->val;
--	u16 balance = (u16)state->bal->val;
--
--	/* normalize ( 65535 to 0 -> 255 to 0 (+24dB to -103dB) ) */
--	vol_l = (min(65536 - balance, 32768) * volume) >> 23;
--	vol_r = (min(balance, (u16)32768) * volume) >> 23;
--
--	/* Mute */
--	if (muted || quietly)
--		wm8775_write(sd, R21, 0x0c0 | state->input);
--
--	wm8775_write(sd, R14, vol_l | 0x100); /* 0x100= Left channel ADC zero cross enable */
--	wm8775_write(sd, R15, vol_r | 0x100); /* 0x100= Right channel ADC zero cross enable */
--
--	/* Un-mute */
--	if (!muted)
--		wm8775_write(sd, R21, state->input);
--}
--
- static int wm8775_s_routing(struct v4l2_subdev *sd,
- 			    u32 input, u32 output, u32 config)
- {
-@@ -133,26 +102,25 @@ static int wm8775_s_routing(struct v4l2_subdev *sd,
- 	state->input = input;
- 	if (!v4l2_ctrl_g_ctrl(state->mute))
- 		return 0;
--	if (!v4l2_ctrl_g_ctrl(state->vol))
--		return 0;
--	if (!v4l2_ctrl_g_ctrl(state->bal))
--		return 0;
--	wm8775_set_audio(sd, 1);
-+	wm8775_write(sd, R21, 0x0c0);
-+	wm8775_write(sd, R14, 0x1d4);
-+	wm8775_write(sd, R15, 0x1d4);
-+	wm8775_write(sd, R21, 0x100 + state->input);
- 	return 0;
- }
- 
- static int wm8775_s_ctrl(struct v4l2_ctrl *ctrl)
- {
- 	struct v4l2_subdev *sd = to_sd(ctrl);
-+	struct wm8775_state *state = to_state(sd);
- 
- 	switch (ctrl->id) {
- 	case V4L2_CID_AUDIO_MUTE:
--	case V4L2_CID_AUDIO_VOLUME:
--	case V4L2_CID_AUDIO_BALANCE:
--		wm8775_set_audio(sd, 0);
--		return 0;
--	case V4L2_CID_AUDIO_LOUDNESS:
--		wm8775_write(sd, R17, (ctrl->val ? ALC_EN : 0) | ALC_HOLD);
-+		wm8775_write(sd, R21, 0x0c0);
-+		wm8775_write(sd, R14, 0x1d4);
-+		wm8775_write(sd, R15, 0x1d4);
-+		if (!ctrl->val)
-+			wm8775_write(sd, R21, 0x100 + state->input);
- 		return 0;
- 	}
- 	return -EINVAL;
-@@ -176,7 +144,16 @@ static int wm8775_log_status(struct v4l2_subdev *sd)
- 
- static int wm8775_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *freq)
- {
--	wm8775_set_audio(sd, 0);
-+	struct wm8775_state *state = to_state(sd);
-+
-+	/* If I remove this, then it can happen that I have no
-+	   sound the first time I tune from static to a valid channel.
-+	   It's difficult to reproduce and is almost certainly related
-+	   to the zero cross detect circuit. */
-+	wm8775_write(sd, R21, 0x0c0);
-+	wm8775_write(sd, R14, 0x1d4);
-+	wm8775_write(sd, R15, 0x1d4);
-+	wm8775_write(sd, R21, 0x100 + state->input);
- 	return 0;
- }
- 
-@@ -226,7 +203,6 @@ static int wm8775_probe(struct i2c_client *client,
- {
- 	struct wm8775_state *state;
- 	struct v4l2_subdev *sd;
--	int err;
- 
- 	/* Check if the adapter supports the needed features */
- 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
-@@ -240,21 +216,15 @@ static int wm8775_probe(struct i2c_client *client,
- 		return -ENOMEM;
- 	sd = &state->sd;
- 	v4l2_i2c_subdev_init(sd, client, &wm8775_ops);
--	sd->grp_id = WM8775_GID; /* subdev group id */
- 	state->input = 2;
- 
--	v4l2_ctrl_handler_init(&state->hdl, 4);
-+	v4l2_ctrl_handler_init(&state->hdl, 1);
- 	state->mute = v4l2_ctrl_new_std(&state->hdl, &wm8775_ctrl_ops,
- 			V4L2_CID_AUDIO_MUTE, 0, 1, 1, 0);
--	state->vol = v4l2_ctrl_new_std(&state->hdl, &wm8775_ctrl_ops,
--			V4L2_CID_AUDIO_VOLUME, 0, 65535, (65535+99)/100, 0xCF00); /* 0dB*/
--	state->bal = v4l2_ctrl_new_std(&state->hdl, &wm8775_ctrl_ops,
--			V4L2_CID_AUDIO_BALANCE, 0, 65535, (65535+99)/100, 32768);
--	state->loud = v4l2_ctrl_new_std(&state->hdl, &wm8775_ctrl_ops,
--			V4L2_CID_AUDIO_LOUDNESS, 0, 1, 1, 1);
- 	sd->ctrl_handler = &state->hdl;
--	err = state->hdl.error;
--	if (err) {
-+	if (state->hdl.error) {
-+		int err = state->hdl.error;
-+
- 		v4l2_ctrl_handler_free(&state->hdl);
- 		kfree(state);
- 		return err;
-@@ -266,25 +236,29 @@ static int wm8775_probe(struct i2c_client *client,
- 	wm8775_write(sd, R23, 0x000);
- 	/* Disable zero cross detect timeout */
- 	wm8775_write(sd, R7, 0x000);
--	/* HPF enable, I2S mode, 24-bit */
--	wm8775_write(sd, R11, 0x022);
-+	/* Left justified, 24-bit mode */
-+	wm8775_write(sd, R11, 0x021);
- 	/* Master mode, clock ratio 256fs */
- 	wm8775_write(sd, R12, 0x102);
- 	/* Powered up */
- 	wm8775_write(sd, R13, 0x000);
--	/* ALC stereo, ALC target level -5dB FS, ALC max gain +8dB */
--	wm8775_write(sd, R16, 0x1bb);
--	/* Set ALC mode and hold time */
--	wm8775_write(sd, R17, (state->loud->val ? ALC_EN : 0) | ALC_HOLD);
-+	/* ADC gain +2.5dB, enable zero cross */
-+	wm8775_write(sd, R14, 0x1d4);
-+	/* ADC gain +2.5dB, enable zero cross */
-+	wm8775_write(sd, R15, 0x1d4);
-+	/* ALC Stereo, ALC target level -1dB FS max gain +8dB */
-+	wm8775_write(sd, R16, 0x1bf);
-+	/* Enable gain control, use zero cross detection,
-+	   ALC hold time 42.6 ms */
-+	wm8775_write(sd, R17, 0x185);
- 	/* ALC gain ramp up delay 34 s, ALC gain ramp down delay 33 ms */
- 	wm8775_write(sd, R18, 0x0a2);
- 	/* Enable noise gate, threshold -72dBfs */
- 	wm8775_write(sd, R19, 0x005);
--	/* Transient window 4ms, ALC min gain -5dB  */
--	wm8775_write(sd, R20, 0x0fb);
--
--	wm8775_set_audio(sd, 1);      /* set volume/mute/mux */
--
-+	/* Transient window 4ms, lower PGA gain limit -1dB */
-+	wm8775_write(sd, R20, 0x07a);
-+	/* LRBOTH = 1, use input 2. */
-+	wm8775_write(sd, R21, 0x102);
- 	return 0;
- }
- 
-diff --git a/include/media/wm8775.h b/include/media/wm8775.h
-index a1c4d41..60739c5 100644
---- a/include/media/wm8775.h
-+++ b/include/media/wm8775.h
-@@ -32,7 +32,4 @@
- #define WM8775_AIN3 4
- #define WM8775_AIN4 8
- 
--/* subdev group ID */
--#define WM8775_GID (1 << 0)
--
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch b/recipes-kernel/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch
deleted file mode 100644
index f807099..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 002eb3b2ab46fef443a2e40c52255e1c30b83704 Mon Sep 17 00:00:00 2001
-From: Hans Verkuil <hverkuil at xs4all.nl>
-Date: Sat, 18 Dec 2010 09:59:51 -0300
-Subject: [PATCH 52/65] em28xx: radio_fops should also use unlocked_ioctl
-
-em28xx uses core assisted locking, so it shouldn't use .ioctl.
-The .ioctl callback was replaced by .unlocked_ioctl for video nodes,
-but not for radio nodes. This is now corrected.
-
-Signed-off-by: Hans Verkuil <hverkuil at xs4all.nl>
-Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
----
- drivers/media/video/em28xx/em28xx-video.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
-index 908e3bc..2c30072 100644
---- a/drivers/media/video/em28xx/em28xx-video.c
-+++ b/drivers/media/video/em28xx/em28xx-video.c
-@@ -2377,7 +2377,7 @@ static const struct v4l2_file_operations radio_fops = {
- 	.owner         = THIS_MODULE,
- 	.open          = em28xx_v4l2_open,
- 	.release       = em28xx_v4l2_close,
--	.ioctl	       = video_ioctl2,
-+	.unlocked_ioctl = video_ioctl2,
- };
- 
- static const struct v4l2_ioctl_ops radio_ioctl_ops = {
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch b/recipes-kernel/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch
deleted file mode 100644
index dc5522d..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From b376276870006eabba46427b79a3f3be70b3e3ea Mon Sep 17 00:00:00 2001
-From: Robert Richter <robert.richter at amd.com>
-Date: Mon, 3 Jan 2011 12:15:14 +0100
-Subject: [PATCH 53/65] arch/x86/oprofile/op_model_amd.c: Perform initialisation on a single CPU
-
-Disable preemption in init_ibs(). The function only checks the
-ibs capabilities and sets up pci devices (if necessary). It runs
-only on one cpu but operates with the local APIC and some MSRs,
-thus it is better to disable preemption.
-
-[    7.034377] BUG: using smp_processor_id() in preemptible [00000000] code: modprobe/483
-[    7.034385] caller is setup_APIC_eilvt+0x155/0x180
-[    7.034389] Pid: 483, comm: modprobe Not tainted 2.6.37-rc1-20101110+ #1
-[    7.034392] Call Trace:
-[    7.034400]  [<ffffffff812a2b72>] debug_smp_processor_id+0xd2/0xf0
-[    7.034404]  [<ffffffff8101e985>] setup_APIC_eilvt+0x155/0x180
-[ ... ]
-
-Addresses https://bugzilla.kernel.org/show_bug.cgi?id=22812
-
-Reported-by: <atswartz at gmail.com>
-Signed-off-by: Robert Richter <robert.richter at amd.com>
-Cc: oprofile-list at lists.sourceforge.net <oprofile-list at lists.sourceforge.net>
-Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Cc: Frederic Weisbecker <fweisbec at gmail.com>
-Cc: Rafael J. Wysocki <rjw at sisk.pl>
-Cc: Dan Carpenter <error27 at gmail.com>
-Cc: Andrew Morton <akpm at linux-foundation.org>
-Cc: <stable at kernel.org>         [2.6.37.x]
-LKML-Reference: <20110103111514.GM4739 at erda.amd.com>
-[ small cleanups ]
-Signed-off-by: Ingo Molnar <mingo at elte.hu>
----
- arch/x86/oprofile/op_model_amd.c |   24 ++++++++++++++++--------
- 1 files changed, 16 insertions(+), 8 deletions(-)
-
-diff --git a/arch/x86/oprofile/op_model_amd.c b/arch/x86/oprofile/op_model_amd.c
-index a011bcc..7d90d47 100644
---- a/arch/x86/oprofile/op_model_amd.c
-+++ b/arch/x86/oprofile/op_model_amd.c
-@@ -630,21 +630,29 @@ static int __init_ibs_nmi(void)
- 	return 0;
- }
- 
--/* initialize the APIC for the IBS interrupts if available */
-+/*
-+ * check and reserve APIC extended interrupt LVT offset for IBS if
-+ * available
-+ *
-+ * init_ibs() preforms implicitly cpu-local operations, so pin this
-+ * thread to its current CPU
-+ */
-+
- static void init_ibs(void)
- {
--	ibs_caps = get_ibs_caps();
-+	preempt_disable();
- 
-+	ibs_caps = get_ibs_caps();
- 	if (!ibs_caps)
--		return;
-+		goto out;
- 
--	if (__init_ibs_nmi()) {
-+	if (__init_ibs_nmi() < 0)
- 		ibs_caps = 0;
--		return;
--	}
-+	else
-+		printk(KERN_INFO "oprofile: AMD IBS detected (0x%08x)\n", ibs_caps);
- 
--	printk(KERN_INFO "oprofile: AMD IBS detected (0x%08x)\n",
--	       (unsigned)ibs_caps);
-+out:
-+	preempt_enable();
- }
- 
- static int (*create_arch_files)(struct super_block *sb, struct dentry *root);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch b/recipes-kernel/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch
deleted file mode 100644
index 09ed27c..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From ef44b2900e7bfd255e56ae9bd2ec03d2c13b780c Mon Sep 17 00:00:00 2001
-From: Frederic Weisbecker <fweisbec at gmail.com>
-Date: Mon, 3 Jan 2011 16:13:11 +0100
-Subject: [PATCH 54/65] perf: Fix callchain hit bad cast on ascii display
-
-ipchain__fprintf_graph() casts the number of hits in a branch as an
-int, which means we lose its highests bits.
-
-This results in meaningless number of callchain hits in perf.data
-that have a high number of hits recorded, typically those that have
-callchain branches hits appearing more than INT_MAX. This happens
-easily as those are pondered by the event period.
-
-Reported-by: Nick Piggin <npiggin at kernel.dk>
-Signed-off-by: Frederic Weisbecker <fweisbec at gmail.com>
-Cc: Ingo Molnar <mingo at elte.hu>
-Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
-Cc: Arnaldo Carvalho de Melo <acme at redhat.com>
-Cc: Paul Mackerras <paulus at samba.org>
----
- tools/perf/util/hist.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
-index 2022e87..76bcc35 100644
---- a/tools/perf/util/hist.c
-+++ b/tools/perf/util/hist.c
-@@ -356,7 +356,7 @@ static size_t ipchain__fprintf_graph_line(FILE *fp, int depth, int depth_mask,
- 
- static size_t ipchain__fprintf_graph(FILE *fp, struct callchain_list *chain,
- 				     int depth, int depth_mask, int period,
--				     u64 total_samples, int hits,
-+				     u64 total_samples, u64 hits,
- 				     int left_margin)
- {
- 	int i;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch b/recipes-kernel/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch
deleted file mode 100644
index 9a1f006..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 83c04c29567a2f57c4881c8c11bce2bd4bc0b0ab Mon Sep 17 00:00:00 2001
-From: Mike Rapoport <mike at compulab.co.il>
-Date: Wed, 29 Dec 2010 09:06:26 +0200
-Subject: [PATCH 55/65] ARM: it8152: add IT8152_LAST_IRQ definition to fix build error
-
-The commit 6ac6b817f3f4c23c5febd960d8deb343e13af5f3 (ARM: pxa: encode
-IRQ number into .nr_irqs) removed definition of ITE_LAST_IRQ which
-caused the following build error:
-
-CC      arch/arm/common/it8152.o
-arch/arm/common/it8152.c: In function 'it8152_init_irq':
-arch/arm/common/it8152.c:86: error: 'IT8152_LAST_IRQ' undeclared (first use in this function)
-arch/arm/common/it8152.c:86: error: (Each undeclared identifier is reported only once
-arch/arm/common/it8152.c:86: error: for each function it appears in.)
-make[2]: *** [arch/arm/common/it8152.o] Error 1
-
-Defining the IT8152_LAST_IRQ in the arch/arm/include/hardware/it8152.c
-fixes the build.
-
-Signed-off-by: Mike Rapoport <mike at compulab.co.il>
-Signed-off-by: Eric Miao <eric.y.miao at gmail.com>
----
- arch/arm/include/asm/hardware/it8152.h |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/include/asm/hardware/it8152.h b/arch/arm/include/asm/hardware/it8152.h
-index 21fa272..b2f95c7 100644
---- a/arch/arm/include/asm/hardware/it8152.h
-+++ b/arch/arm/include/asm/hardware/it8152.h
-@@ -76,6 +76,7 @@ extern unsigned long it8152_base_address;
-   IT8152_PD_IRQ(0)  Audio controller (ACR)
-  */
- #define IT8152_IRQ(x)   (IRQ_BOARD_START + (x))
-+#define IT8152_LAST_IRQ	(IRQ_BOARD_START + 40)
- 
- /* IRQ-sources in 3 groups - local devices, LPC (serial), and external PCI */
- #define IT8152_LD_IRQ_COUNT     9
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch b/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch
deleted file mode 100644
index 5ae9609..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From b7072ddc2682868372d060e1e25447e5c1aee007 Mon Sep 17 00:00:00 2001
-From: Aric D. Blumer <aric at sdgsystems.com>
-Date: Wed, 29 Dec 2010 11:18:29 -0500
-Subject: [PATCH 56/65] ARM: pxa: fix page table corruption on resume
-
-Before this patch, the following error would sometimes occur after a
-resume on pxa3xx:
-
-    /path/to/mm/memory.c:144: bad pmd 8040542e.
-
-The problem was that a temporary page table mapping was being improperly
-restored.
-
-The PXA3xx resume code creates a temporary mapping of resume_turn_on_mmu
-to avoid a prefetch abort.  The pxa3xx_resume_after_mmu code requires
-that the r1 register holding the address of this mapping not be
-modified, however, resume_turn_on_mmu does modify it. It is mostly
-correct in that r1 receives the base table address, but it may also
-get other bits in 13:0.  This results in pxa3xx_resume_after_mmu
-restoring the original mapping to the wrong place, corrupting memory
-and leaving the temporary mapping in place.
-
-Signed-off-by: Matt Reimer <mreimer at sdgsystems.com>
-Signed-off-by: Eric Miao <eric.y.miao at gmail.com>
----
- arch/arm/mach-pxa/sleep.S |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-pxa/sleep.S b/arch/arm/mach-pxa/sleep.S
-index 52c30b0..ae00811 100644
---- a/arch/arm/mach-pxa/sleep.S
-+++ b/arch/arm/mach-pxa/sleep.S
-@@ -353,8 +353,8 @@ resume_turn_on_mmu:
- 
- 	@ Let us ensure we jump to resume_after_mmu only when the mcr above
- 	@ actually took effect.  They call it the "cpwait" operation.
--	mrc	p15, 0, r1, c2, c0, 0		@ queue a dependency on CP15
--	sub	pc, r2, r1, lsr #32		@ jump to virtual addr
-+	mrc	p15, 0, r0, c2, c0, 0		@ queue a dependency on CP15
-+	sub	pc, r2, r0, lsr #32		@ jump to virtual addr
- 	nop
- 	nop
- 	nop
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch b/recipes-kernel/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch
deleted file mode 100644
index 9db691b..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From f14284bb4ad057377b4944bb3985352fe1079c60 Mon Sep 17 00:00:00 2001
-From: J. K. Cliburn <jcliburn at gmail.com>
-Date: Sat, 1 Jan 2011 05:02:12 +0000
-Subject: [PATCH 57/65] atl1: fix oops when changing tx/rx ring params
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Commit 3f5a2a713aad28480d86b0add00c68484b54febc zeroes out the statistics
-message block (SMB) and coalescing message block (CMB) when adapter ring
-resources are freed.  This is desirable behavior, but, as a side effect,
-the commit leads to an oops when atl1_set_ringparam() attempts to alter
-the number of rx or tx elements in the ring buffer (by using ethtool
--G, for example).  We don't want SMB or CMB to change during this
-operation.
-
-Modify atl1_set_ringparam() to preserve SMB and CMB when changing ring
-parameters.
-
-Cc: stable at kernel.org
-Signed-off-by: Jay Cliburn <jcliburn at gmail.com>
-Reported-by: Tõnu Raitviir <jussuf at linux.ee>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- drivers/net/atlx/atl1.c |   10 ++++++++++
- 1 files changed, 10 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
-index 5336310..3acf512 100644
---- a/drivers/net/atlx/atl1.c
-+++ b/drivers/net/atlx/atl1.c
-@@ -3504,6 +3504,8 @@ static int atl1_set_ringparam(struct net_device *netdev,
- 	struct atl1_rfd_ring rfd_old, rfd_new;
- 	struct atl1_rrd_ring rrd_old, rrd_new;
- 	struct atl1_ring_header rhdr_old, rhdr_new;
-+	struct atl1_smb smb;
-+	struct atl1_cmb cmb;
- 	int err;
- 
- 	tpd_old = adapter->tpd_ring;
-@@ -3544,11 +3546,19 @@ static int atl1_set_ringparam(struct net_device *netdev,
- 		adapter->rrd_ring = rrd_old;
- 		adapter->tpd_ring = tpd_old;
- 		adapter->ring_header = rhdr_old;
-+		/*
-+		 * Save SMB and CMB, since atl1_free_ring_resources
-+		 * will clear them.
-+		 */
-+		smb = adapter->smb;
-+		cmb = adapter->cmb;
- 		atl1_free_ring_resources(adapter);
- 		adapter->rfd_ring = rfd_new;
- 		adapter->rrd_ring = rrd_new;
- 		adapter->tpd_ring = tpd_new;
- 		adapter->ring_header = rhdr_new;
-+		adapter->smb = smb;
-+		adapter->cmb = cmb;
- 
- 		err = atl1_up(adapter);
- 		if (err)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch b/recipes-kernel/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch
deleted file mode 100644
index 857f506..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-From 87bd79394bd7f4b7e01199421aae0df5fb1910d0 Mon Sep 17 00:00:00 2001
-From: Tomas Winkler <tomas.winkler at intel.com>
-Date: Mon, 3 Jan 2011 11:26:08 -0800
-Subject: [PATCH 58/65] bridge: fix br_multicast_ipv6_rcv for paged skbs
-
-use pskb_may_pull to access ipv6 header correctly for paged skbs
-It was omitted in the bridge code leading to crash in blind
-__skb_pull
-
-since the skb is cloned undonditionally we also simplify the
-the exit path
-
-this fixes bug https://bugzilla.kernel.org/show_bug.cgi?id=25202
-
-Dec 15 14:36:40 User-PC hostapd: wlan0: STA 00:15:00:60:5d:34 IEEE 802.11: authenticated
-Dec 15 14:36:40 User-PC hostapd: wlan0: STA 00:15:00:60:5d:34 IEEE 802.11: associated (aid 2)
-Dec 15 14:36:40 User-PC hostapd: wlan0: STA 00:15:00:60:5d:34 RADIUS: starting accounting session 4D0608A3-00000005
-Dec 15 14:36:41 User-PC kernel: [175576.120287] ------------[ cut here ]------------
-Dec 15 14:36:41 User-PC kernel: [175576.120452] kernel BUG at include/linux/skbuff.h:1178!
-Dec 15 14:36:41 User-PC kernel: [175576.120609] invalid opcode: 0000 [#1] SMP
-Dec 15 14:36:41 User-PC kernel: [175576.120749] last sysfs file: /sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/uevent
-Dec 15 14:36:41 User-PC kernel: [175576.121035] Modules linked in: approvals binfmt_misc bridge stp llc parport_pc ppdev arc4 iwlagn snd_hda_codec_realtek iwlcore i915 snd_hda_intel mac80211 joydev snd_hda_codec snd_hwdep snd_pcm snd_seq_midi drm_kms_helper snd_rawmidi drm snd_seq_midi_event snd_seq snd_timer snd_seq_device cfg80211 eeepc_wmi usbhid psmouse intel_agp i2c_algo_bit intel_gtt uvcvideo agpgart videodev sparse_keymap snd shpchp v4l1_compat lp hid video serio_raw soundcore output snd_page_alloc ahci libahci atl1c
-Dec 15 14:36:41 User-PC kernel: [175576.122712]
-Dec 15 14:36:41 User-PC kernel: [175576.122769] Pid: 0, comm: kworker/0:0 Tainted: G        W   2.6.37-rc5-wl+ #3 1015PE/1016P
-Dec 15 14:36:41 User-PC kernel: [175576.123012] EIP: 0060:[<f83edd65>] EFLAGS: 00010283 CPU: 1
-Dec 15 14:36:41 User-PC kernel: [175576.123193] EIP is at br_multicast_rcv+0xc95/0xe1c [bridge]
-Dec 15 14:36:41 User-PC kernel: [175576.123362] EAX: 0000001c EBX: f5626318 ECX: 00000000 EDX: 00000000
-Dec 15 14:36:41 User-PC kernel: [175576.123550] ESI: ec512262 EDI: f5626180 EBP: f60b5ca0 ESP: f60b5bd8
-Dec 15 14:36:41 User-PC kernel: [175576.123737]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
-Dec 15 14:36:41 User-PC kernel: [175576.123902] Process kworker/0:0 (pid: 0, ti=f60b4000 task=f60a8000 task.ti=f60b0000)
-Dec 15 14:36:41 User-PC kernel: [175576.124137] Stack:
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  ec556500 f6d06800 f60b5be8 c01087d8 ec512262 00000030 00000024 f5626180
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  f572c200 ef463440 f5626300 3affffff f6d06dd0 e60766a4 000000c4 f6d06860
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  ffffffff ec55652c 00000001 f6d06844 f60b5c64 c0138264 c016e451 c013e47d
-Dec 15 14:36:41 User-PC kernel: [175576.124181] Call Trace:
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c01087d8>] ? sched_clock+0x8/0x10
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0138264>] ? enqueue_entity+0x174/0x440
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c016e451>] ? sched_clock_cpu+0x131/0x190
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c013e47d>] ? select_task_rq_fair+0x2ad/0x730
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0524fc1>] ? nf_iterate+0x71/0x90
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f83e4914>] ? br_handle_frame_finish+0x184/0x220 [bridge]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f83e4790>] ? br_handle_frame_finish+0x0/0x220 [bridge]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f83e46e9>] ? br_handle_frame+0x189/0x230 [bridge]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f83e4790>] ? br_handle_frame_finish+0x0/0x220 [bridge]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f83e4560>] ? br_handle_frame+0x0/0x230 [bridge]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c04ff026>] ? __netif_receive_skb+0x1b6/0x5b0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c04f7a30>] ? skb_copy_bits+0x110/0x210
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0503a7f>] ? netif_receive_skb+0x6f/0x80
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f82cb74c>] ? ieee80211_deliver_skb+0x8c/0x1a0 [mac80211]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f82cc836>] ? ieee80211_rx_handlers+0xeb6/0x1aa0 [mac80211]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c04ff1f0>] ? __netif_receive_skb+0x380/0x5b0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c016e242>] ? sched_clock_local+0xb2/0x190
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c012b688>] ? default_spin_lock_flags+0x8/0x10
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c05d83df>] ? _raw_spin_lock_irqsave+0x2f/0x50
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f82cd621>] ? ieee80211_prepare_and_rx_handle+0x201/0xa90 [mac80211]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f82ce154>] ? ieee80211_rx+0x2a4/0x830 [mac80211]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f815a8d6>] ? iwl_update_stats+0xa6/0x2a0 [iwlcore]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f8499212>] ? iwlagn_rx_reply_rx+0x292/0x3b0 [iwlagn]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c05d83df>] ? _raw_spin_lock_irqsave+0x2f/0x50
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f8483697>] ? iwl_rx_handle+0xe7/0x350 [iwlagn]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<f8486ab7>] ? iwl_irq_tasklet+0xf7/0x5c0 [iwlagn]
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c01aece1>] ? __rcu_process_callbacks+0x201/0x2d0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0150d05>] ? tasklet_action+0xc5/0x100
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0150a07>] ? __do_softirq+0x97/0x1d0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c05d910c>] ? nmi_stack_correct+0x2f/0x34
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0150970>] ? __do_softirq+0x0/0x1d0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  <IRQ>
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c01508f5>] ? irq_exit+0x65/0x70
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c05df062>] ? do_IRQ+0x52/0xc0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c01036b0>] ? common_interrupt+0x30/0x38
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c03a1fc2>] ? intel_idle+0xc2/0x160
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c04daebb>] ? cpuidle_idle_call+0x6b/0x100
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c0101dea>] ? cpu_idle+0x8a/0xf0
-Dec 15 14:36:41 User-PC kernel: [175576.124181]  [<c05d2702>] ? start_secondary+0x1e8/0x1ee
-
-Cc: David Miller <davem at davemloft.net>
-Cc: Johannes Berg <johannes at sipsolutions.net>
-Cc: Stephen Hemminger <shemminger at vyatta.com>
-Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- net/bridge/br_multicast.c |   28 ++++++++++++++++++----------
- 1 files changed, 18 insertions(+), 10 deletions(-)
-
-diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
-index f19e347..543b326 100644
---- a/net/bridge/br_multicast.c
-+++ b/net/bridge/br_multicast.c
-@@ -1430,7 +1430,7 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
- 				 struct net_bridge_port *port,
- 				 struct sk_buff *skb)
- {
--	struct sk_buff *skb2 = skb;
-+	struct sk_buff *skb2;
- 	struct ipv6hdr *ip6h;
- 	struct icmp6hdr *icmp6h;
- 	u8 nexthdr;
-@@ -1469,15 +1469,15 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
- 	if (!skb2)
- 		return -ENOMEM;
- 
-+	err = -EINVAL;
-+	if (!pskb_may_pull(skb2, offset + sizeof(struct icmp6hdr)))
-+		goto out;
-+
- 	len -= offset - skb_network_offset(skb2);
- 
- 	__skb_pull(skb2, offset);
- 	skb_reset_transport_header(skb2);
- 
--	err = -EINVAL;
--	if (!pskb_may_pull(skb2, sizeof(*icmp6h)))
--		goto out;
--
- 	icmp6h = icmp6_hdr(skb2);
- 
- 	switch (icmp6h->icmp6_type) {
-@@ -1516,7 +1516,12 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
- 	switch (icmp6h->icmp6_type) {
- 	case ICMPV6_MGM_REPORT:
- 	    {
--		struct mld_msg *mld = (struct mld_msg *)icmp6h;
-+		struct mld_msg *mld;
-+		if (!pskb_may_pull(skb2, sizeof(*mld))) {
-+			err = -EINVAL;
-+			goto out;
-+		}
-+		mld = (struct mld_msg *)skb_transport_header(skb2);
- 		BR_INPUT_SKB_CB(skb2)->mrouters_only = 1;
- 		err = br_ip6_multicast_add_group(br, port, &mld->mld_mca);
- 		break;
-@@ -1529,15 +1534,18 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br,
- 		break;
- 	case ICMPV6_MGM_REDUCTION:
- 	    {
--		struct mld_msg *mld = (struct mld_msg *)icmp6h;
-+		struct mld_msg *mld;
-+		if (!pskb_may_pull(skb2, sizeof(*mld))) {
-+			err = -EINVAL;
-+			goto out;
-+		}
-+		mld = (struct mld_msg *)skb_transport_header(skb2);
- 		br_ip6_multicast_leave_group(br, port, &mld->mld_mca);
- 	    }
- 	}
- 
- out:
--	__skb_push(skb2, offset);
--	if (skb2 != skb)
--		kfree_skb(skb2);
-+	kfree_skb(skb2);
- 	return err;
- }
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch b/recipes-kernel/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch
deleted file mode 100644
index 26915ac..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From edb8dd77b87534a3cc6bf4e2a234216d2cc68f89 Mon Sep 17 00:00:00 2001
-From: Jan Beulich <JBeulich at novell.com>
-Date: Mon, 3 Jan 2011 15:07:02 +0000
-Subject: [PATCH 59/65] name_to_dev_t() must not call __init code
-
-The function can't be __init itself (being called from some sysfs
-handler), and hence none of the functions it calls can be either.
-
-Signed-off-by: Jan Beulich <jbeulich at novell.com>
-Acked-by: Randy Dunlap <randy.dunlap at oracle.com>
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- init/do_mounts.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/init/do_mounts.c b/init/do_mounts.c
-index 830aaec..2b54bef 100644
---- a/init/do_mounts.c
-+++ b/init/do_mounts.c
-@@ -93,7 +93,7 @@ no_match:
-  *
-  * Returns the matching dev_t on success or 0 on failure.
-  */
--static dev_t __init devt_from_partuuid(char *uuid_str)
-+static dev_t devt_from_partuuid(char *uuid_str)
- {
- 	dev_t res = 0;
- 	struct device *dev = NULL;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch b/recipes-kernel/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch
deleted file mode 100644
index ad0b8e1..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From ff26fe4db962b41b794fb81518b8e407093239d9 Mon Sep 17 00:00:00 2001
-From: Florian Westphal <fw at strlen.de>
-Date: Mon, 3 Jan 2011 04:16:28 +0000
-Subject: [PATCH 60/65] bridge: stp: ensure mac header is set
-
-commit bf9ae5386bca8836c16e69ab8fdbe46767d7452a
-(llc: use dev_hard_header) removed the
-skb_reset_mac_header call from llc_mac_hdr_init.
-
-This seems fine itself, but br_send_bpdu() invokes ebtables LOCAL_OUT.
-
-We oops in ebt_basic_match() because it assumes eth_hdr(skb) returns
-a meaningful result.
-
-Cc: acme at ghostprotocols.net
-References: https://bugzilla.kernel.org/show_bug.cgi?id=24532
-Signed-off-by: Florian Westphal <fw at strlen.de>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- net/bridge/br_stp_bpdu.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/net/bridge/br_stp_bpdu.c b/net/bridge/br_stp_bpdu.c
-index 35cf270..e3d7aef 100644
---- a/net/bridge/br_stp_bpdu.c
-+++ b/net/bridge/br_stp_bpdu.c
-@@ -50,6 +50,8 @@ static void br_send_bpdu(struct net_bridge_port *p,
- 
- 	llc_mac_hdr_init(skb, p->dev->dev_addr, p->br->group_addr);
- 
-+	skb_reset_mac_header(skb);
-+
- 	NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
- 		dev_queue_xmit);
- }
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch b/recipes-kernel/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch
deleted file mode 100644
index 5c37ce3..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 497d2c1cfa523a66bfea594791d8f2a50e5bb0aa Mon Sep 17 00:00:00 2001
-From: Mimi Zohar <zohar at linux.vnet.ibm.com>
-Date: Mon, 3 Jan 2011 14:59:10 -0800
-Subject: [PATCH 61/65] ima: fix add LSM rule bug
-
-If security_filter_rule_init() doesn't return a rule, then not everything
-is as fine as the return code implies.
-
-This bug only occurs when the LSM (eg. SELinux) is disabled at runtime.
-
-Adding an empty LSM rule causes ima_match_rules() to always succeed,
-ignoring any remaining rules.
-
- default IMA TCB policy:
-  # PROC_SUPER_MAGIC
-  dont_measure fsmagic=0x9fa0
-  # SYSFS_MAGIC
-  dont_measure fsmagic=0x62656572
-  # DEBUGFS_MAGIC
-  dont_measure fsmagic=0x64626720
-  # TMPFS_MAGIC
-  dont_measure fsmagic=0x01021994
-  # SECURITYFS_MAGIC
-  dont_measure fsmagic=0x73636673
-
-  < LSM specific rule >
-  dont_measure obj_type=var_log_t
-
-  measure func=BPRM_CHECK
-  measure func=FILE_MMAP mask=MAY_EXEC
-  measure func=FILE_CHECK mask=MAY_READ uid=0
-
-Thus without the patch, with the boot parameters 'tcb selinux=0', adding
-the above 'dont_measure obj_type=var_log_t' rule to the default IMA TCB
-measurement policy, would result in nothing being measured.  The patch
-prevents the default TCB policy from being replaced.
-
-Signed-off-by: Mimi Zohar <zohar at us.ibm.com>
-Cc: James Morris <jmorris at namei.org>
-Acked-by: Serge Hallyn <serge.hallyn at canonical.com>
-Cc: David Safford <safford at watson.ibm.com>
-Cc: <stable at kernel.org>
-Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- security/integrity/ima/ima_policy.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
-index aef8c0a..d661afb 100644
---- a/security/integrity/ima/ima_policy.c
-+++ b/security/integrity/ima/ima_policy.c
-@@ -253,6 +253,8 @@ static int ima_lsm_rule_init(struct ima_measure_rule_entry *entry,
- 	result = security_filter_rule_init(entry->lsm[lsm_rule].type,
- 					   Audit_equal, args,
- 					   &entry->lsm[lsm_rule].rule);
-+	if (!entry->lsm[lsm_rule].rule)
-+		return -EINVAL;
- 	return result;
- }
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch b/recipes-kernel/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch
deleted file mode 100644
index ecbbaa0..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 942dd5c14797f41c9e6d960ae95940ccdb7cb044 Mon Sep 17 00:00:00 2001
-From: Andrew Morton <akpm at linux-foundation.org>
-Date: Mon, 3 Jan 2011 14:59:11 -0800
-Subject: [PATCH 62/65] arch/mn10300/kernel/irq.c: fix build
-
-Addresses https://bugzilla.kernel.org/show_bug.cgi?id=25702
-
-Reported-by: Martin Ettl <ettl.martin at gmx.de>
-Cc: David Howells <dhowells at redhat.com>
-Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- arch/mn10300/kernel/irq.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/mn10300/kernel/irq.c b/arch/mn10300/kernel/irq.c
-index c2e4459..ac11754 100644
---- a/arch/mn10300/kernel/irq.c
-+++ b/arch/mn10300/kernel/irq.c
-@@ -459,7 +459,7 @@ void migrate_irqs(void)
- 			tmp = CROSS_GxICR(irq, new);
- 
- 			x &= GxICR_LEVEL | GxICR_ENABLE;
--			if (GxICR(irq) & GxICR_REQUEST) {
-+			if (GxICR(irq) & GxICR_REQUEST)
- 				x |= GxICR_REQUEST | GxICR_DETECT;
- 			CROSS_GxICR(irq, new) = x;
- 			tmp = CROSS_GxICR(irq, new);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch b/recipes-kernel/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch
deleted file mode 100644
index d7e9481..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 012cfd55bb9075c4697cc068ba0a8c0d0069433a Mon Sep 17 00:00:00 2001
-From: Christoph Hellwig <hch at lst.de>
-Date: Tue, 4 Jan 2011 07:14:24 +0100
-Subject: [PATCH 63/65] remove trim_fs method from Documentation/filesystems/Locking
-
-The ->trim_fs has been removed meanwhile, so remove it from the documentation
-as well.
-
-Signed-off-by: Christoph Hellwig <hch at lst.de>
-Reported-by: Ryusuke Konishi <konishi.ryusuke at lab.ntt.co.jp>
-Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
----
- Documentation/filesystems/Locking |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
-
-diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
-index 7686e76..33fa3e5 100644
---- a/Documentation/filesystems/Locking
-+++ b/Documentation/filesystems/Locking
-@@ -115,7 +115,6 @@ prototypes:
- 	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
- 	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
- 	int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
--	int (*trim_fs) (struct super_block *, struct fstrim_range *);
- 
- locking rules:
- 	All may block [not true, see below]
-@@ -138,7 +137,6 @@ show_options:		no		(namespace_sem)
- quota_read:		no		(see below)
- quota_write:		no		(see below)
- bdev_try_to_free_page:	no		(see below)
--trim_fs:		no
- 
- ->statfs() has s_umount (shared) when called by ustat(2) (native or
- compat), but that's an accident of bad API; s_umount is used to pin
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch b/recipes-kernel/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch
deleted file mode 100644
index 56e0091..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 1e3d23ed2eae8473568b34fdc323d2fec679616b Mon Sep 17 00:00:00 2001
-From: Joel Sing <jsing at google.com>
-Date: Mon, 3 Jan 2011 20:24:20 +0000
-Subject: [PATCH 64/65] ipv4/route.c: respect prefsrc for local routes
-
-The preferred source address is currently ignored for local routes,
-which results in all local connections having a src address that is the
-same as the local dst address. Fix this by respecting the preferred source
-address when it is provided for local routes.
-
-This bug can be demonstrated as follows:
-
- # ifconfig dummy0 192.168.0.1
- # ip route show table local | grep local.*dummy0
- local 192.168.0.1 dev dummy0  proto kernel  scope host  src 192.168.0.1
- # ip route change table local local 192.168.0.1 dev dummy0 \
-     proto kernel scope host src 127.0.0.1
- # ip route show table local | grep local.*dummy0
- local 192.168.0.1 dev dummy0  proto kernel  scope host  src 127.0.0.1
-
-We now establish a local connection and verify the source IP
-address selection:
-
- # nc -l 192.168.0.1 3128 &
- # nc 192.168.0.1 3128 &
- # netstat -ant | grep 192.168.0.1:3128.*EST
- tcp        0      0 192.168.0.1:3128        192.168.0.1:33228 ESTABLISHED
- tcp        0      0 192.168.0.1:33228       192.168.0.1:3128  ESTABLISHED
-
-Signed-off-by: Joel Sing <jsing at google.com>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- net/ipv4/route.c |    8 ++++++--
- 1 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/net/ipv4/route.c b/net/ipv4/route.c
-index df948b0..93bfd95 100644
---- a/net/ipv4/route.c
-+++ b/net/ipv4/route.c
-@@ -2649,8 +2649,12 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp,
- 	}
- 
- 	if (res.type == RTN_LOCAL) {
--		if (!fl.fl4_src)
--			fl.fl4_src = fl.fl4_dst;
-+		if (!fl.fl4_src) {
-+			if (res.fi->fib_prefsrc)
-+				fl.fl4_src = res.fi->fib_prefsrc;
-+			else
-+				fl.fl4_src = fl.fl4_dst;
-+		}
- 		dev_out = net->loopback_dev;
- 		fl.oif = dev_out->ifindex;
- 		res.fi = NULL;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/linus/0065-Linux-2.6.37.patch b/recipes-kernel/linux/linux-omap/linus/0065-Linux-2.6.37.patch
deleted file mode 100644
index f4f6c6b..0000000
--- a/recipes-kernel/linux/linux-omap/linus/0065-Linux-2.6.37.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 52aefa299da0c025c4e521f2a40a89c01aad5a17 Mon Sep 17 00:00:00 2001
-From: Linus Torvalds <torvalds at linux-foundation.org>
-Date: Tue, 4 Jan 2011 16:50:19 -0800
-Subject: [PATCH 65/65] Linux 2.6.37
-
----
- Makefile |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index e7c41f1..74b2555 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,7 +1,7 @@
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 37
--EXTRAVERSION = -rc8
-+EXTRAVERSION =
- NAME = Flesh-Eating Bats with Fangs
- 
- # *DOCUMENTATION*
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0001-v4l-Share-code-between-video_usercopy-and-video_ioct.patch b/recipes-kernel/linux/linux-omap/media/0001-v4l-Share-code-between-video_usercopy-and-video_ioct.patch
deleted file mode 100644
index f212020..0000000
--- a/recipes-kernel/linux/linux-omap/media/0001-v4l-Share-code-between-video_usercopy-and-video_ioct.patch
+++ /dev/null
@@ -1,297 +0,0 @@
-From d71c2e533be956a95e4ddde8b87f657ada3c9de3 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Mon, 12 Jul 2010 16:09:41 +0200
-Subject: [PATCH 01/43] v4l: Share code between video_usercopy and video_ioctl2
-
-The two functions are mostly identical. They handle the copy_from_user
-and copy_to_user operations related with V4L2 ioctls and call the real
-ioctl handler.
-
-Create a __video_usercopy function that implements the core of
-video_usercopy and video_ioctl2, and call that function from both.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/video/v4l2-ioctl.c |  218 ++++++++++++-------------------------
- 1 files changed, 71 insertions(+), 147 deletions(-)
-
-diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
-index dd9283f..1e01554 100644
---- a/drivers/media/video/v4l2-ioctl.c
-+++ b/drivers/media/video/v4l2-ioctl.c
-@@ -374,35 +374,62 @@ video_fix_command(unsigned int cmd)
- }
- #endif
- 
--/*
-- * Obsolete usercopy function - Should be removed soon
-- */
--long
--video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
-+/* In some cases, only a few fields are used as input, i.e. when the app sets
-+ * "index" and then the driver fills in the rest of the structure for the thing
-+ * with that index.  We only need to copy up the first non-input field.  */
-+static unsigned long cmd_input_size(unsigned int cmd)
-+{
-+	/* Size of structure up to and including 'field' */
-+#define CMDINSIZE(cmd, type, field)				\
-+	case VIDIOC_##cmd:					\
-+		return offsetof(struct v4l2_##type, field) +	\
-+			sizeof(((struct v4l2_##type *)0)->field);
-+
-+	switch (cmd) {
-+		CMDINSIZE(ENUM_FMT,		fmtdesc,	type);
-+		CMDINSIZE(G_FMT,		format,		type);
-+		CMDINSIZE(QUERYBUF,		buffer,		type);
-+		CMDINSIZE(G_PARM,		streamparm,	type);
-+		CMDINSIZE(ENUMSTD,		standard,	index);
-+		CMDINSIZE(ENUMINPUT,		input,		index);
-+		CMDINSIZE(G_CTRL,		control,	id);
-+		CMDINSIZE(G_TUNER,		tuner,		index);
-+		CMDINSIZE(QUERYCTRL,		queryctrl,	id);
-+		CMDINSIZE(QUERYMENU,		querymenu,	index);
-+		CMDINSIZE(ENUMOUTPUT,		output,		index);
-+		CMDINSIZE(G_MODULATOR,		modulator,	index);
-+		CMDINSIZE(G_FREQUENCY,		frequency,	tuner);
-+		CMDINSIZE(CROPCAP,		cropcap,	type);
-+		CMDINSIZE(G_CROP,		crop,		type);
-+		CMDINSIZE(ENUMAUDIO,		audio,		index);
-+		CMDINSIZE(ENUMAUDOUT,		audioout,	index);
-+		CMDINSIZE(ENCODER_CMD,		encoder_cmd,	flags);
-+		CMDINSIZE(TRY_ENCODER_CMD,	encoder_cmd,	flags);
-+		CMDINSIZE(G_SLICED_VBI_CAP,	sliced_vbi_cap,	type);
-+		CMDINSIZE(ENUM_FRAMESIZES,	frmsizeenum,	pixel_format);
-+		CMDINSIZE(ENUM_FRAMEINTERVALS,	frmivalenum,	height);
-+	default:
-+		return _IOC_SIZE(cmd);
-+	}
-+}
-+
-+static long
-+__video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
- 		v4l2_kioctl func)
- {
- 	char	sbuf[128];
- 	void    *mbuf = NULL;
--	void	*parg = NULL;
-+	void	*parg = (void *)arg;
- 	long	err  = -EINVAL;
- 	int     is_ext_ctrl;
- 	size_t  ctrls_size = 0;
- 	void __user *user_ptr = NULL;
- 
--#ifdef __OLD_VIDIOC_
--	cmd = video_fix_command(cmd);
--#endif
- 	is_ext_ctrl = (cmd == VIDIOC_S_EXT_CTRLS || cmd == VIDIOC_G_EXT_CTRLS ||
- 		       cmd == VIDIOC_TRY_EXT_CTRLS);
- 
- 	/*  Copy arguments into temp kernel buffer  */
--	switch (_IOC_DIR(cmd)) {
--	case _IOC_NONE:
--		parg = NULL;
--		break;
--	case _IOC_READ:
--	case _IOC_WRITE:
--	case (_IOC_WRITE | _IOC_READ):
-+	if (_IOC_DIR(cmd) != _IOC_NONE) {
- 		if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
- 			parg = sbuf;
- 		} else {
-@@ -414,11 +441,21 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
- 		}
- 
- 		err = -EFAULT;
--		if (_IOC_DIR(cmd) & _IOC_WRITE)
--			if (copy_from_user(parg, (void __user *)arg, _IOC_SIZE(cmd)))
-+		if (_IOC_DIR(cmd) & _IOC_WRITE) {
-+			unsigned long n = cmd_input_size(cmd);
-+
-+			if (copy_from_user(parg, (void __user *)arg, n))
- 				goto out;
--		break;
-+
-+			/* zero out anything we don't copy from userspace */
-+			if (n < _IOC_SIZE(cmd))
-+				memset((u8 *)parg + n, 0, _IOC_SIZE(cmd) - n);
-+		} else {
-+			/* read-only ioctl */
-+			memset(parg, 0, _IOC_SIZE(cmd));
-+		}
- 	}
-+
- 	if (is_ext_ctrl) {
- 		struct v4l2_ext_controls *p = parg;
- 
-@@ -440,7 +477,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
- 		}
- 	}
- 
--	/* call driver */
-+	/* Handles IOCTL */
- 	err = func(file, cmd, parg);
- 	if (err == -ENOIOCTLCMD)
- 		err = -EINVAL;
-@@ -469,6 +506,19 @@ out:
- 	kfree(mbuf);
- 	return err;
- }
-+
-+/*
-+ * Obsolete usercopy function - Should be removed soon
-+ */
-+long
-+video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
-+		v4l2_kioctl func)
-+{
-+#ifdef __OLD_VIDIOC_
-+	cmd = video_fix_command(cmd);
-+#endif
-+	return __video_usercopy(file, cmd, arg, func);
-+}
- EXPORT_SYMBOL(video_usercopy);
- 
- static void dbgbuf(unsigned int cmd, struct video_device *vfd,
-@@ -2041,138 +2091,12 @@ static long __video_do_ioctl(struct file *file,
- 	return ret;
- }
- 
--/* In some cases, only a few fields are used as input, i.e. when the app sets
-- * "index" and then the driver fills in the rest of the structure for the thing
-- * with that index.  We only need to copy up the first non-input field.  */
--static unsigned long cmd_input_size(unsigned int cmd)
--{
--	/* Size of structure up to and including 'field' */
--#define CMDINSIZE(cmd, type, field) 				\
--	case VIDIOC_##cmd: 					\
--		return offsetof(struct v4l2_##type, field) + 	\
--			sizeof(((struct v4l2_##type *)0)->field);
--
--	switch (cmd) {
--		CMDINSIZE(ENUM_FMT,		fmtdesc,	type);
--		CMDINSIZE(G_FMT,		format,		type);
--		CMDINSIZE(QUERYBUF,		buffer,		type);
--		CMDINSIZE(G_PARM,		streamparm,	type);
--		CMDINSIZE(ENUMSTD,		standard,	index);
--		CMDINSIZE(ENUMINPUT,		input,		index);
--		CMDINSIZE(G_CTRL,		control,	id);
--		CMDINSIZE(G_TUNER,		tuner,		index);
--		CMDINSIZE(QUERYCTRL,		queryctrl,	id);
--		CMDINSIZE(QUERYMENU,		querymenu,	index);
--		CMDINSIZE(ENUMOUTPUT,		output,		index);
--		CMDINSIZE(G_MODULATOR,		modulator,	index);
--		CMDINSIZE(G_FREQUENCY,		frequency,	tuner);
--		CMDINSIZE(CROPCAP,		cropcap,	type);
--		CMDINSIZE(G_CROP,		crop,		type);
--		CMDINSIZE(ENUMAUDIO,		audio, 		index);
--		CMDINSIZE(ENUMAUDOUT,		audioout, 	index);
--		CMDINSIZE(ENCODER_CMD,		encoder_cmd,	flags);
--		CMDINSIZE(TRY_ENCODER_CMD,	encoder_cmd,	flags);
--		CMDINSIZE(G_SLICED_VBI_CAP,	sliced_vbi_cap,	type);
--		CMDINSIZE(ENUM_FRAMESIZES,	frmsizeenum,	pixel_format);
--		CMDINSIZE(ENUM_FRAMEINTERVALS,	frmivalenum,	height);
--	default:
--		return _IOC_SIZE(cmd);
--	}
--}
--
- long video_ioctl2(struct file *file,
- 	       unsigned int cmd, unsigned long arg)
- {
--	char	sbuf[128];
--	void    *mbuf = NULL;
--	void	*parg = (void *)arg;
--	long	err  = -EINVAL;
--	int     is_ext_ctrl;
--	size_t  ctrls_size = 0;
--	void __user *user_ptr = NULL;
--
- #ifdef __OLD_VIDIOC_
- 	cmd = video_fix_command(cmd);
- #endif
--	is_ext_ctrl = (cmd == VIDIOC_S_EXT_CTRLS || cmd == VIDIOC_G_EXT_CTRLS ||
--		       cmd == VIDIOC_TRY_EXT_CTRLS);
--
--	/*  Copy arguments into temp kernel buffer  */
--	if (_IOC_DIR(cmd) != _IOC_NONE) {
--		if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
--			parg = sbuf;
--		} else {
--			/* too big to allocate from stack */
--			mbuf = kmalloc(_IOC_SIZE(cmd), GFP_KERNEL);
--			if (NULL == mbuf)
--				return -ENOMEM;
--			parg = mbuf;
--		}
--
--		err = -EFAULT;
--		if (_IOC_DIR(cmd) & _IOC_WRITE) {
--			unsigned long n = cmd_input_size(cmd);
--
--			if (copy_from_user(parg, (void __user *)arg, n))
--				goto out;
--
--			/* zero out anything we don't copy from userspace */
--			if (n < _IOC_SIZE(cmd))
--				memset((u8 *)parg + n, 0, _IOC_SIZE(cmd) - n);
--		} else {
--			/* read-only ioctl */
--			memset(parg, 0, _IOC_SIZE(cmd));
--		}
--	}
--
--	if (is_ext_ctrl) {
--		struct v4l2_ext_controls *p = parg;
--
--		/* In case of an error, tell the caller that it wasn't
--		   a specific control that caused it. */
--		p->error_idx = p->count;
--		user_ptr = (void __user *)p->controls;
--		if (p->count) {
--			ctrls_size = sizeof(struct v4l2_ext_control) * p->count;
--			/* Note: v4l2_ext_controls fits in sbuf[] so mbuf is still NULL. */
--			mbuf = kmalloc(ctrls_size, GFP_KERNEL);
--			err = -ENOMEM;
--			if (NULL == mbuf)
--				goto out_ext_ctrl;
--			err = -EFAULT;
--			if (copy_from_user(mbuf, user_ptr, ctrls_size))
--				goto out_ext_ctrl;
--			p->controls = mbuf;
--		}
--	}
--
--	/* Handles IOCTL */
--	err = __video_do_ioctl(file, cmd, parg);
--	if (err == -ENOIOCTLCMD)
--		err = -EINVAL;
--	if (is_ext_ctrl) {
--		struct v4l2_ext_controls *p = parg;
--
--		p->controls = (void *)user_ptr;
--		if (p->count && err == 0 && copy_to_user(user_ptr, mbuf, ctrls_size))
--			err = -EFAULT;
--		goto out_ext_ctrl;
--	}
--	if (err < 0)
--		goto out;
--
--out_ext_ctrl:
--	/*  Copy results into user buffer  */
--	switch (_IOC_DIR(cmd)) {
--	case _IOC_READ:
--	case (_IOC_WRITE | _IOC_READ):
--		if (copy_to_user((void __user *)arg, parg, _IOC_SIZE(cmd)))
--			err = -EFAULT;
--		break;
--	}
--
--out:
--	kfree(mbuf);
--	return err;
-+	return __video_usercopy(file, cmd, arg, __video_do_ioctl);
- }
- EXPORT_SYMBOL(video_ioctl2);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0002-v4l-subdev-Don-t-require-core-operations.patch b/recipes-kernel/linux/linux-omap/media/0002-v4l-subdev-Don-t-require-core-operations.patch
deleted file mode 100644
index c53c18e..0000000
--- a/recipes-kernel/linux/linux-omap/media/0002-v4l-subdev-Don-t-require-core-operations.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From e501e49dfa290479eaf23fcc5bd0623102220e0c Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Mon, 31 May 2010 11:33:06 +0300
-Subject: [PATCH 02/43] v4l: subdev: Don't require core operations
-
-There's no reason to require subdevices to implement the core
-operations. Remove the check for non-NULL core operations when
-initializing the subdev.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/media/v4l2-subdev.h |    3 +--
- 1 files changed, 1 insertions(+), 2 deletions(-)
-
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index b0316a7..b636444 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -466,8 +466,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
- 					const struct v4l2_subdev_ops *ops)
- {
- 	INIT_LIST_HEAD(&sd->list);
--	/* ops->core MUST be set */
--	BUG_ON(!ops || !ops->core);
-+	BUG_ON(!ops);
- 	sd->ops = ops;
- 	sd->v4l2_dev = NULL;
- 	sd->flags = 0;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0003-v4l-subdev-Merge-v4l2_i2c_new_subdev_cfg-and-v4l2_i2.patch b/recipes-kernel/linux/linux-omap/media/0003-v4l-subdev-Merge-v4l2_i2c_new_subdev_cfg-and-v4l2_i2.patch
deleted file mode 100644
index 6cca7ea..0000000
--- a/recipes-kernel/linux/linux-omap/media/0003-v4l-subdev-Merge-v4l2_i2c_new_subdev_cfg-and-v4l2_i2.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From 2c7009851d70caeb91ac806b133b7d77c5c2ca19 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Thu, 8 Jul 2010 12:01:09 +0200
-Subject: [PATCH 03/43] v4l: subdev: Merge v4l2_i2c_new_subdev_cfg and v4l2_i2c_new_subdev
-
-v4l2_i2c_new_subdev is a thin wrapper around v4l2_i2c_new_subdev_cfg,
-which is itself a wrapper around v4l2_i2c_new_subdev_board.
-
-The intermediate v4l2_i2c_new_subdev_cfg function is called directly by
-the ivtv and cafe-ccic drivers only. Merge it with v4l2_i2c_new_subdev
-and use v4l2_i2c_new_subdev_board in the ivtv and cafe-ccic drivers.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/video/cafe_ccic.c     |   11 +++++++++--
- drivers/media/video/ivtv/ivtv-i2c.c |   11 +++++++++--
- drivers/media/video/v4l2-common.c   |    7 ++-----
- include/media/v4l2-common.h         |   13 +------------
- 4 files changed, 21 insertions(+), 21 deletions(-)
-
-diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c
-index 0dfff50..6e23add 100644
---- a/drivers/media/video/cafe_ccic.c
-+++ b/drivers/media/video/cafe_ccic.c
-@@ -1992,6 +1992,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
- {
- 	int ret;
- 	struct cafe_camera *cam;
-+	struct i2c_board_info info;
- 	struct ov7670_config sensor_cfg = {
- 		/* This controller only does SMBUS */
- 		.use_smbus = true,
-@@ -2065,8 +2066,14 @@ static int cafe_pci_probe(struct pci_dev *pdev,
- 		sensor_cfg.clock_speed = 45;
- 
- 	cam->sensor_addr = 0x42;
--	cam->sensor = v4l2_i2c_new_subdev_cfg(&cam->v4l2_dev, &cam->i2c_adapter,
--			"ov7670", 0, &sensor_cfg, cam->sensor_addr, NULL);
-+
-+	memset(&info, 0, sizeof(info));
-+	strlcpy(info.type, "ov7670", sizeof(info.type));
-+	info.addr = cam->sensor_addr;
-+	info.platform_data = &sensor_cfg;
-+
-+	cam->sensor = v4l2_i2c_new_subdev_board(&cam->v4l2_dev,
-+			&cam->i2c_adapter, &info, NULL);
- 	if (cam->sensor == NULL) {
- 		ret = -ENODEV;
- 		goto out_smbus;
-diff --git a/drivers/media/video/ivtv/ivtv-i2c.c b/drivers/media/video/ivtv/ivtv-i2c.c
-index 665191c..6651a6c 100644
---- a/drivers/media/video/ivtv/ivtv-i2c.c
-+++ b/drivers/media/video/ivtv/ivtv-i2c.c
-@@ -267,10 +267,17 @@ int ivtv_i2c_register(struct ivtv *itv, unsigned idx)
- 				adap, type, 0, I2C_ADDRS(hw_addrs[idx]));
- 	} else if (hw == IVTV_HW_CX25840) {
- 		struct cx25840_platform_data pdata;
-+		struct i2c_board_info info;
- 
- 		pdata.pvr150_workaround = itv->pvr150_workaround;
--		sd = v4l2_i2c_new_subdev_cfg(&itv->v4l2_dev,
--				adap, type, 0, &pdata, hw_addrs[idx], NULL);
-+
-+		memset(&info, 0, sizeof(info));
-+		strlcpy(info.type, type, sizeof(info.type));
-+		info.addr = hw_addrs[idx];
-+		info.platform_data = &pdata;
-+
-+		sd = v4l2_i2c_new_subdev_board(&itv->v4l2_dev, adap, &info,
-+					       NULL);
- 	} else {
- 		sd = v4l2_i2c_new_subdev(&itv->v4l2_dev,
- 				adap, type, hw_addrs[idx], NULL);
-diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
-index b5eb1f3..e007e61 100644
---- a/drivers/media/video/v4l2-common.c
-+++ b/drivers/media/video/v4l2-common.c
-@@ -428,9 +428,8 @@ error:
- }
- EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev_board);
- 
--struct v4l2_subdev *v4l2_i2c_new_subdev_cfg(struct v4l2_device *v4l2_dev,
-+struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
- 		struct i2c_adapter *adapter, const char *client_type,
--		int irq, void *platform_data,
- 		u8 addr, const unsigned short *probe_addrs)
- {
- 	struct i2c_board_info info;
-@@ -440,12 +439,10 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_cfg(struct v4l2_device *v4l2_dev,
- 	memset(&info, 0, sizeof(info));
- 	strlcpy(info.type, client_type, sizeof(info.type));
- 	info.addr = addr;
--	info.irq = irq;
--	info.platform_data = platform_data;
- 
- 	return v4l2_i2c_new_subdev_board(v4l2_dev, adapter, &info, probe_addrs);
- }
--EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev_cfg);
-+EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
- 
- /* Return i2c client address of v4l2_subdev. */
- unsigned short v4l2_i2c_subdev_addr(struct v4l2_subdev *sd)
-diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
-index 239125a..565fb32 100644
---- a/include/media/v4l2-common.h
-+++ b/include/media/v4l2-common.h
-@@ -138,21 +138,10 @@ struct v4l2_subdev_ops;
- 
- /* Load an i2c module and return an initialized v4l2_subdev struct.
-    The client_type argument is the name of the chip that's on the adapter. */
--struct v4l2_subdev *v4l2_i2c_new_subdev_cfg(struct v4l2_device *v4l2_dev,
-+struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
- 		struct i2c_adapter *adapter, const char *client_type,
--		int irq, void *platform_data,
- 		u8 addr, const unsigned short *probe_addrs);
- 
--/* Load an i2c module and return an initialized v4l2_subdev struct.
--   The client_type argument is the name of the chip that's on the adapter. */
--static inline struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
--		struct i2c_adapter *adapter, const char *client_type,
--		u8 addr, const unsigned short *probe_addrs)
--{
--	return v4l2_i2c_new_subdev_cfg(v4l2_dev, adapter, client_type, 0, NULL,
--				       addr, probe_addrs);
--}
--
- struct i2c_board_info;
- 
- struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0004-v4l-subdev-Add-device-node-support.patch b/recipes-kernel/linux/linux-omap/media/0004-v4l-subdev-Add-device-node-support.patch
deleted file mode 100644
index 8fe2a9d..0000000
--- a/recipes-kernel/linux/linux-omap/media/0004-v4l-subdev-Add-device-node-support.patch
+++ /dev/null
@@ -1,615 +0,0 @@
-From e5b8af4e36ca5e922dd2b881d6c215e9d4d30a6f Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:38:49 +0100
-Subject: [PATCH 04/43] v4l: subdev: Add device node support
-
-Create a device node named subdevX for every registered subdev.
-
-As the device node is registered before the subdev core::s_config
-function is called, return -EGAIN on open until initialization
-completes.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Vimarsh Zutshi <vimarsh.zutshi at nokia.com>
----
- Documentation/video4linux/v4l2-framework.txt |   18 +++++++
- drivers/media/radio/radio-si4713.c           |    2 +-
- drivers/media/video/Makefile                 |    2 +-
- drivers/media/video/cafe_ccic.c              |    2 +-
- drivers/media/video/davinci/vpfe_capture.c   |    2 +-
- drivers/media/video/davinci/vpif_capture.c   |    2 +-
- drivers/media/video/davinci/vpif_display.c   |    2 +-
- drivers/media/video/ivtv/ivtv-i2c.c          |    2 +-
- drivers/media/video/s5p-fimc/fimc-capture.c  |    2 +-
- drivers/media/video/sh_vou.c                 |    2 +-
- drivers/media/video/soc_camera.c             |    2 +-
- drivers/media/video/v4l2-common.c            |   15 +++++-
- drivers/media/video/v4l2-dev.c               |   27 ++++------
- drivers/media/video/v4l2-device.c            |   24 +++++++++-
- drivers/media/video/v4l2-ioctl.c             |    2 +-
- drivers/media/video/v4l2-subdev.c            |   66 ++++++++++++++++++++++++++
- include/media/v4l2-common.h                  |    5 +-
- include/media/v4l2-dev.h                     |   18 ++++++-
- include/media/v4l2-ioctl.h                   |    3 +
- include/media/v4l2-subdev.h                  |   16 ++++++-
- 20 files changed, 176 insertions(+), 38 deletions(-)
- create mode 100644 drivers/media/video/v4l2-subdev.c
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index f22f35c..4c9185a 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -319,6 +319,24 @@ controlled through GPIO pins. This distinction is only relevant when setting
- up the device, but once the subdev is registered it is completely transparent.
- 
- 
-+V4L2 sub-device userspace API
-+-----------------------------
-+
-+Beside exposing a kernel API through the v4l2_subdev_ops structure, V4L2
-+sub-devices can also be controlled directly by userspace applications.
-+
-+When a sub-device is registered, a device node named v4l-subdevX can be created
-+in /dev. If the sub-device supports direct userspace configuration it must set
-+the V4L2_SUBDEV_FL_HAS_DEVNODE flag before being registered.
-+
-+For I2C and SPI sub-devices, the v4l2_device driver can disable registration of
-+the device node if it wants to control the sub-device on its own. In that case
-+it must set the v4l2_i2c_new_subdev_board or v4l2_spi_new_subdev enable_devnode
-+argument to 0. Setting the argument to 1 will only enable device node
-+registration if the sub-device driver has set the V4L2_SUBDEV_FL_HAS_DEVNODE
-+flag.
-+
-+
- I2C sub-device drivers
- ----------------------
- 
-diff --git a/drivers/media/radio/radio-si4713.c b/drivers/media/radio/radio-si4713.c
-index 726d367..f7c942f 100644
---- a/drivers/media/radio/radio-si4713.c
-+++ b/drivers/media/radio/radio-si4713.c
-@@ -293,7 +293,7 @@ static int radio_si4713_pdriver_probe(struct platform_device *pdev)
- 	}
- 
- 	sd = v4l2_i2c_new_subdev_board(&rsdev->v4l2_dev, adapter,
--					pdata->subdev_board_info, NULL);
-+					pdata->subdev_board_info, NULL, 0);
- 	if (!sd) {
- 		dev_err(&pdev->dev, "Cannot get v4l2 subdevice\n");
- 		rval = -ENODEV;
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index af79d47..adc1bd5 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -11,7 +11,7 @@ stkwebcam-objs	:=	stk-webcam.o stk-sensor.o
- omap2cam-objs	:=	omap24xxcam.o omap24xxcam-dma.o
- 
- videodev-objs	:=	v4l2-dev.o v4l2-ioctl.o v4l2-device.o v4l2-fh.o \
--			v4l2-event.o v4l2-ctrls.o
-+			v4l2-event.o v4l2-ctrls.o v4l2-subdev.o
- 
- # V4L2 core modules
- 
-diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c
-index 6e23add..f932da1 100644
---- a/drivers/media/video/cafe_ccic.c
-+++ b/drivers/media/video/cafe_ccic.c
-@@ -2073,7 +2073,7 @@ static int cafe_pci_probe(struct pci_dev *pdev,
- 	info.platform_data = &sensor_cfg;
- 
- 	cam->sensor = v4l2_i2c_new_subdev_board(&cam->v4l2_dev,
--			&cam->i2c_adapter, &info, NULL);
-+			&cam->i2c_adapter, &info, NULL, 0);
- 	if (cam->sensor == NULL) {
- 		ret = -ENODEV;
- 		goto out_smbus;
-diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c
-index 7333a9b..bfc2a47 100644
---- a/drivers/media/video/davinci/vpfe_capture.c
-+++ b/drivers/media/video/davinci/vpfe_capture.c
-@@ -1987,7 +1987,7 @@ static __init int vpfe_probe(struct platform_device *pdev)
- 			v4l2_i2c_new_subdev_board(&vpfe_dev->v4l2_dev,
- 						  i2c_adap,
- 						  &sdinfo->board_info,
--						  NULL);
-+						  NULL, 0);
- 		if (vpfe_dev->sd[i]) {
- 			v4l2_info(&vpfe_dev->v4l2_dev,
- 				  "v4l2 sub device %s registered\n",
-diff --git a/drivers/media/video/davinci/vpif_capture.c b/drivers/media/video/davinci/vpif_capture.c
-index 193abab..d2228e0 100644
---- a/drivers/media/video/davinci/vpif_capture.c
-+++ b/drivers/media/video/davinci/vpif_capture.c
-@@ -2014,7 +2014,7 @@ static __init int vpif_probe(struct platform_device *pdev)
- 			v4l2_i2c_new_subdev_board(&vpif_obj.v4l2_dev,
- 						  i2c_adap,
- 						  &subdevdata->board_info,
--						  NULL);
-+						  NULL, 0);
- 
- 		if (!vpif_obj.sd[i]) {
- 			vpif_err("Error registering v4l2 subdevice\n");
-diff --git a/drivers/media/video/davinci/vpif_display.c b/drivers/media/video/davinci/vpif_display.c
-index 412c65d..060c049 100644
---- a/drivers/media/video/davinci/vpif_display.c
-+++ b/drivers/media/video/davinci/vpif_display.c
-@@ -1555,7 +1555,7 @@ static __init int vpif_probe(struct platform_device *pdev)
- 		vpif_obj.sd[i] = v4l2_i2c_new_subdev_board(&vpif_obj.v4l2_dev,
- 						i2c_adap,
- 						&subdevdata[i].board_info,
--						NULL);
-+						NULL, 0);
- 		if (!vpif_obj.sd[i]) {
- 			vpif_err("Error registering v4l2 subdevice\n");
- 			goto probe_subdev_out;
-diff --git a/drivers/media/video/ivtv/ivtv-i2c.c b/drivers/media/video/ivtv/ivtv-i2c.c
-index 6651a6c..3d3b62d 100644
---- a/drivers/media/video/ivtv/ivtv-i2c.c
-+++ b/drivers/media/video/ivtv/ivtv-i2c.c
-@@ -277,7 +277,7 @@ int ivtv_i2c_register(struct ivtv *itv, unsigned idx)
- 		info.platform_data = &pdata;
- 
- 		sd = v4l2_i2c_new_subdev_board(&itv->v4l2_dev, adap, &info,
--					       NULL);
-+					       NULL, 0);
- 	} else {
- 		sd = v4l2_i2c_new_subdev(&itv->v4l2_dev,
- 				adap, type, hw_addrs[idx], NULL);
-diff --git a/drivers/media/video/s5p-fimc/fimc-capture.c b/drivers/media/video/s5p-fimc/fimc-capture.c
-index 2f50080..b237daa 100644
---- a/drivers/media/video/s5p-fimc/fimc-capture.c
-+++ b/drivers/media/video/s5p-fimc/fimc-capture.c
-@@ -44,7 +44,7 @@ static struct v4l2_subdev *fimc_subdev_register(struct fimc_dev *fimc,
- 		return ERR_PTR(-ENOMEM);
- 
- 	sd = v4l2_i2c_new_subdev_board(&vid_cap->v4l2_dev, i2c_adap,
--				       isp_info->board_info, NULL);
-+				       isp_info->board_info, NULL, 0);
- 	if (!sd) {
- 		v4l2_err(&vid_cap->v4l2_dev, "failed to acquire subdev\n");
- 		return NULL;
-diff --git a/drivers/media/video/sh_vou.c b/drivers/media/video/sh_vou.c
-index 07cf0c6..c50f0f5 100644
---- a/drivers/media/video/sh_vou.c
-+++ b/drivers/media/video/sh_vou.c
-@@ -1409,7 +1409,7 @@ static int __devinit sh_vou_probe(struct platform_device *pdev)
- 		goto ereset;
- 
- 	subdev = v4l2_i2c_new_subdev_board(&vou_dev->v4l2_dev, i2c_adap,
--			vou_pdata->board_info, NULL);
-+			vou_pdata->board_info, NULL, 0);
- 	if (!subdev) {
- 		ret = -ENOMEM;
- 		goto ei2cnd;
-diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c
-index 052bd6d..5afb601 100644
---- a/drivers/media/video/soc_camera.c
-+++ b/drivers/media/video/soc_camera.c
-@@ -896,7 +896,7 @@ static int soc_camera_init_i2c(struct soc_camera_device *icd,
- 	icl->board_info->platform_data = icd;
- 
- 	subdev = v4l2_i2c_new_subdev_board(&ici->v4l2_dev, adap,
--				icl->board_info, NULL);
-+				icl->board_info, NULL, 0);
- 	if (!subdev)
- 		goto ei2cnd;
- 
-diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
-index e007e61..ffee794 100644
---- a/drivers/media/video/v4l2-common.c
-+++ b/drivers/media/video/v4l2-common.c
-@@ -369,7 +369,7 @@ EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
- /* Load an i2c sub-device. */
- struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
- 		struct i2c_adapter *adapter, struct i2c_board_info *info,
--		const unsigned short *probe_addrs)
-+		const unsigned short *probe_addrs, int enable_devnode)
- {
- 	struct v4l2_subdev *sd = NULL;
- 	struct i2c_client *client;
-@@ -399,9 +399,12 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
- 	if (!try_module_get(client->driver->driver.owner))
- 		goto error;
- 	sd = i2c_get_clientdata(client);
-+	if (!enable_devnode)
-+		sd->flags &= ~V4L2_SUBDEV_FL_HAS_DEVNODE;
- 
- 	/* Register with the v4l2_device which increases the module's
- 	   use count as well. */
-+	sd->initialized = 0;
- 	if (v4l2_device_register_subdev(v4l2_dev, sd))
- 		sd = NULL;
- 	/* Decrease the module use count to match the first try_module_get. */
-@@ -416,6 +419,8 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
- 		if (err && err != -ENOIOCTLCMD) {
- 			v4l2_device_unregister_subdev(sd);
- 			sd = NULL;
-+		} else {
-+			sd->initialized = 1;
- 		}
- 	}
- 
-@@ -440,7 +445,8 @@ struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
- 	strlcpy(info.type, client_type, sizeof(info.type));
- 	info.addr = addr;
- 
--	return v4l2_i2c_new_subdev_board(v4l2_dev, adapter, &info, probe_addrs);
-+	return v4l2_i2c_new_subdev_board(v4l2_dev, adapter, &info, probe_addrs,
-+					 0);
- }
- EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
- 
-@@ -510,7 +516,8 @@ void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
- EXPORT_SYMBOL_GPL(v4l2_spi_subdev_init);
- 
- struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
--		struct spi_master *master, struct spi_board_info *info)
-+		struct spi_master *master, struct spi_board_info *info,
-+		int enable_devnode)
- {
- 	struct v4l2_subdev *sd = NULL;
- 	struct spi_device *spi = NULL;
-@@ -529,6 +536,8 @@ struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
- 		goto error;
- 
- 	sd = spi_get_drvdata(spi);
-+	if (!enable_devnode)
-+		sd->flags &= ~V4L2_SUBDEV_FL_HAS_DEVNODE;
- 
- 	/* Register with the v4l2_device which increases the module's
- 	   use count as well. */
-diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
-index 359e232..f22bd41 100644
---- a/drivers/media/video/v4l2-dev.c
-+++ b/drivers/media/video/v4l2-dev.c
-@@ -408,13 +408,14 @@ static int get_index(struct video_device *vdev)
- }
- 
- /**
-- *	video_register_device - register video4linux devices
-+ *	__video_register_device - register video4linux devices
-  *	@vdev: video device structure we want to register
-  *	@type: type of device to register
-  *	@nr:   which device node number (0 == /dev/video0, 1 == /dev/video1, ...
-  *             -1 == first free)
-  *	@warn_if_nr_in_use: warn if the desired device node number
-  *	       was already in use and another number was chosen instead.
-+ *	@owner: module that owns the video device node
-  *
-  *	The registration code assigns minor numbers and device node numbers
-  *	based on the requested type and registers the new device node with
-@@ -431,9 +432,11 @@ static int get_index(struct video_device *vdev)
-  *	%VFL_TYPE_VBI - Vertical blank data (undecoded)
-  *
-  *	%VFL_TYPE_RADIO - A radio card
-+ *
-+ *	%VFL_TYPE_SUBDEV - A subdevice
-  */
--static int __video_register_device(struct video_device *vdev, int type, int nr,
--		int warn_if_nr_in_use)
-+int __video_register_device(struct video_device *vdev, int type, int nr,
-+		int warn_if_nr_in_use, struct module *owner)
- {
- 	int i = 0;
- 	int ret;
-@@ -466,6 +469,9 @@ static int __video_register_device(struct video_device *vdev, int type, int nr,
- 	case VFL_TYPE_RADIO:
- 		name_base = "radio";
- 		break;
-+	case VFL_TYPE_SUBDEV:
-+		name_base = "v4l-subdev";
-+		break;
- 	default:
- 		printk(KERN_ERR "%s called with unknown type: %d\n",
- 		       __func__, type);
-@@ -549,7 +555,7 @@ static int __video_register_device(struct video_device *vdev, int type, int nr,
- 		goto cleanup;
- 	}
- 	vdev->cdev->ops = &v4l2_fops;
--	vdev->cdev->owner = vdev->fops->owner;
-+	vdev->cdev->owner = owner;
- 	ret = cdev_add(vdev->cdev, MKDEV(VIDEO_MAJOR, vdev->minor), 1);
- 	if (ret < 0) {
- 		printk(KERN_ERR "%s: cdev_add failed\n", __func__);
-@@ -598,18 +604,7 @@ cleanup:
- 	vdev->minor = -1;
- 	return ret;
- }
--
--int video_register_device(struct video_device *vdev, int type, int nr)
--{
--	return __video_register_device(vdev, type, nr, 1);
--}
--EXPORT_SYMBOL(video_register_device);
--
--int video_register_device_no_warn(struct video_device *vdev, int type, int nr)
--{
--	return __video_register_device(vdev, type, nr, 0);
--}
--EXPORT_SYMBOL(video_register_device_no_warn);
-+EXPORT_SYMBOL(__video_register_device);
- 
- /**
-  *	video_unregister_device - unregister a video4linux device
-diff --git a/drivers/media/video/v4l2-device.c b/drivers/media/video/v4l2-device.c
-index 7fe6f92..97e84df 100644
---- a/drivers/media/video/v4l2-device.c
-+++ b/drivers/media/video/v4l2-device.c
-@@ -117,24 +117,43 @@ EXPORT_SYMBOL_GPL(v4l2_device_unregister);
- int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev,
- 						struct v4l2_subdev *sd)
- {
-+	struct video_device *vdev;
- 	int err;
- 
- 	/* Check for valid input */
- 	if (v4l2_dev == NULL || sd == NULL || !sd->name[0])
- 		return -EINVAL;
-+
- 	/* Warn if we apparently re-register a subdev */
- 	WARN_ON(sd->v4l2_dev != NULL);
-+
- 	if (!try_module_get(sd->owner))
- 		return -ENODEV;
-+
- 	/* This just returns 0 if either of the two args is NULL */
- 	err = v4l2_ctrl_add_handler(v4l2_dev->ctrl_handler, sd->ctrl_handler);
- 	if (err)
- 		return err;
-+
- 	sd->v4l2_dev = v4l2_dev;
- 	spin_lock(&v4l2_dev->lock);
- 	list_add_tail(&sd->list, &v4l2_dev->subdevs);
- 	spin_unlock(&v4l2_dev->lock);
--	return 0;
-+
-+	/* Register the device node. */
-+	vdev = &sd->devnode;
-+	strlcpy(vdev->name, sd->name, sizeof(vdev->name));
-+	vdev->parent = v4l2_dev->dev;
-+	vdev->fops = &v4l2_subdev_fops;
-+	vdev->release = video_device_release_empty;
-+	if (sd->flags & V4L2_SUBDEV_FL_HAS_DEVNODE) {
-+		err = __video_register_device(vdev, VFL_TYPE_SUBDEV, -1, 1,
-+					      sd->owner);
-+		if (err < 0)
-+			v4l2_device_unregister_subdev(sd);
-+	}
-+
-+	return err;
- }
- EXPORT_SYMBOL_GPL(v4l2_device_register_subdev);
- 
-@@ -143,10 +162,13 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd)
- 	/* return if it isn't registered */
- 	if (sd == NULL || sd->v4l2_dev == NULL)
- 		return;
-+
- 	spin_lock(&sd->v4l2_dev->lock);
- 	list_del(&sd->list);
- 	spin_unlock(&sd->v4l2_dev->lock);
- 	sd->v4l2_dev = NULL;
-+
- 	module_put(sd->owner);
-+	video_unregister_device(&sd->devnode);
- }
- EXPORT_SYMBOL_GPL(v4l2_device_unregister_subdev);
-diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
-index 1e01554..4137e4c 100644
---- a/drivers/media/video/v4l2-ioctl.c
-+++ b/drivers/media/video/v4l2-ioctl.c
-@@ -413,7 +413,7 @@ static unsigned long cmd_input_size(unsigned int cmd)
- 	}
- }
- 
--static long
-+long
- __video_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
- 		v4l2_kioctl func)
- {
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-new file mode 100644
-index 0000000..00bd4b1
---- /dev/null
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -0,0 +1,66 @@
-+/*
-+ *  V4L2 subdevice support.
-+ *
-+ *  Copyright (C) 2010 Nokia Corporation
-+ *
-+ *  Contact: Laurent Pinchart <laurent.pinchart at ideasonboard.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.
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/ioctl.h>
-+#include <linux/videodev2.h>
-+
-+#include <media/v4l2-device.h>
-+#include <media/v4l2-ioctl.h>
-+
-+static int subdev_open(struct file *file)
-+{
-+	struct video_device *vdev = video_devdata(file);
-+	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+
-+	if (!sd->initialized)
-+		return -EAGAIN;
-+
-+	return 0;
-+}
-+
-+static int subdev_close(struct file *file)
-+{
-+	return 0;
-+}
-+
-+static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
-+{
-+	switch (cmd) {
-+	default:
-+		return -ENOIOCTLCMD;
-+	}
-+
-+	return 0;
-+}
-+
-+static long subdev_ioctl(struct file *file, unsigned int cmd,
-+	unsigned long arg)
-+{
-+	return __video_usercopy(file, cmd, arg, subdev_do_ioctl);
-+}
-+
-+const struct v4l2_file_operations v4l2_subdev_fops = {
-+	.owner = THIS_MODULE,
-+	.open = subdev_open,
-+	.unlocked_ioctl = subdev_ioctl,
-+	.release = subdev_close,
-+};
-diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
-index 565fb32..ef8965d 100644
---- a/include/media/v4l2-common.h
-+++ b/include/media/v4l2-common.h
-@@ -146,7 +146,7 @@ struct i2c_board_info;
- 
- struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
- 		struct i2c_adapter *adapter, struct i2c_board_info *info,
--		const unsigned short *probe_addrs);
-+		const unsigned short *probe_addrs, int enable_devnode);
- 
- /* Initialize an v4l2_subdev with data from an i2c_client struct */
- void v4l2_i2c_subdev_init(struct v4l2_subdev *sd, struct i2c_client *client,
-@@ -179,7 +179,8 @@ struct spi_device;
- /* Load an spi module and return an initialized v4l2_subdev struct.
-    The client_type argument is the name of the chip that's on the adapter. */
- struct v4l2_subdev *v4l2_spi_new_subdev(struct v4l2_device *v4l2_dev,
--		struct spi_master *master, struct spi_board_info *info);
-+		struct spi_master *master, struct spi_board_info *info,
-+		int enable_devnode);
- 
- /* Initialize an v4l2_subdev with data from an spi_device struct */
- void v4l2_spi_subdev_init(struct v4l2_subdev *sd, struct spi_device *spi,
-diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
-index 15802a0..4fe6831 100644
---- a/include/media/v4l2-dev.h
-+++ b/include/media/v4l2-dev.h
-@@ -21,7 +21,8 @@
- #define VFL_TYPE_GRABBER	0
- #define VFL_TYPE_VBI		1
- #define VFL_TYPE_RADIO		2
--#define VFL_TYPE_MAX		3
-+#define VFL_TYPE_SUBDEV		3
-+#define VFL_TYPE_MAX		4
- 
- struct v4l2_ioctl_callbacks;
- struct video_device;
-@@ -102,15 +103,26 @@ struct video_device
- /* dev to video-device */
- #define to_video_device(cd) container_of(cd, struct video_device, dev)
- 
-+int __must_check __video_register_device(struct video_device *vdev, int type,
-+		int nr, int warn_if_nr_in_use, struct module *owner);
-+
- /* Register video devices. Note that if video_register_device fails,
-    the release() callback of the video_device structure is *not* called, so
-    the caller is responsible for freeing any data. Usually that means that
-    you call video_device_release() on failure. */
--int __must_check video_register_device(struct video_device *vdev, int type, int nr);
-+static inline int __must_check video_register_device(struct video_device *vdev,
-+		int type, int nr)
-+{
-+	return __video_register_device(vdev, type, nr, 1, vdev->fops->owner);
-+}
- 
- /* Same as video_register_device, but no warning is issued if the desired
-    device node number was already in use. */
--int __must_check video_register_device_no_warn(struct video_device *vdev, int type, int nr);
-+static inline int __must_check video_register_device_no_warn(
-+		struct video_device *vdev, int type, int nr)
-+{
-+	return __video_register_device(vdev, type, nr, 0, vdev->fops->owner);
-+}
- 
- /* Unregister video devices. Will do nothing if vdev == NULL or
-    video_is_registered() returns false. */
-diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
-index 06daa6e..abb64d0 100644
---- a/include/media/v4l2-ioctl.h
-+++ b/include/media/v4l2-ioctl.h
-@@ -316,6 +316,9 @@ extern long v4l2_compat_ioctl32(struct file *file, unsigned int cmd,
- 				unsigned long arg);
- #endif
- 
-+extern long __video_usercopy(struct file *file, unsigned int cmd,
-+				unsigned long arg, v4l2_kioctl func);
-+
- /* Include support for obsoleted stuff */
- extern long video_usercopy(struct file *file, unsigned int cmd,
- 				unsigned long arg, v4l2_kioctl func);
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index b636444..de181db 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -22,6 +22,7 @@
- #define _V4L2_SUBDEV_H
- 
- #include <media/v4l2-common.h>
-+#include <media/v4l2-dev.h>
- #include <media/v4l2-mediabus.h>
- 
- /* generic v4l2_device notify callback notification values */
-@@ -418,9 +419,11 @@ struct v4l2_subdev_ops {
- #define V4L2_SUBDEV_NAME_SIZE 32
- 
- /* Set this flag if this subdev is a i2c device. */
--#define V4L2_SUBDEV_FL_IS_I2C (1U << 0)
-+#define V4L2_SUBDEV_FL_IS_I2C			(1U << 0)
- /* Set this flag if this subdev is a spi device. */
--#define V4L2_SUBDEV_FL_IS_SPI (1U << 1)
-+#define V4L2_SUBDEV_FL_IS_SPI			(1U << 1)
-+/* Set this flag if this subdev needs a device node. */
-+#define V4L2_SUBDEV_FL_HAS_DEVNODE		(1U << 2)
- 
- /* Each instance of a subdev driver should create this struct, either
-    stand-alone or embedded in a larger struct.
-@@ -440,8 +443,16 @@ struct v4l2_subdev {
- 	/* pointer to private data */
- 	void *dev_priv;
- 	void *host_priv;
-+	/* subdev device node */
-+	struct video_device devnode;
-+	unsigned int initialized;
- };
- 
-+#define vdev_to_v4l2_subdev(vdev) \
-+	container_of(vdev, struct v4l2_subdev, devnode)
-+
-+extern const struct v4l2_file_operations v4l2_subdev_fops;
-+
- static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
- {
- 	sd->dev_priv = p;
-@@ -474,6 +485,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
- 	sd->grp_id = 0;
- 	sd->dev_priv = NULL;
- 	sd->host_priv = NULL;
-+	sd->initialized = 1;
- }
- 
- /* Call an ops of a v4l2_subdev, doing the right checks against
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0005-v4l-subdev-Uninline-the-v4l2_subdev_init-function.patch b/recipes-kernel/linux/linux-omap/media/0005-v4l-subdev-Uninline-the-v4l2_subdev_init-function.patch
deleted file mode 100644
index a4e45e6..0000000
--- a/recipes-kernel/linux/linux-omap/media/0005-v4l-subdev-Uninline-the-v4l2_subdev_init-function.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From 7acd77b0cdf013213a6513a75ee5bc2c3e92e1a1 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:38:52 +0100
-Subject: [PATCH 05/43] v4l: subdev: Uninline the v4l2_subdev_init function
-
-The function isn't small or performance sensitive enough to be inlined.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/video/v4l2-subdev.c |   42 +++++++++++++++++++++++++-----------
- include/media/v4l2-subdev.h       |   16 +------------
- 2 files changed, 31 insertions(+), 27 deletions(-)
-
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index 00bd4b1..0deff78 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -1,22 +1,23 @@
- /*
-- *  V4L2 subdevice support.
-+ * V4L2 sub-device
-  *
-- *  Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2010 Nokia Corporation
-  *
-- *  Contact: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ * Contact: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	    Sakari Ailus <sakari.ailus at maxwell.research.nokia.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.
-+ * 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.
-+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-  */
- 
- #include <linux/types.h>
-@@ -64,3 +65,18 @@ const struct v4l2_file_operations v4l2_subdev_fops = {
- 	.unlocked_ioctl = subdev_ioctl,
- 	.release = subdev_close,
- };
-+
-+void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops)
-+{
-+	INIT_LIST_HEAD(&sd->list);
-+	BUG_ON(!ops);
-+	sd->ops = ops;
-+	sd->v4l2_dev = NULL;
-+	sd->flags = 0;
-+	sd->name[0] = '\0';
-+	sd->grp_id = 0;
-+	sd->dev_priv = NULL;
-+	sd->host_priv = NULL;
-+	sd->initialized = 1;
-+}
-+EXPORT_SYMBOL(v4l2_subdev_init);
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index de181db..90022f5 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -473,20 +473,8 @@ static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
- 	return sd->host_priv;
- }
- 
--static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
--					const struct v4l2_subdev_ops *ops)
--{
--	INIT_LIST_HEAD(&sd->list);
--	BUG_ON(!ops);
--	sd->ops = ops;
--	sd->v4l2_dev = NULL;
--	sd->flags = 0;
--	sd->name[0] = '\0';
--	sd->grp_id = 0;
--	sd->dev_priv = NULL;
--	sd->host_priv = NULL;
--	sd->initialized = 1;
--}
-+void v4l2_subdev_init(struct v4l2_subdev *sd,
-+		      const struct v4l2_subdev_ops *ops);
- 
- /* Call an ops of a v4l2_subdev, doing the right checks against
-    NULL pointers.
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0006-v4l-subdev-Control-ioctls-support.patch b/recipes-kernel/linux/linux-omap/media/0006-v4l-subdev-Control-ioctls-support.patch
deleted file mode 100644
index 218f346..0000000
--- a/recipes-kernel/linux/linux-omap/media/0006-v4l-subdev-Control-ioctls-support.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From dd0b366441249eb10daa2275e968431507f8d0d5 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:39:54 +0100
-Subject: [PATCH 06/43] v4l: subdev: Control ioctls support
-
-Pass the control-related ioctls to the subdev driver through the control
-framework.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/video4linux/v4l2-framework.txt |   16 ++++++++++++++++
- drivers/media/video/v4l2-subdev.c            |   25 +++++++++++++++++++++++++
- 2 files changed, 41 insertions(+), 0 deletions(-)
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index 4c9185a..f683f63 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -336,6 +336,22 @@ argument to 0. Setting the argument to 1 will only enable device node
- registration if the sub-device driver has set the V4L2_SUBDEV_FL_HAS_DEVNODE
- flag.
- 
-+The device node handles a subset of the V4L2 API.
-+
-+VIDIOC_QUERYCTRL
-+VIDIOC_QUERYMENU
-+VIDIOC_G_CTRL
-+VIDIOC_S_CTRL
-+VIDIOC_G_EXT_CTRLS
-+VIDIOC_S_EXT_CTRLS
-+VIDIOC_TRY_EXT_CTRLS
-+
-+	The controls ioctls are identical to the ones defined in V4L2. They
-+	behave identically, with the only exception that they deal only with
-+	controls implemented in the sub-device. Depending on the driver, those
-+	controls can be also be accessed through one (or several) V4L2 device
-+	nodes.
-+
- 
- I2C sub-device drivers
- ----------------------
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index 0deff78..fc57ce7 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -24,6 +24,7 @@
- #include <linux/ioctl.h>
- #include <linux/videodev2.h>
- 
-+#include <media/v4l2-ctrls.h>
- #include <media/v4l2-device.h>
- #include <media/v4l2-ioctl.h>
- 
-@@ -45,7 +46,31 @@ static int subdev_close(struct file *file)
- 
- static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- {
-+	struct video_device *vdev = video_devdata(file);
-+	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+
- 	switch (cmd) {
-+	case VIDIOC_QUERYCTRL:
-+		return v4l2_subdev_queryctrl(sd, arg);
-+
-+	case VIDIOC_QUERYMENU:
-+		return v4l2_subdev_querymenu(sd, arg);
-+
-+	case VIDIOC_G_CTRL:
-+		return v4l2_subdev_g_ctrl(sd, arg);
-+
-+	case VIDIOC_S_CTRL:
-+		return v4l2_subdev_s_ctrl(sd, arg);
-+
-+	case VIDIOC_G_EXT_CTRLS:
-+		return v4l2_subdev_g_ext_ctrls(sd, arg);
-+
-+	case VIDIOC_S_EXT_CTRLS:
-+		return v4l2_subdev_s_ext_ctrls(sd, arg);
-+
-+	case VIDIOC_TRY_EXT_CTRLS:
-+		return v4l2_subdev_try_ext_ctrls(sd, arg);
-+
- 	default:
- 		return -ENOIOCTLCMD;
- 	}
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0007-v4l-subdev-Events-support.patch b/recipes-kernel/linux/linux-omap/media/0007-v4l-subdev-Events-support.patch
deleted file mode 100644
index cb02f49..0000000
--- a/recipes-kernel/linux/linux-omap/media/0007-v4l-subdev-Events-support.patch
+++ /dev/null
@@ -1,223 +0,0 @@
-From 127fac73175e73c509ba203717be618a611294cd Mon Sep 17 00:00:00 2001
-From: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
-Date: Wed, 3 Mar 2010 17:49:38 +0200
-Subject: [PATCH 07/43] v4l: subdev: Events support
-
-Provide v4l2_subdevs with v4l2_event support. Subdev drivers only need very
-little to support events.
-
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
-Signed-off-by: David Cohen <david.cohen at nokia.com>
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/video4linux/v4l2-framework.txt |   18 ++++++
- drivers/media/video/v4l2-subdev.c            |   75 +++++++++++++++++++++++++-
- include/media/v4l2-subdev.h                  |   10 ++++
- 3 files changed, 102 insertions(+), 1 deletions(-)
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index f683f63..4db1def 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -352,6 +352,24 @@ VIDIOC_TRY_EXT_CTRLS
- 	controls can be also be accessed through one (or several) V4L2 device
- 	nodes.
- 
-+VIDIOC_DQEVENT
-+VIDIOC_SUBSCRIBE_EVENT
-+VIDIOC_UNSUBSCRIBE_EVENT
-+
-+	The events ioctls are identical to the ones defined in V4L2. They
-+	behave identically, with the only exception that they deal only with
-+	events generated by the sub-device. Depending on the driver, those
-+	events can also be reported by one (or several) V4L2 device nodes.
-+
-+	Sub-device drivers that want to use events need to set the
-+	V4L2_SUBDEV_USES_EVENTS v4l2_subdev::flags and initialize
-+	v4l2_subdev::nevents to events queue depth before registering the
-+	sub-device. After registration events can be queued as usual on the
-+	v4l2_subdev::devnode device node.
-+
-+	To properly support events, the poll() file operation is also
-+	implemented.
-+
- 
- I2C sub-device drivers
- ----------------------
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index fc57ce7..fbccefd 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -20,27 +20,69 @@
-  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-  */
- 
--#include <linux/types.h>
- #include <linux/ioctl.h>
-+#include <linux/slab.h>
-+#include <linux/types.h>
- #include <linux/videodev2.h>
- 
- #include <media/v4l2-ctrls.h>
- #include <media/v4l2-device.h>
- #include <media/v4l2-ioctl.h>
-+#include <media/v4l2-fh.h>
-+#include <media/v4l2-event.h>
- 
- static int subdev_open(struct file *file)
- {
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+	struct v4l2_fh *vfh;
-+	int ret;
- 
- 	if (!sd->initialized)
- 		return -EAGAIN;
- 
-+	if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) {
-+		vfh = kzalloc(sizeof(*vfh), GFP_KERNEL);
-+		if (vfh == NULL)
-+			return -ENOMEM;
-+
-+		ret = v4l2_fh_init(vfh, vdev);
-+		if (ret)
-+			goto err;
-+
-+		ret = v4l2_event_init(vfh);
-+		if (ret)
-+			goto err;
-+
-+		ret = v4l2_event_alloc(vfh, sd->nevents);
-+		if (ret)
-+			goto err;
-+
-+		v4l2_fh_add(vfh);
-+		file->private_data = vfh;
-+	}
-+
- 	return 0;
-+
-+err:
-+	if (vfh != NULL) {
-+		v4l2_fh_exit(vfh);
-+		kfree(vfh);
-+	}
-+
-+	return ret;
- }
- 
- static int subdev_close(struct file *file)
- {
-+	struct v4l2_fh *vfh = file->private_data;
-+
-+	if (vfh != NULL) {
-+		v4l2_fh_del(vfh);
-+		v4l2_fh_exit(vfh);
-+		kfree(vfh);
-+	}
-+
- 	return 0;
- }
- 
-@@ -48,6 +90,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- {
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+	struct v4l2_fh *fh = file->private_data;
- 
- 	switch (cmd) {
- 	case VIDIOC_QUERYCTRL:
-@@ -71,6 +114,18 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 	case VIDIOC_TRY_EXT_CTRLS:
- 		return v4l2_subdev_try_ext_ctrls(sd, arg);
- 
-+	case VIDIOC_DQEVENT:
-+		if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS))
-+			return -ENOIOCTLCMD;
-+
-+		return v4l2_event_dequeue(fh, arg, file->f_flags & O_NONBLOCK);
-+
-+	case VIDIOC_SUBSCRIBE_EVENT:
-+		return v4l2_subdev_call(sd, core, subscribe_event, fh, arg);
-+
-+	case VIDIOC_UNSUBSCRIBE_EVENT:
-+		return v4l2_subdev_call(sd, core, unsubscribe_event, fh, arg);
-+
- 	default:
- 		return -ENOIOCTLCMD;
- 	}
-@@ -84,11 +139,29 @@ static long subdev_ioctl(struct file *file, unsigned int cmd,
- 	return __video_usercopy(file, cmd, arg, subdev_do_ioctl);
- }
- 
-+static unsigned int subdev_poll(struct file *file, poll_table *wait)
-+{
-+	struct video_device *vdev = video_devdata(file);
-+	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+	struct v4l2_fh *fh = file->private_data;
-+
-+	if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS))
-+		return POLLERR;
-+
-+	poll_wait(file, &fh->events->wait, wait);
-+
-+	if (v4l2_event_pending(fh))
-+		return POLLPRI;
-+
-+	return 0;
-+}
-+
- const struct v4l2_file_operations v4l2_subdev_fops = {
- 	.owner = THIS_MODULE,
- 	.open = subdev_open,
- 	.unlocked_ioctl = subdev_ioctl,
- 	.release = subdev_close,
-+	.poll = subdev_poll,
- };
- 
- void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops)
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index 90022f5..68cbe48 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -37,6 +37,8 @@
- 
- struct v4l2_device;
- struct v4l2_ctrl_handler;
-+struct v4l2_event_subscription;
-+struct v4l2_fh;
- struct v4l2_subdev;
- struct tuner_setup;
- 
-@@ -165,6 +167,10 @@ struct v4l2_subdev_core_ops {
- 	int (*s_power)(struct v4l2_subdev *sd, int on);
- 	int (*interrupt_service_routine)(struct v4l2_subdev *sd,
- 						u32 status, bool *handled);
-+	int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
-+			       struct v4l2_event_subscription *sub);
-+	int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
-+				 struct v4l2_event_subscription *sub);
- };
- 
- /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio.
-@@ -424,6 +430,8 @@ struct v4l2_subdev_ops {
- #define V4L2_SUBDEV_FL_IS_SPI			(1U << 1)
- /* Set this flag if this subdev needs a device node. */
- #define V4L2_SUBDEV_FL_HAS_DEVNODE		(1U << 2)
-+/* Set this flag if this subdev generates events. */
-+#define V4L2_SUBDEV_FL_HAS_EVENTS		(1U << 3)
- 
- /* Each instance of a subdev driver should create this struct, either
-    stand-alone or embedded in a larger struct.
-@@ -446,6 +454,8 @@ struct v4l2_subdev {
- 	/* subdev device node */
- 	struct video_device devnode;
- 	unsigned int initialized;
-+	/* number of events to be allocated on open */
-+	unsigned int nevents;
- };
- 
- #define vdev_to_v4l2_subdev(vdev) \
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0008-media-Media-device-node-support.patch b/recipes-kernel/linux/linux-omap/media/0008-media-Media-device-node-support.patch
deleted file mode 100644
index fd8b495..0000000
--- a/recipes-kernel/linux/linux-omap/media/0008-media-Media-device-node-support.patch
+++ /dev/null
@@ -1,500 +0,0 @@
-From 27c789f3ae1d24212355d10857efb2d406d0fedd Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:39:56 +0100
-Subject: [PATCH 08/43] media: Media device node support
-
-The media_devnode structure provides support for registering and
-unregistering character devices using a dynamic major number. Reference
-counting is handled internally, making device drivers easier to write
-without having to solve the open/disconnect race condition issue over
-and over again.
-
-The code is based on video/v4l2-dev.c.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/Kconfig         |   13 ++
- drivers/media/Makefile        |   10 +-
- drivers/media/media-devnode.c |  321 +++++++++++++++++++++++++++++++++++++++++
- include/media/media-devnode.h |   97 +++++++++++++
- 4 files changed, 439 insertions(+), 2 deletions(-)
- create mode 100644 drivers/media/media-devnode.c
- create mode 100644 include/media/media-devnode.h
-
-diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
-index a28541b..6b946e6 100644
---- a/drivers/media/Kconfig
-+++ b/drivers/media/Kconfig
-@@ -14,6 +14,19 @@ if MEDIA_SUPPORT
- comment "Multimedia core support"
- 
- #
-+# Media controller
-+#
-+
-+config MEDIA_CONTROLLER
-+	bool "Media Controller API (EXPERIMENTAL)"
-+	depends on EXPERIMENTAL
-+	---help---
-+	  Enable the media controller API used to query media devices internal
-+	  topology and configure it dynamically.
-+
-+	  This API is mostly used by camera interfaces in embedded platforms.
-+
-+#
- # V4L core and enabled API's
- #
- 
-diff --git a/drivers/media/Makefile b/drivers/media/Makefile
-index 499b081..3a08991 100644
---- a/drivers/media/Makefile
-+++ b/drivers/media/Makefile
-@@ -2,7 +2,13 @@
- # Makefile for the kernel multimedia device drivers.
- #
- 
-+media-objs	:= media-devnode.o
-+
-+ifeq ($(CONFIG_MEDIA_CONTROLLER),y)
-+  obj-$(CONFIG_MEDIA_SUPPORT) += media.o
-+endif
-+
- obj-y += common/ IR/ video/
- 
--obj-$(CONFIG_VIDEO_DEV) += radio/
--obj-$(CONFIG_DVB_CORE)  += dvb/
-+obj-$(CONFIG_VIDEO_DEV)		+= radio/
-+obj-$(CONFIG_DVB_CORE)		+= dvb/
-diff --git a/drivers/media/media-devnode.c b/drivers/media/media-devnode.c
-new file mode 100644
-index 0000000..7804b70
---- /dev/null
-+++ b/drivers/media/media-devnode.c
-@@ -0,0 +1,321 @@
-+/*
-+ * Media device node
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Based on drivers/media/video/v4l2_dev.c code authored by
-+ *	Mauro Carvalho Chehab <mchehab at infradead.org> (version 2)
-+ *	Alan Cox, <alan at lxorguk.ukuu.org.uk> (version 1)
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ * --
-+ *
-+ * Generic media device node infrastructure to register and unregister
-+ * character devices using a dynamic major number and proper reference
-+ * counting.
-+ */
-+
-+#include <linux/errno.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/kmod.h>
-+#include <linux/slab.h>
-+#include <linux/mm.h>
-+#include <linux/smp_lock.h>
-+#include <linux/string.h>
-+#include <linux/types.h>
-+#include <linux/uaccess.h>
-+#include <asm/system.h>
-+
-+#include <media/media-devnode.h>
-+
-+#define MEDIA_NUM_DEVICES	256
-+#define MEDIA_NAME		"media"
-+
-+static dev_t media_dev_t;
-+
-+/*
-+ *	Active devices
-+ */
-+static DEFINE_MUTEX(media_devnode_lock);
-+static DECLARE_BITMAP(media_devnode_nums, MEDIA_NUM_DEVICES);
-+
-+/* Called when the last user of the media device exits. */
-+static void media_devnode_release(struct device *cd)
-+{
-+	struct media_devnode *mdev = to_media_devnode(cd);
-+
-+	mutex_lock(&media_devnode_lock);
-+
-+	/* Delete the cdev on this minor as well */
-+	cdev_del(&mdev->cdev);
-+
-+	/* Mark device node number as free */
-+	clear_bit(mdev->minor, media_devnode_nums);
-+
-+	mutex_unlock(&media_devnode_lock);
-+
-+	/* Release media_devnode and perform other cleanups as needed. */
-+	if (mdev->release)
-+		mdev->release(mdev);
-+}
-+
-+static struct bus_type media_bus_type = {
-+	.name = MEDIA_NAME,
-+};
-+
-+static ssize_t media_read(struct file *filp, char __user *buf,
-+		size_t sz, loff_t *off)
-+{
-+	struct media_devnode *mdev = media_devnode_data(filp);
-+
-+	if (!mdev->fops->read)
-+		return -EINVAL;
-+	if (!media_devnode_is_registered(mdev))
-+		return -EIO;
-+	return mdev->fops->read(filp, buf, sz, off);
-+}
-+
-+static ssize_t media_write(struct file *filp, const char __user *buf,
-+		size_t sz, loff_t *off)
-+{
-+	struct media_devnode *mdev = media_devnode_data(filp);
-+
-+	if (!mdev->fops->write)
-+		return -EINVAL;
-+	if (!media_devnode_is_registered(mdev))
-+		return -EIO;
-+	return mdev->fops->write(filp, buf, sz, off);
-+}
-+
-+static unsigned int media_poll(struct file *filp,
-+			       struct poll_table_struct *poll)
-+{
-+	struct media_devnode *mdev = media_devnode_data(filp);
-+
-+	if (!media_devnode_is_registered(mdev))
-+		return POLLERR | POLLHUP;
-+	if (!mdev->fops->poll)
-+		return DEFAULT_POLLMASK;
-+	return mdev->fops->poll(filp, poll);
-+}
-+
-+static long media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
-+{
-+	struct media_devnode *mdev = media_devnode_data(filp);
-+
-+	if (!mdev->fops->ioctl)
-+		return -ENOTTY;
-+
-+	if (!media_devnode_is_registered(mdev))
-+		return -EIO;
-+
-+	return mdev->fops->ioctl(filp, cmd, arg);
-+}
-+
-+/* Override for the open function */
-+static int media_open(struct inode *inode, struct file *filp)
-+{
-+	struct media_devnode *mdev;
-+	int ret;
-+
-+	/* Check if the media device is available. This needs to be done with
-+	 * the media_devnode_lock held to prevent an open/unregister race:
-+	 * without the lock, the device could be unregistered and freed between
-+	 * the media_devnode_is_registered() and get_device() calls, leading to
-+	 * a crash.
-+	 */
-+	mutex_lock(&media_devnode_lock);
-+	mdev = container_of(inode->i_cdev, struct media_devnode, cdev);
-+	/* return ENXIO if the media device has been removed
-+	   already or if it is not registered anymore. */
-+	if (!media_devnode_is_registered(mdev)) {
-+		mutex_unlock(&media_devnode_lock);
-+		return -ENXIO;
-+	}
-+	/* and increase the device refcount */
-+	get_device(&mdev->dev);
-+	mutex_unlock(&media_devnode_lock);
-+
-+	filp->private_data = mdev;
-+
-+	if (mdev->fops->open) {
-+		ret = mdev->fops->open(filp);
-+		if (ret) {
-+			put_device(&mdev->dev);
-+			return ret;
-+		}
-+	}
-+
-+	return 0;
-+}
-+
-+/* Override for the release function */
-+static int media_release(struct inode *inode, struct file *filp)
-+{
-+	struct media_devnode *mdev = media_devnode_data(filp);
-+	int ret = 0;
-+
-+	if (mdev->fops->release)
-+		mdev->fops->release(filp);
-+
-+	/* decrease the refcount unconditionally since the release()
-+	   return value is ignored. */
-+	put_device(&mdev->dev);
-+	filp->private_data = NULL;
-+	return ret;
-+}
-+
-+static const struct file_operations media_devnode_fops = {
-+	.owner = THIS_MODULE,
-+	.read = media_read,
-+	.write = media_write,
-+	.open = media_open,
-+	.unlocked_ioctl = media_ioctl,
-+	.release = media_release,
-+	.poll = media_poll,
-+	.llseek = no_llseek,
-+};
-+
-+/**
-+ * media_devnode_register - register a media device node
-+ * @mdev: media device node structure we want to register
-+ *
-+ * The registration code assigns minor numbers and registers the new device node
-+ * with the kernel. An error is returned if no free minor number can be found,
-+ * or if the registration of the device node fails.
-+ *
-+ * Zero is returned on success.
-+ *
-+ * Note that if the media_devnode_register call fails, the release() callback of
-+ * the media_devnode structure is *not* called, so the caller is responsible for
-+ * freeing any data.
-+ */
-+int __must_check media_devnode_register(struct media_devnode *mdev)
-+{
-+	int minor;
-+	int ret;
-+
-+	/* Part 1: Find a free minor number */
-+	mutex_lock(&media_devnode_lock);
-+	minor = find_next_zero_bit(media_devnode_nums, 0, MEDIA_NUM_DEVICES);
-+	if (minor == MEDIA_NUM_DEVICES) {
-+		mutex_unlock(&media_devnode_lock);
-+		printk(KERN_ERR "could not get a free minor\n");
-+		return -ENFILE;
-+	}
-+
-+	set_bit(mdev->minor, media_devnode_nums);
-+	mutex_unlock(&media_devnode_lock);
-+
-+	mdev->minor = minor;
-+
-+	/* Part 2: Initialize and register the character device */
-+	cdev_init(&mdev->cdev, &media_devnode_fops);
-+	mdev->cdev.owner = mdev->fops->owner;
-+
-+	ret = cdev_add(&mdev->cdev, MKDEV(MAJOR(media_dev_t), mdev->minor), 1);
-+	if (ret < 0) {
-+		printk(KERN_ERR "%s: cdev_add failed\n", __func__);
-+		goto error;
-+	}
-+
-+	/* Part 3: Register the media device */
-+	mdev->dev.bus = &media_bus_type;
-+	mdev->dev.devt = MKDEV(MAJOR(media_dev_t), mdev->minor);
-+	mdev->dev.release = media_devnode_release;
-+	if (mdev->parent)
-+		mdev->dev.parent = mdev->parent;
-+	dev_set_name(&mdev->dev, "media%d", mdev->minor);
-+	ret = device_register(&mdev->dev);
-+	if (ret < 0) {
-+		printk(KERN_ERR "%s: device_register failed\n", __func__);
-+		goto error;
-+	}
-+
-+	/* Part 4: Activate this minor. The char device can now be used. */
-+	set_bit(MEDIA_FLAG_REGISTERED, &mdev->flags);
-+
-+	return 0;
-+
-+error:
-+	cdev_del(&mdev->cdev);
-+	clear_bit(mdev->minor, media_devnode_nums);
-+	return ret;
-+}
-+
-+/**
-+ * media_devnode_unregister - unregister a media device node
-+ * @mdev: the device node to unregister
-+ *
-+ * This unregisters the passed device. Future open calls will be met with
-+ * errors.
-+ *
-+ * This function can safely be called if the device node has never been
-+ * registered or has already been unregistered.
-+ */
-+void media_devnode_unregister(struct media_devnode *mdev)
-+{
-+	/* Check if mdev was ever registered at all */
-+	if (!media_devnode_is_registered(mdev))
-+		return;
-+
-+	mutex_lock(&media_devnode_lock);
-+	clear_bit(MEDIA_FLAG_REGISTERED, &mdev->flags);
-+	mutex_unlock(&media_devnode_lock);
-+	device_unregister(&mdev->dev);
-+}
-+
-+/*
-+ *	Initialise media for linux
-+ */
-+static int __init media_devnode_init(void)
-+{
-+	int ret;
-+
-+	printk(KERN_INFO "Linux media interface: v0.10\n");
-+	ret = alloc_chrdev_region(&media_dev_t, 0, MEDIA_NUM_DEVICES,
-+				  MEDIA_NAME);
-+	if (ret < 0) {
-+		printk(KERN_WARNING "media: unable to allocate major\n");
-+		return ret;
-+	}
-+
-+	ret = bus_register(&media_bus_type);
-+	if (ret < 0) {
-+		unregister_chrdev_region(media_dev_t, MEDIA_NUM_DEVICES);
-+		printk(KERN_WARNING "media: bus_register failed\n");
-+		return -EIO;
-+	}
-+
-+	return 0;
-+}
-+
-+static void __exit media_devnode_exit(void)
-+{
-+	bus_unregister(&media_bus_type);
-+	unregister_chrdev_region(media_dev_t, MEDIA_NUM_DEVICES);
-+}
-+
-+module_init(media_devnode_init)
-+module_exit(media_devnode_exit)
-+
-+MODULE_AUTHOR("Laurent Pinchart <laurent.pinchart at ideasonboard.com>");
-+MODULE_DESCRIPTION("Device node registration for media drivers");
-+MODULE_LICENSE("GPL");
-diff --git a/include/media/media-devnode.h b/include/media/media-devnode.h
-new file mode 100644
-index 0000000..01cd034
---- /dev/null
-+++ b/include/media/media-devnode.h
-@@ -0,0 +1,97 @@
-+/*
-+ * Media device node
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ * --
-+ *
-+ * Common functions for media-related drivers to register and unregister media
-+ * device nodes.
-+ */
-+
-+#ifndef _MEDIA_DEVNODE_H
-+#define _MEDIA_DEVNODE_H
-+
-+#include <linux/poll.h>
-+#include <linux/fs.h>
-+#include <linux/device.h>
-+#include <linux/cdev.h>
-+
-+/*
-+ * Flag to mark the media_devnode struct as registered. Drivers must not touch
-+ * this flag directly, it will be set and cleared by media_devnode_register and
-+ * media_devnode_unregister.
-+ */
-+#define MEDIA_FLAG_REGISTERED	0
-+
-+struct media_file_operations {
-+	struct module *owner;
-+	ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
-+	ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
-+	unsigned int (*poll) (struct file *, struct poll_table_struct *);
-+	long (*ioctl) (struct file *, unsigned int, unsigned long);
-+	int (*open) (struct file *);
-+	int (*release) (struct file *);
-+};
-+
-+/**
-+ * struct media_devnode - Media device node
-+ * @parent:	parent device
-+ * @minor:	device node minor number
-+ * @flags:	flags, combination of the MEDIA_FLAG_* constants
-+ *
-+ * This structure represents a media-related device node.
-+ *
-+ * The @parent is a physical device. It must be set by core or device drivers
-+ * before registering the node.
-+ */
-+struct media_devnode {
-+	/* device ops */
-+	const struct media_file_operations *fops;
-+
-+	/* sysfs */
-+	struct device dev;		/* media device */
-+	struct cdev cdev;		/* character device */
-+	struct device *parent;		/* device parent */
-+
-+	/* device info */
-+	int minor;
-+	unsigned long flags;		/* Use bitops to access flags */
-+
-+	/* callbacks */
-+	void (*release)(struct media_devnode *mdev);
-+};
-+
-+/* dev to media_devnode */
-+#define to_media_devnode(cd) container_of(cd, struct media_devnode, dev)
-+
-+int __must_check media_devnode_register(struct media_devnode *mdev);
-+void media_devnode_unregister(struct media_devnode *mdev);
-+
-+static inline struct media_devnode *media_devnode_data(struct file *filp)
-+{
-+	return filp->private_data;
-+}
-+
-+static inline int media_devnode_is_registered(struct media_devnode *mdev)
-+{
-+	return test_bit(MEDIA_FLAG_REGISTERED, &mdev->flags);
-+}
-+
-+#endif /* _MEDIA_DEVNODE_H */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0009-media-Media-device.patch b/recipes-kernel/linux/linux-omap/media/0009-media-Media-device.patch
deleted file mode 100644
index d82c798..0000000
--- a/recipes-kernel/linux/linux-omap/media/0009-media-Media-device.patch
+++ /dev/null
@@ -1,398 +0,0 @@
-From 6bfbc237b86be01ad23b836ba047e76e23cc7a00 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:39:58 +0100
-Subject: [PATCH 09/43] media: Media device
-
-The media_device structure abstracts functions common to all kind of
-media devices (v4l2, dvb, alsa, ...). It manages media entities and
-offers a userspace API to discover and configure the media device
-internal topology.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/ABI/testing/sysfs-bus-media      |    6 ++
- Documentation/DocBook/media-entities.tmpl      |    2 +
- Documentation/DocBook/media.tmpl               |    3 +
- Documentation/DocBook/v4l/media-controller.xml |   56 +++++++++++++
- Documentation/media-framework.txt              |   67 ++++++++++++++++
- drivers/media/Makefile                         |    2 +-
- drivers/media/media-device.c                   |  100 ++++++++++++++++++++++++
- include/media/media-device.h                   |   69 ++++++++++++++++
- 8 files changed, 304 insertions(+), 1 deletions(-)
- create mode 100644 Documentation/ABI/testing/sysfs-bus-media
- create mode 100644 Documentation/DocBook/v4l/media-controller.xml
- create mode 100644 Documentation/media-framework.txt
- create mode 100644 drivers/media/media-device.c
- create mode 100644 include/media/media-device.h
-
-diff --git a/Documentation/ABI/testing/sysfs-bus-media b/Documentation/ABI/testing/sysfs-bus-media
-new file mode 100644
-index 0000000..7057e57
---- /dev/null
-+++ b/Documentation/ABI/testing/sysfs-bus-media
-@@ -0,0 +1,6 @@
-+What:		/sys/bus/media/devices/.../model
-+Date:		January 2011
-+Contact:	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+		linux-media at vger.kernel.org
-+Description:	Contains the device model name in UTF-8. The device version is
-+		is not be appended to the model name.
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index be34dcb..61d6f11 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -321,6 +321,8 @@
- <!ENTITY sub-media-entities SYSTEM "media-entities.tmpl">
- <!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
- 
-+<!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml">
-+
- <!-- Function Reference -->
- <!ENTITY close SYSTEM "v4l/func-close.xml">
- <!ENTITY ioctl SYSTEM "v4l/func-ioctl.xml">
-diff --git a/Documentation/DocBook/media.tmpl b/Documentation/DocBook/media.tmpl
-index f11048d..73464b0 100644
---- a/Documentation/DocBook/media.tmpl
-+++ b/Documentation/DocBook/media.tmpl
-@@ -106,6 +106,9 @@ Foundation. A copy of the license is included in the chapter entitled
- &sub-remote_controllers;
- </chapter>
- </part>
-+<part id="media_common">
-+&sub-media-controller;
-+</part>
- 
- &sub-fdl-appendix;
- 
-diff --git a/Documentation/DocBook/v4l/media-controller.xml b/Documentation/DocBook/v4l/media-controller.xml
-new file mode 100644
-index 0000000..253ddb4
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-controller.xml
-@@ -0,0 +1,56 @@
-+<partinfo>
-+  <authorgroup>
-+    <author>
-+      <firstname>Laurent</firstname>
-+      <surname>Pinchart</surname>
-+      <affiliation><address><email>laurent.pinchart at ideasonboard.com</email></address></affiliation>
-+      <contrib>Initial version.</contrib>
-+    </author>
-+  </authorgroup>
-+  <copyright>
-+    <year>2010</year>
-+    <holder>Laurent Pinchart</holder>
-+  </copyright>
-+
-+  <revhistory>
-+    <!-- Put document revisions here, newest first. -->
-+    <revision>
-+      <revnumber>1.0.0</revnumber>
-+      <date>2010-11-10</date>
-+      <authorinitials>lp</authorinitials>
-+      <revremark>Initial revision</revremark>
-+    </revision>
-+  </revhistory>
-+</partinfo>
-+
-+<title>Media Controller API</title>
-+
-+<chapter id="media_controller">
-+  <title>Media Controller</title>
-+
-+  <section id="media-controller-intro">
-+    <title>Introduction</title>
-+    <para>Media devices increasingly handle multiple related functions. Many USB
-+    cameras include microphones, video capture hardware can also output video,
-+    or SoC camera interfaces also perform memory-to-memory operations similar to
-+    video codecs.</para>
-+    <para>Independent functions, even when implemented in the same hardware, can
-+    be modelled as separate devices. A USB camera with a microphone will be
-+    presented to userspace applications as V4L2 and ALSA capture devices. The
-+    devices' relationships (when using a webcam, end-users shouldn't have to
-+    manually select the associated USB microphone), while not made available
-+    directly to applications by the drivers, can usually be retrieved from
-+    sysfs.</para>
-+    <para>With more and more advanced SoC devices being introduced, the current
-+    approach will not scale. Device topologies are getting increasingly complex
-+    and can't always be represented by a tree structure. Hardware blocks are
-+    shared between different functions, creating dependencies between seemingly
-+    unrelated devices.</para>
-+    <para>Kernel abstraction APIs such as V4L2 and ALSA provide means for
-+    applications to access hardware parameters. As newer hardware expose an
-+    increasingly high number of those parameters, drivers need to guess what
-+    applications really require based on limited information, thereby
-+    implementing policies that belong to userspace.</para>
-+    <para>The media controller API aims at solving those problems.</para>
-+  </section>
-+</chapter>
-diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
-new file mode 100644
-index 0000000..1844c3f
---- /dev/null
-+++ b/Documentation/media-framework.txt
-@@ -0,0 +1,67 @@
-+Linux kernel media framework
-+============================
-+
-+This document describes the Linux kernel media framework, its data structures,
-+functions and their usage.
-+
-+
-+Introduction
-+------------
-+
-+The media controller API is documented in DocBook format in
-+Documentation/DocBook/v4l/media-controller.xml. This document will focus on
-+the kernel-side implementation of the media framework.
-+
-+
-+Media device
-+------------
-+
-+A media device is represented by a struct media_device instance, defined in
-+include/media/media-device.h. Allocation of the structure is handled by the
-+media device driver, usually by embedding the media_device instance in a
-+larger driver-specific structure.
-+
-+Drivers register media device instances by calling
-+
-+	media_device_register(struct media_device *mdev);
-+
-+The caller is responsible for initializing the media_device structure before
-+registration. The following fields must be set:
-+
-+ - dev must point to the parent device (usually a pci_dev, usb_interface or
-+   platform_device instance).
-+
-+ - model must be filled with the device model name as a NUL-terminated UTF-8
-+   string. The device/model revision must not be stored in this field.
-+
-+The following fields are optional:
-+
-+ - serial is a unique serial number stored as a NUL-terminated ASCII string.
-+   The field is big enough to store a GUID in text form. If the hardware
-+   doesn't provide a unique serial number this field must be left empty.
-+
-+ - bus_info represents the location of the device in the system as a
-+   NUL-terminated ASCII string. For PCI/PCIe devices bus_info must be set to
-+   "PCI:" (or "PCIe:") followed by the value of pci_name(). For USB devices,
-+   the usb_make_path() function must be used. This field is used by
-+   applications to distinguish between otherwise identical devices that don't
-+   provide a serial number.
-+
-+ - hw_revision is the hardware device revision in a driver-specific format.
-+   When possible the revision should be formatted with the KERNEL_VERSION
-+   macro.
-+
-+ - driver_version is formatted with the KERNEL_VERSION macro. The version
-+   minor must be incremented when new features are added to the userspace API
-+   without breaking binary compatibility. The version major must be
-+   incremented when binary compatibility is broken.
-+
-+Upon successful registration a character device named media[0-9]+ is created.
-+The device major and minor numbers are dynamic. The model name is exported as
-+a sysfs attribute.
-+
-+Drivers unregister media device instances by calling
-+
-+	media_device_unregister(struct media_device *mdev);
-+
-+Unregistering a media device that hasn't been registered is *NOT* safe.
-diff --git a/drivers/media/Makefile b/drivers/media/Makefile
-index 3a08991..019d3e0 100644
---- a/drivers/media/Makefile
-+++ b/drivers/media/Makefile
-@@ -2,7 +2,7 @@
- # Makefile for the kernel multimedia device drivers.
- #
- 
--media-objs	:= media-devnode.o
-+media-objs	:= media-device.o media-devnode.o
- 
- ifeq ($(CONFIG_MEDIA_CONTROLLER),y)
-   obj-$(CONFIG_MEDIA_SUPPORT) += media.o
-diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
-new file mode 100644
-index 0000000..57a9c6b
---- /dev/null
-+++ b/drivers/media/media-device.c
-@@ -0,0 +1,100 @@
-+/*
-+ * Media device
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/ioctl.h>
-+
-+#include <media/media-device.h>
-+#include <media/media-devnode.h>
-+
-+static const struct media_file_operations media_device_fops = {
-+	.owner = THIS_MODULE,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * sysfs
-+ */
-+
-+static ssize_t show_model(struct device *cd,
-+			  struct device_attribute *attr, char *buf)
-+{
-+	struct media_device *mdev = to_media_device(to_media_devnode(cd));
-+
-+	return sprintf(buf, "%.*s\n", (int)sizeof(mdev->model), mdev->model);
-+}
-+
-+static DEVICE_ATTR(model, S_IRUGO, show_model, NULL);
-+
-+/* -----------------------------------------------------------------------------
-+ * Registration/unregistration
-+ */
-+
-+static void media_device_release(struct media_devnode *mdev)
-+{
-+}
-+
-+/**
-+ * media_device_register - register a media device
-+ * @mdev:	The media device
-+ *
-+ * The caller is responsible for initializing the media device before
-+ * registration. The following fields must be set:
-+ *
-+ * - dev must point to the parent device
-+ * - model must be filled with the device model name
-+ */
-+int __must_check media_device_register(struct media_device *mdev)
-+{
-+	int ret;
-+
-+	if (WARN_ON(mdev->dev == NULL || mdev->model[0] == 0))
-+		return -EINVAL;
-+
-+	/* Register the device node. */
-+	mdev->devnode.fops = &media_device_fops;
-+	mdev->devnode.parent = mdev->dev;
-+	mdev->devnode.release = media_device_release;
-+	ret = media_devnode_register(&mdev->devnode);
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = device_create_file(&mdev->devnode.dev, &dev_attr_model);
-+	if (ret < 0) {
-+		media_devnode_unregister(&mdev->devnode);
-+		return ret;
-+	}
-+
-+	return 0;
-+}
-+EXPORT_SYMBOL_GPL(media_device_register);
-+
-+/**
-+ * media_device_unregister - unregister a media device
-+ * @mdev:	The media device
-+ *
-+ */
-+void media_device_unregister(struct media_device *mdev)
-+{
-+	device_remove_file(&mdev->devnode.dev, &dev_attr_model);
-+	media_devnode_unregister(&mdev->devnode);
-+}
-+EXPORT_SYMBOL_GPL(media_device_unregister);
-diff --git a/include/media/media-device.h b/include/media/media-device.h
-new file mode 100644
-index 0000000..e11f01a
---- /dev/null
-+++ b/include/media/media-device.h
-@@ -0,0 +1,69 @@
-+/*
-+ * Media device
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#ifndef _MEDIA_DEVICE_H
-+#define _MEDIA_DEVICE_H
-+
-+#include <linux/device.h>
-+#include <linux/list.h>
-+
-+#include <media/media-devnode.h>
-+
-+/**
-+ * struct media_device - Media device
-+ * @dev:	Parent device
-+ * @devnode:	Media device node
-+ * @model:	Device model name
-+ * @serial:	Device serial number (optional)
-+ * @bus_info:	Unique and stable device location identifier
-+ * @hw_revision: Hardware device revision
-+ * @driver_version: Device driver version
-+ *
-+ * This structure represents an abstract high-level media device. It allows easy
-+ * access to entities and provides basic media device-level support. The
-+ * structure can be allocated directly or embedded in a larger structure.
-+ *
-+ * The parent @dev is a physical device. It must be set before registering the
-+ * media device.
-+ *
-+ * @model is a descriptive model name exported through sysfs. It doesn't have to
-+ * be unique.
-+ */
-+struct media_device {
-+	/* dev->driver_data points to this struct. */
-+	struct device *dev;
-+	struct media_devnode devnode;
-+
-+	char model[32];
-+	char serial[40];
-+	char bus_info[32];
-+	u32 hw_revision;
-+	u32 driver_version;
-+};
-+
-+/* media_devnode to media_device */
-+#define to_media_device(node) container_of(node, struct media_device, devnode)
-+
-+int __must_check media_device_register(struct media_device *mdev);
-+void media_device_unregister(struct media_device *mdev);
-+
-+#endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0010-media-Entities-pads-and-links.patch b/recipes-kernel/linux/linux-omap/media/0010-media-Entities-pads-and-links.patch
deleted file mode 100644
index be76233..0000000
--- a/recipes-kernel/linux/linux-omap/media/0010-media-Entities-pads-and-links.patch
+++ /dev/null
@@ -1,690 +0,0 @@
-From b4697e5a8ad1e564ea378d435c2ce190318c1027 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:40:00 +0100
-Subject: [PATCH 10/43] media: Entities, pads and links
-
-As video hardware pipelines become increasingly complex and
-configurable, the current hardware description through v4l2 subdevices
-reaches its limits. In addition to enumerating and configuring
-subdevices, video camera drivers need a way to discover and modify at
-runtime how those subdevices are connected. This is done through new
-elements called entities, pads and links.
-
-An entity is a basic media hardware building block. It can correspond to
-a large variety of logical blocks such as physical hardware devices
-(CMOS sensor for instance), logical hardware devices (a building block
-in a System-on-Chip image processing pipeline), DMA channels or physical
-connectors.
-
-A pad is a connection endpoint through which an entity can interact with
-other entities. Data (not restricted to video) produced by an entity
-flows from the entity's output to one or more entity inputs. Pads should
-not be confused with physical pins at chip boundaries.
-
-A link is a point-to-point oriented connection between two pads, either
-on the same entity or on different entities. Data flows from a source
-pad to a sink pad.
-
-Links are stored in the source entity. To make backwards graph walk
-faster, a copy of all links is also stored in the sink entity. The copy
-is known as a backlink and is only used to help graph traversal.
-
-The entity API is made of three functions:
-
-- media_entity_init() initializes an entity. The caller must provide an
-array of pads as well as an estimated number of links. The links array
-is allocated dynamically and will be reallocated if it grows beyond the
-initial estimate.
-
-- media_entity_cleanup() frees resources allocated for an entity. It
-must be called during the cleanup phase after unregistering the entity
-and before freeing it.
-
-- media_entity_create_link() creates a link between two entities. An
-entry in the link array of each entity is allocated and stores pointers
-to source and sink pads.
-
-When a media device is unregistered, all its entities are unregistered
-automatically.
-
-The code is based on Hans Verkuil <hverkuil at xs4all.nl> initial work.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/DocBook/v4l/media-controller.xml |   20 +++
- Documentation/media-framework.txt              |  151 ++++++++++++++++++++++++
- drivers/media/Makefile                         |    2 +-
- drivers/media/media-device.c                   |   56 +++++++++
- drivers/media/media-entity.c                   |  147 +++++++++++++++++++++++
- include/media/media-device.h                   |   19 +++
- include/media/media-entity.h                   |  122 +++++++++++++++++++
- 7 files changed, 516 insertions(+), 1 deletions(-)
- create mode 100644 drivers/media/media-entity.c
- create mode 100644 include/media/media-entity.h
-
-diff --git a/Documentation/DocBook/v4l/media-controller.xml b/Documentation/DocBook/v4l/media-controller.xml
-index 253ddb4..f89228d 100644
---- a/Documentation/DocBook/v4l/media-controller.xml
-+++ b/Documentation/DocBook/v4l/media-controller.xml
-@@ -53,4 +53,24 @@
-     implementing policies that belong to userspace.</para>
-     <para>The media controller API aims at solving those problems.</para>
-   </section>
-+
-+  <section id="media-controller-model">
-+    <title>Media device model</title>
-+    <para>Discovering a device internal topology, and configuring it at runtime,
-+    is one of the goals of the media controller API. To achieve this, hardware
-+    devices are modelled as an oriented graph of building blocks called entities
-+    connected through pads.</para>
-+    <para>An entity is a basic media hardware or software building block. It can
-+    correspond to a large variety of logical blocks such as physical hardware
-+    devices (CMOS sensor for instance), logical hardware devices (a building
-+    block in a System-on-Chip image processing pipeline), DMA channels or
-+    physical connectors.</para>
-+    <para>A pad is a connection endpoint through which an entity can interact
-+    with other entities. Data (not restricted to video) produced by an entity
-+    flows from the entity's output to one or more entity inputs. Pads should not
-+    be confused with physical pins at chip boundaries.</para>
-+    <para>A link is a point-to-point oriented connection between two pads,
-+    either on the same entity or on different entities. Data flows from a source
-+    pad to a sink pad.</para>
-+  </section>
- </chapter>
-diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
-index 1844c3f..b252cf9 100644
---- a/Documentation/media-framework.txt
-+++ b/Documentation/media-framework.txt
-@@ -13,6 +13,30 @@ Documentation/DocBook/v4l/media-controller.xml. This document will focus on
- the kernel-side implementation of the media framework.
- 
- 
-+Abstract media device model
-+---------------------------
-+
-+Discovering a device internal topology, and configuring it at runtime, is one
-+of the goals of the media framework. To achieve this, hardware devices are
-+modeled as an oriented graph of building blocks called entities connected
-+through pads.
-+
-+An entity is a basic media hardware building block. It can correspond to
-+a large variety of logical blocks such as physical hardware devices
-+(CMOS sensor for instance), logical hardware devices (a building block
-+in a System-on-Chip image processing pipeline), DMA channels or physical
-+connectors.
-+
-+A pad is a connection endpoint through which an entity can interact with
-+other entities. Data (not restricted to video) produced by an entity
-+flows from the entity's output to one or more entity inputs. Pads should
-+not be confused with physical pins at chip boundaries.
-+
-+A link is a point-to-point oriented connection between two pads, either
-+on the same entity or on different entities. Data flows from a source
-+pad to a sink pad.
-+
-+
- Media device
- ------------
- 
-@@ -65,3 +89,130 @@ Drivers unregister media device instances by calling
- 	media_device_unregister(struct media_device *mdev);
- 
- Unregistering a media device that hasn't been registered is *NOT* safe.
-+
-+
-+Entities, pads and links
-+------------------------
-+
-+- Entities
-+
-+Entities are represented by a struct media_entity instance, defined in
-+include/media/media-entity.h. The structure is usually embedded into a
-+higher-level structure, such as a v4l2_subdev or video_device instance,
-+although drivers can allocate entities directly.
-+
-+Drivers initialize entities by calling
-+
-+	media_entity_init(struct media_entity *entity, u16 num_pads,
-+			  struct media_pad *pads, u16 extra_links);
-+
-+The media_entity name, type, flags, revision and group_id fields can be
-+initialized before or after calling media_entity_init. Entities embedded in
-+higher-level standard structures can have some of those fields set by the
-+higher-level framework.
-+
-+As the number of pads is known in advance, the pads array is not allocated
-+dynamically but is managed by the entity driver. Most drivers will embed the
-+pads array in a driver-specific structure, avoiding dynamic allocation.
-+
-+Drivers must set the direction of every pad in the pads array before calling
-+media_entity_init. The function will initialize the other pads fields.
-+
-+Unlike the number of pads, the total number of links isn't always known in
-+advance by the entity driver. As an initial estimate, media_entity_init
-+pre-allocates a number of links equal to the number of pads plus an optional
-+number of extra links. The links array will be reallocated if it grows beyond
-+the initial estimate.
-+
-+Drivers register entities with a media device by calling
-+
-+	media_device_register_entity(struct media_device *mdev,
-+				     struct media_entity *entity);
-+
-+Entities are identified by a unique positive integer ID. Drivers can provide an
-+ID by filling the media_entity id field prior to registration, or request the
-+media controller framework to assign an ID automatically. Drivers that provide
-+IDs manually must ensure that all IDs are unique. IDs are not guaranteed to be
-+contiguous even when they are all assigned automatically by the framework.
-+
-+Drivers unregister entities by calling
-+
-+	media_device_unregister_entity(struct media_entity *entity);
-+
-+Unregistering an entity will not change the IDs of the other entities, and the
-+ID will never be reused for a newly registered entity.
-+
-+When a media device is unregistered, all its entities are unregistered
-+automatically. No manual entities unregistration is then required.
-+
-+Drivers free resources associated with an entity by calling
-+
-+	media_entity_cleanup(struct media_entity *entity);
-+
-+This function must be called during the cleanup phase after unregistering the
-+entity. Note that the media_entity instance itself must be freed explicitly by
-+the driver if required.
-+
-+Entities have flags that describe the entity capabilities and state.
-+
-+	MEDIA_ENT_FL_DEFAULT indicates the default entity for a given type.
-+	This can be used to report the default audio and video devices or the
-+	default camera sensor.
-+
-+Logical entity groups can be defined by setting the group ID of all member
-+entities to the same non-zero value. An entity group serves no purpose in the
-+kernel, but is reported to userspace during entities enumeration. The group_id
-+field belongs to the media device driver and must not by touched by entity
-+drivers.
-+
-+Media device drivers should define groups if several entities are logically
-+bound together. Example usages include reporting
-+
-+	- ALSA, VBI and video nodes that carry the same media stream
-+	- lens and flash controllers associated with a sensor
-+
-+- Pads
-+
-+Pads are represented by a struct media_pad instance, defined in
-+include/media/media-entity.h. Each entity stores its pads in a pads array
-+managed by the entity driver. Drivers usually embed the array in a
-+driver-specific structure.
-+
-+Pads are identified by their entity and their 0-based index in the pads array.
-+Both information are stored in the media_pad structure, making the media_pad
-+pointer the canonical way to store and pass link references.
-+
-+Pads have flags that describe the pad capabilities and state.
-+
-+	MEDIA_PAD_FL_INPUT indicates that the pad supports sinking data.
-+	MEDIA_PAD_FL_OUTPUT indicates that the pad supports sourcing data.
-+
-+One and only one of MEDIA_PAD_FL_INPUT and MEDIA_PAD_FL_OUTPUT must be set for
-+each pad.
-+
-+- Links
-+
-+Links are represented by a struct media_link instance, defined in
-+include/media/media-entity.h. Each entity stores all links originating at or
-+targetting any of its pads in a links array. A given link is thus stored
-+twice, once in the source entity and once in the target entity. The array is
-+pre-allocated and grows dynamically as needed.
-+
-+Drivers create links by calling
-+
-+	media_entity_create_link(struct media_entity *source, u16 source_pad,
-+				 struct media_entity *sink,   u16 sink_pad,
-+				 u32 flags);
-+
-+An entry in the link array of each entity is allocated and stores pointers
-+to source and sink pads.
-+
-+Links have flags that describe the link capabilities and state.
-+
-+	MEDIA_LNK_FL_ENABLED indicates that the link is enabled and can be used
-+	to transfer media data. When two or more links target a sink pad, only
-+	one of them can be enabled at a time.
-+	MEDIA_LNK_FL_IMMUTABLE indicates that the link enabled state can't be
-+	modified at runtime. If MEDIA_LNK_FL_IMMUTABLE is set, then
-+	MEDIA_LNK_FL_ENABLED must also be set since an immutable link is always
-+	enabled.
-diff --git a/drivers/media/Makefile b/drivers/media/Makefile
-index 019d3e0..b890248 100644
---- a/drivers/media/Makefile
-+++ b/drivers/media/Makefile
-@@ -2,7 +2,7 @@
- # Makefile for the kernel multimedia device drivers.
- #
- 
--media-objs	:= media-device.o media-devnode.o
-+media-objs	:= media-device.o media-devnode.o media-entity.o
- 
- ifeq ($(CONFIG_MEDIA_CONTROLLER),y)
-   obj-$(CONFIG_MEDIA_SUPPORT) += media.o
-diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
-index 57a9c6b..b8a3ace 100644
---- a/drivers/media/media-device.c
-+++ b/drivers/media/media-device.c
-@@ -25,6 +25,7 @@
- 
- #include <media/media-device.h>
- #include <media/media-devnode.h>
-+#include <media/media-entity.h>
- 
- static const struct media_file_operations media_device_fops = {
- 	.owner = THIS_MODULE,
-@@ -69,6 +70,10 @@ int __must_check media_device_register(struct media_device *mdev)
- 	if (WARN_ON(mdev->dev == NULL || mdev->model[0] == 0))
- 		return -EINVAL;
- 
-+	mdev->entity_id = 1;
-+	INIT_LIST_HEAD(&mdev->entities);
-+	spin_lock_init(&mdev->lock);
-+
- 	/* Register the device node. */
- 	mdev->devnode.fops = &media_device_fops;
- 	mdev->devnode.parent = mdev->dev;
-@@ -94,7 +99,58 @@ EXPORT_SYMBOL_GPL(media_device_register);
-  */
- void media_device_unregister(struct media_device *mdev)
- {
-+	struct media_entity *entity;
-+	struct media_entity *next;
-+
-+	list_for_each_entry_safe(entity, next, &mdev->entities, list)
-+		media_device_unregister_entity(entity);
-+
- 	device_remove_file(&mdev->devnode.dev, &dev_attr_model);
- 	media_devnode_unregister(&mdev->devnode);
- }
- EXPORT_SYMBOL_GPL(media_device_unregister);
-+
-+/**
-+ * media_device_register_entity - Register an entity with a media device
-+ * @mdev:	The media device
-+ * @entity:	The entity
-+ */
-+int __must_check media_device_register_entity(struct media_device *mdev,
-+					      struct media_entity *entity)
-+{
-+	/* Warn if we apparently re-register an entity */
-+	WARN_ON(entity->parent != NULL);
-+	entity->parent = mdev;
-+
-+	spin_lock(&mdev->lock);
-+	if (entity->id == 0)
-+		entity->id = mdev->entity_id++;
-+	else
-+		mdev->entity_id = max(entity->id + 1, mdev->entity_id);
-+	list_add_tail(&entity->list, &mdev->entities);
-+	spin_unlock(&mdev->lock);
-+
-+	return 0;
-+}
-+EXPORT_SYMBOL_GPL(media_device_register_entity);
-+
-+/**
-+ * media_device_unregister_entity - Unregister an entity
-+ * @entity:	The entity
-+ *
-+ * If the entity has never been registered this function will return
-+ * immediately.
-+ */
-+void media_device_unregister_entity(struct media_entity *entity)
-+{
-+	struct media_device *mdev = entity->parent;
-+
-+	if (mdev == NULL)
-+		return;
-+
-+	spin_lock(&mdev->lock);
-+	list_del(&entity->list);
-+	spin_unlock(&mdev->lock);
-+	entity->parent = NULL;
-+}
-+EXPORT_SYMBOL_GPL(media_device_unregister_entity);
-diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
-new file mode 100644
-index 0000000..e4ba2bc
---- /dev/null
-+++ b/drivers/media/media-entity.c
-@@ -0,0 +1,147 @@
-+/*
-+ * Media entity
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <media/media-entity.h>
-+
-+/**
-+ * media_entity_init - Initialize a media entity
-+ *
-+ * @num_pads: Total number of input and output pads.
-+ * @extra_links: Initial estimate of the number of extra links.
-+ * @pads: Array of 'num_pads' pads.
-+ *
-+ * The total number of pads is an intrinsic property of entities known by the
-+ * entity driver, while the total number of links depends on hardware design
-+ * and is an extrinsic property unknown to the entity driver. However, in most
-+ * use cases the entity driver can guess the number of links which can safely
-+ * be assumed to be equal to or larger than the number of pads.
-+ *
-+ * For those reasons the links array can be preallocated based on the entity
-+ * driver guess and will be reallocated later if extra links need to be
-+ * created.
-+ *
-+ * This function allocates a links array with enough space to hold at least
-+ * 'num_pads' + 'extra_links' elements. The media_entity::max_links field will
-+ * be set to the number of allocated elements.
-+ *
-+ * The pads array is managed by the entity driver and passed to
-+ * media_entity_init() where its pointer will be stored in the entity structure.
-+ */
-+int
-+media_entity_init(struct media_entity *entity, u16 num_pads,
-+		  struct media_pad *pads, u16 extra_links)
-+{
-+	struct media_link *links;
-+	unsigned int max_links = num_pads + extra_links;
-+	unsigned int i;
-+
-+	links = kzalloc(max_links * sizeof(links[0]), GFP_KERNEL);
-+	if (links == NULL)
-+		return -ENOMEM;
-+
-+	entity->group_id = 0;
-+	entity->max_links = max_links;
-+	entity->num_links = 0;
-+	entity->num_backlinks = 0;
-+	entity->num_pads = num_pads;
-+	entity->pads = pads;
-+	entity->links = links;
-+
-+	for (i = 0; i < num_pads; i++) {
-+		pads[i].entity = entity;
-+		pads[i].index = i;
-+	}
-+
-+	return 0;
-+}
-+EXPORT_SYMBOL_GPL(media_entity_init);
-+
-+void
-+media_entity_cleanup(struct media_entity *entity)
-+{
-+	kfree(entity->links);
-+}
-+EXPORT_SYMBOL_GPL(media_entity_cleanup);
-+
-+static struct media_link *media_entity_add_link(struct media_entity *entity)
-+{
-+	if (entity->num_links >= entity->max_links) {
-+		struct media_link *links = entity->links;
-+		unsigned int max_links = entity->max_links + 2;
-+		unsigned int i;
-+
-+		links = krealloc(links, max_links * sizeof(*links), GFP_KERNEL);
-+		if (links == NULL)
-+			return NULL;
-+
-+		for (i = 0; i < entity->num_links; i++)
-+			links[i].reverse->reverse = &links[i];
-+
-+		entity->max_links = max_links;
-+		entity->links = links;
-+	}
-+
-+	return &entity->links[entity->num_links++];
-+}
-+
-+int
-+media_entity_create_link(struct media_entity *source, u16 source_pad,
-+			 struct media_entity *sink, u16 sink_pad, u32 flags)
-+{
-+	struct media_link *link;
-+	struct media_link *backlink;
-+
-+	BUG_ON(source == NULL || sink == NULL);
-+	BUG_ON(source_pad >= source->num_pads);
-+	BUG_ON(sink_pad >= sink->num_pads);
-+
-+	link = media_entity_add_link(source);
-+	if (link == NULL)
-+		return -ENOMEM;
-+
-+	link->source = &source->pads[source_pad];
-+	link->sink = &sink->pads[sink_pad];
-+	link->flags = flags;
-+
-+	/* Create the backlink. Backlinks are used to help graph traversal and
-+	 * are not reported to userspace.
-+	 */
-+	backlink = media_entity_add_link(sink);
-+	if (backlink == NULL) {
-+		source->num_links--;
-+		return -ENOMEM;
-+	}
-+
-+	backlink->source = &source->pads[source_pad];
-+	backlink->sink = &sink->pads[sink_pad];
-+	backlink->flags = flags;
-+
-+	link->reverse = backlink;
-+	backlink->reverse = link;
-+
-+	sink->num_backlinks++;
-+
-+	return 0;
-+}
-+EXPORT_SYMBOL_GPL(media_entity_create_link);
-diff --git a/include/media/media-device.h b/include/media/media-device.h
-index e11f01a..0b1ecf5 100644
---- a/include/media/media-device.h
-+++ b/include/media/media-device.h
-@@ -25,8 +25,10 @@
- 
- #include <linux/device.h>
- #include <linux/list.h>
-+#include <linux/spinlock.h>
- 
- #include <media/media-devnode.h>
-+#include <media/media-entity.h>
- 
- /**
-  * struct media_device - Media device
-@@ -37,6 +39,9 @@
-  * @bus_info:	Unique and stable device location identifier
-  * @hw_revision: Hardware device revision
-  * @driver_version: Device driver version
-+ * @entity_id:	ID of the next entity to be registered
-+ * @entities:	List of registered entities
-+ * @lock:	Entities list lock
-  *
-  * This structure represents an abstract high-level media device. It allows easy
-  * access to entities and provides basic media device-level support. The
-@@ -58,6 +63,12 @@ struct media_device {
- 	char bus_info[32];
- 	u32 hw_revision;
- 	u32 driver_version;
-+
-+	u32 entity_id;
-+	struct list_head entities;
-+
-+	/* Protects the entities list */
-+	spinlock_t lock;
- };
- 
- /* media_devnode to media_device */
-@@ -66,4 +77,12 @@ struct media_device {
- int __must_check media_device_register(struct media_device *mdev);
- void media_device_unregister(struct media_device *mdev);
- 
-+int __must_check media_device_register_entity(struct media_device *mdev,
-+					      struct media_entity *entity);
-+void media_device_unregister_entity(struct media_entity *entity);
-+
-+/* Iterate over all entities. */
-+#define media_device_for_each_entity(entity, mdev)			\
-+	list_for_each_entry(entity, &(mdev)->entities, list)
-+
- #endif
-diff --git a/include/media/media-entity.h b/include/media/media-entity.h
-new file mode 100644
-index 0000000..7cf9135
---- /dev/null
-+++ b/include/media/media-entity.h
-@@ -0,0 +1,122 @@
-+/*
-+ * Media entity
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#ifndef _MEDIA_ENTITY_H
-+#define _MEDIA_ENTITY_H
-+
-+#include <linux/list.h>
-+
-+#define MEDIA_ENT_TYPE_SHIFT		16
-+#define MEDIA_ENT_TYPE_MASK		0x00ff0000
-+#define MEDIA_ENT_SUBTYPE_MASK		0x0000ffff
-+
-+#define MEDIA_ENT_T_DEVNODE		(1 << MEDIA_ENTITY_TYPE_SHIFT)
-+#define MEDIA_ENT_T_DEVNODE_V4L		(MEDIA_ENTITY_T_DEVNODE + 1)
-+#define MEDIA_ENT_T_DEVNODE_FB		(MEDIA_ENTITY_T_DEVNODE + 2)
-+#define MEDIA_ENT_T_DEVNODE_ALSA	(MEDIA_ENTITY_T_DEVNODE + 3)
-+#define MEDIA_ENT_T_DEVNODE_DVB		(MEDIA_ENTITY_T_DEVNODE + 4)
-+
-+#define MEDIA_ENT_T_V4L2_SUBDEV		(2 << MEDIA_ENTITY_TYPE_SHIFT)
-+#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR	(MEDIA_ENTITY_T_V4L2_SUBDEV + 1)
-+#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH	(MEDIA_ENTITY_T_V4L2_SUBDEV + 2)
-+#define MEDIA_ENT_T_V4L2_SUBDEV_LENS	(MEDIA_ENTITY_T_V4L2_SUBDEV + 3)
-+
-+#define MEDIA_ENT_FL_DEFAULT		(1 << 0)
-+
-+#define MEDIA_LNK_FL_ENABLED		(1 << 0)
-+#define MEDIA_LNK_FL_IMMUTABLE		(1 << 1)
-+
-+#define MEDIA_PAD_FL_INPUT		(1 << 0)
-+#define MEDIA_PAD_FL_OUTPUT		(1 << 1)
-+
-+struct media_link {
-+	struct media_pad *source;	/* Source pad */
-+	struct media_pad *sink;		/* Sink pad  */
-+	struct media_link *reverse;	/* Link in the reverse direction */
-+	unsigned long flags;		/* Link flags (MEDIA_LNK_FL_*) */
-+};
-+
-+struct media_pad {
-+	struct media_entity *entity;	/* Entity this pad belongs to */
-+	u16 index;			/* Pad index in the entity pads array */
-+	unsigned long flags;		/* Pad flags (MEDIA_PAD_FL_*) */
-+};
-+
-+struct media_entity {
-+	struct list_head list;
-+	struct media_device *parent;	/* Media device this entity belongs to*/
-+	u32 id;				/* Entity ID, unique in the parent media
-+					 * device context */
-+	const char *name;		/* Entity name */
-+	u32 type;			/* Entity type (MEDIA_ENT_T_*) */
-+	u32 revision;			/* Entity revision, driver specific */
-+	unsigned long flags;		/* Entity flags (MEDIA_ENT_FL_*) */
-+	u32 group_id;			/* Entity group ID */
-+
-+	u16 num_pads;			/* Number of input and output pads */
-+	u16 num_links;			/* Number of existing links, both
-+					 * enabled and disabled */
-+	u16 num_backlinks;		/* Number of backlinks */
-+	u16 max_links;			/* Maximum number of links */
-+
-+	struct media_pad *pads;		/* Pads array (num_pads elements) */
-+	struct media_link *links;	/* Links array (max_links elements)*/
-+
-+	union {
-+		/* Node specifications */
-+		struct {
-+			u32 major;
-+			u32 minor;
-+		} v4l;
-+		struct {
-+			u32 major;
-+			u32 minor;
-+		} fb;
-+		struct {
-+			u32 card;
-+			u32 device;
-+			u32 subdevice;
-+		} alsa;
-+		int dvb;
-+
-+		/* Sub-device specifications */
-+		/* Nothing needed yet */
-+	};
-+};
-+
-+static inline u32 media_entity_type(struct media_entity *entity)
-+{
-+	return entity->type & MEDIA_ENT_TYPE_MASK;
-+}
-+
-+static inline u32 media_entity_subtype(struct media_entity *entity)
-+{
-+	return entity->type & MEDIA_ENT_SUBTYPE_MASK;
-+}
-+
-+int media_entity_init(struct media_entity *entity, u16 num_pads,
-+		struct media_pad *pads, u16 extra_links);
-+void media_entity_cleanup(struct media_entity *entity);
-+int media_entity_create_link(struct media_entity *source, u16 source_pad,
-+		struct media_entity *sink, u16 sink_pad, u32 flags);
-+
-+#endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0011-media-Entity-graph-traversal.patch b/recipes-kernel/linux/linux-omap/media/0011-media-Entity-graph-traversal.patch
deleted file mode 100644
index 15fc612..0000000
--- a/recipes-kernel/linux/linux-omap/media/0011-media-Entity-graph-traversal.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From 5b45472e8a692e6acea3cb6d601b44c17ea8d59e Mon Sep 17 00:00:00 2001
-From: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
-Date: Sun, 7 Mar 2010 21:14:14 +0200
-Subject: [PATCH 11/43] media: Entity graph traversal
-
-Add media entity graph traversal. The traversal follows enabled links by
-depth first. Traversing graph backwards is prevented by comparing the next
-possible entity in the graph with the previous one. Multiply connected
-graphs are thus not supported.
-
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Vimarsh Zutshi <vimarsh.zutshi at nokia.com>
----
- Documentation/media-framework.txt |   42 +++++++++++++
- drivers/media/media-entity.c      |  115 +++++++++++++++++++++++++++++++++++++
- include/media/media-entity.h      |   15 +++++
- 3 files changed, 172 insertions(+), 0 deletions(-)
-
-diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
-index b252cf9..88fe379 100644
---- a/Documentation/media-framework.txt
-+++ b/Documentation/media-framework.txt
-@@ -216,3 +216,45 @@ Links have flags that describe the link capabilities and state.
- 	modified at runtime. If MEDIA_LNK_FL_IMMUTABLE is set, then
- 	MEDIA_LNK_FL_ENABLED must also be set since an immutable link is always
- 	enabled.
-+
-+
-+Graph traversal
-+---------------
-+
-+The media framework provides APIs to iterate over entities in a graph.
-+
-+To iterate over all entities belonging to a media device, drivers can use the
-+media_device_for_each_entity macro, defined in include/media/media-device.h.
-+
-+	struct media_entity *entity;
-+
-+	media_device_for_each_entity(entity, mdev) {
-+		/* entity will point to each entity in turn */
-+		...
-+	}
-+
-+Drivers might also need to iterate over all entities in a graph that can be
-+reached only through enabled links starting at a given entity. The media
-+framework provides a depth-first graph traversal API for that purpose.
-+
-+Note that graphs with cycles (whether directed or undirected) are *NOT*
-+supported by the graph traversal API. To prevent infinite loops, the graph
-+traversal code limits the maximum depth to MEDIA_ENTITY_ENUM_MAX_DEPTH,
-+currently defined as 16.
-+
-+Drivers initiate a graph traversal by calling
-+
-+	media_entity_graph_walk_start(struct media_entity_graph *graph,
-+				      struct media_entity *entity);
-+
-+The graph structure, provided by the caller, is initialized to start graph
-+traversal at the given entity.
-+
-+Drivers can then retrieve the next entity by calling
-+
-+	media_entity_graph_walk_next(struct media_entity_graph *graph);
-+
-+When the graph traversal is complete the function will return NULL.
-+
-+Graph traversal can be interrupted at any moment. No cleanup function call is
-+required and the graph structure can be freed normally.
-diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
-index e4ba2bc..a805f20 100644
---- a/drivers/media/media-entity.c
-+++ b/drivers/media/media-entity.c
-@@ -84,6 +84,121 @@ media_entity_cleanup(struct media_entity *entity)
- }
- EXPORT_SYMBOL_GPL(media_entity_cleanup);
- 
-+/* -----------------------------------------------------------------------------
-+ * Graph traversal
-+ */
-+
-+static struct media_entity *
-+media_entity_other(struct media_entity *entity, struct media_link *link)
-+{
-+	if (link->source->entity == entity)
-+		return link->sink->entity;
-+	else
-+		return link->source->entity;
-+}
-+
-+/* push an entity to traversal stack */
-+static void stack_push(struct media_entity_graph *graph,
-+		       struct media_entity *entity)
-+{
-+	if (graph->top == MEDIA_ENTITY_ENUM_MAX_DEPTH - 1) {
-+		WARN_ON(1);
-+		return;
-+	}
-+	graph->top++;
-+	graph->stack[graph->top].link = 0;
-+	graph->stack[graph->top].entity = entity;
-+}
-+
-+static struct media_entity *stack_pop(struct media_entity_graph *graph)
-+{
-+	struct media_entity *entity;
-+
-+	entity = graph->stack[graph->top].entity;
-+	graph->top--;
-+
-+	return entity;
-+}
-+
-+#define stack_peek(en)	((en)->stack[(en)->top - 1].entity)
-+#define link_top(en)	((en)->stack[(en)->top].link)
-+#define stack_top(en)	((en)->stack[(en)->top].entity)
-+
-+/**
-+ * media_entity_graph_walk_start - Start walking the media graph at a given entity
-+ * @graph: Media graph structure that will be used to walk the graph
-+ * @entity: Starting entity
-+ *
-+ * This function initializes the graph traversal structure to walk the entities
-+ * graph starting at the given entity. The traversal structure must not be
-+ * modified by the caller during graph traversal. When done the structure can
-+ * safely be freed.
-+ */
-+void media_entity_graph_walk_start(struct media_entity_graph *graph,
-+				   struct media_entity *entity)
-+{
-+	graph->top = 0;
-+	graph->stack[graph->top].entity = NULL;
-+	stack_push(graph, entity);
-+}
-+EXPORT_SYMBOL_GPL(media_entity_graph_walk_start);
-+
-+/**
-+ * media_entity_graph_walk_next - Get the next entity in the graph
-+ * @graph: Media graph structure
-+ *
-+ * Perform a depth-first traversal of the given media entities graph.
-+ *
-+ * The graph structure must have been previously initialized with a call to
-+ * media_entity_graph_walk_start().
-+ *
-+ * Return the next entity in the graph or NULL if the whole graph have been
-+ * traversed.
-+ */
-+struct media_entity *
-+media_entity_graph_walk_next(struct media_entity_graph *graph)
-+{
-+	if (stack_top(graph) == NULL)
-+		return NULL;
-+
-+	/*
-+	 * Depth first search. Push entity to stack and continue from
-+	 * top of the stack until no more entities on the level can be
-+	 * found.
-+	 */
-+	while (link_top(graph) < stack_top(graph)->num_links) {
-+		struct media_entity *entity = stack_top(graph);
-+		struct media_link *link = &entity->links[link_top(graph)];
-+		struct media_entity *next;
-+
-+		/* The link is not enabled so we do not follow. */
-+		if (!(link->flags & MEDIA_LNK_FL_ENABLED)) {
-+			link_top(graph)++;
-+			continue;
-+		}
-+
-+		/* Get the entity in the other end of the link . */
-+		next = media_entity_other(entity, link);
-+
-+		/* Was it the entity we came here from? */
-+		if (next == stack_peek(graph)) {
-+			link_top(graph)++;
-+			continue;
-+		}
-+
-+		/* Push the new entity to stack and start over. */
-+		link_top(graph)++;
-+		stack_push(graph, next);
-+	}
-+
-+	return stack_pop(graph);
-+}
-+EXPORT_SYMBOL_GPL(media_entity_graph_walk_next);
-+
-+/* -----------------------------------------------------------------------------
-+ * Links management
-+ */
-+
- static struct media_link *media_entity_add_link(struct media_entity *entity)
- {
- 	if (entity->num_links >= entity->max_links) {
-diff --git a/include/media/media-entity.h b/include/media/media-entity.h
-index 7cf9135..b82f824 100644
---- a/include/media/media-entity.h
-+++ b/include/media/media-entity.h
-@@ -113,10 +113,25 @@ static inline u32 media_entity_subtype(struct media_entity *entity)
- 	return entity->type & MEDIA_ENT_SUBTYPE_MASK;
- }
- 
-+#define MEDIA_ENTITY_ENUM_MAX_DEPTH	16
-+
-+struct media_entity_graph {
-+	struct {
-+		struct media_entity *entity;
-+		int link;
-+	} stack[MEDIA_ENTITY_ENUM_MAX_DEPTH];
-+	int top;
-+};
-+
- int media_entity_init(struct media_entity *entity, u16 num_pads,
- 		struct media_pad *pads, u16 extra_links);
- void media_entity_cleanup(struct media_entity *entity);
- int media_entity_create_link(struct media_entity *source, u16 source_pad,
- 		struct media_entity *sink, u16 sink_pad, u32 flags);
- 
-+void media_entity_graph_walk_start(struct media_entity_graph *graph,
-+		struct media_entity *entity);
-+struct media_entity *
-+media_entity_graph_walk_next(struct media_entity_graph *graph);
-+
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0012-media-Entity-use-count.patch b/recipes-kernel/linux/linux-omap/media/0012-media-Entity-use-count.patch
deleted file mode 100644
index bc850e4..0000000
--- a/recipes-kernel/linux/linux-omap/media/0012-media-Entity-use-count.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From 3be6a2d10ff0cad0b240c65054da28395b014f82 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Sun, 7 Mar 2010 20:04:59 +0200
-Subject: [PATCH 12/43] media: Entity use count
-
-Due to the wide differences between drivers regarding power management
-needs, the media controller does not implement power management.
-However, the media_entity structure includes a use_count field that
-media drivers can use to track the number of users of every entity for
-power management needs.
-
-The use_count field is owned by media drivers and must not be touched by
-entity drivers. Access to the field must be protected by the media
-device graph_mutex lock.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/media-framework.txt |   13 ++++++++++
- drivers/media/media-device.c      |    1 +
- drivers/media/media-entity.c      |   46 +++++++++++++++++++++++++++++++++++++
- include/media/media-device.h      |    4 +++
- include/media/media-entity.h      |    5 ++++
- 5 files changed, 69 insertions(+), 0 deletions(-)
-
-diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
-index 88fe379..9017a41 100644
---- a/Documentation/media-framework.txt
-+++ b/Documentation/media-framework.txt
-@@ -258,3 +258,16 @@ When the graph traversal is complete the function will return NULL.
- 
- Graph traversal can be interrupted at any moment. No cleanup function call is
- required and the graph structure can be freed normally.
-+
-+
-+Use count and power handling
-+----------------------------
-+
-+Due to the wide differences between drivers regarding power management needs,
-+the media controller does not implement power management. However, the
-+media_entity structure includes a use_count field that media drivers can use to
-+track the number of users of every entity for power management needs.
-+
-+The use_count field is owned by media drivers and must not be touched by entity
-+drivers. Access to the field must be protected by the media device graph_mutex
-+lock.
-diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
-index b8a3ace..e4c2157 100644
---- a/drivers/media/media-device.c
-+++ b/drivers/media/media-device.c
-@@ -73,6 +73,7 @@ int __must_check media_device_register(struct media_device *mdev)
- 	mdev->entity_id = 1;
- 	INIT_LIST_HEAD(&mdev->entities);
- 	spin_lock_init(&mdev->lock);
-+	mutex_init(&mdev->graph_mutex);
- 
- 	/* Register the device node. */
- 	mdev->devnode.fops = &media_device_fops;
-diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
-index a805f20..fe6bfd2 100644
---- a/drivers/media/media-entity.c
-+++ b/drivers/media/media-entity.c
-@@ -23,6 +23,7 @@
- #include <linux/module.h>
- #include <linux/slab.h>
- #include <media/media-entity.h>
-+#include <media/media-device.h>
- 
- /**
-  * media_entity_init - Initialize a media entity
-@@ -196,6 +197,51 @@ media_entity_graph_walk_next(struct media_entity_graph *graph)
- EXPORT_SYMBOL_GPL(media_entity_graph_walk_next);
- 
- /* -----------------------------------------------------------------------------
-+ * Module use count
-+ */
-+
-+/*
-+ * media_entity_get - Get a reference to the parent module
-+ * @entity: The entity
-+ *
-+ * Get a reference to the parent media device module.
-+ *
-+ * The function will return immediately if @entity is NULL.
-+ *
-+ * Return a pointer to the entity on success or NULL on failure.
-+ */
-+struct media_entity *media_entity_get(struct media_entity *entity)
-+{
-+	if (entity == NULL)
-+		return NULL;
-+
-+	if (entity->parent->dev &&
-+	    !try_module_get(entity->parent->dev->driver->owner))
-+		return NULL;
-+
-+	return entity;
-+}
-+EXPORT_SYMBOL_GPL(media_entity_get);
-+
-+/*
-+ * media_entity_put - Release the reference to the parent module
-+ * @entity: The entity
-+ *
-+ * Release the reference count acquired by media_entity_get().
-+ *
-+ * The function will return immediately if @entity is NULL.
-+ */
-+void media_entity_put(struct media_entity *entity)
-+{
-+	if (entity == NULL)
-+		return;
-+
-+	if (entity->parent->dev)
-+		module_put(entity->parent->dev->driver->owner);
-+}
-+EXPORT_SYMBOL_GPL(media_entity_put);
-+
-+/* -----------------------------------------------------------------------------
-  * Links management
-  */
- 
-diff --git a/include/media/media-device.h b/include/media/media-device.h
-index 0b1ecf5..260d59c 100644
---- a/include/media/media-device.h
-+++ b/include/media/media-device.h
-@@ -25,6 +25,7 @@
- 
- #include <linux/device.h>
- #include <linux/list.h>
-+#include <linux/mutex.h>
- #include <linux/spinlock.h>
- 
- #include <media/media-devnode.h>
-@@ -42,6 +43,7 @@
-  * @entity_id:	ID of the next entity to be registered
-  * @entities:	List of registered entities
-  * @lock:	Entities list lock
-+ * @graph_mutex: Entities graph operation lock
-  *
-  * This structure represents an abstract high-level media device. It allows easy
-  * access to entities and provides basic media device-level support. The
-@@ -69,6 +71,8 @@ struct media_device {
- 
- 	/* Protects the entities list */
- 	spinlock_t lock;
-+	/* Serializes graph operations. */
-+	struct mutex graph_mutex;
- };
- 
- /* media_devnode to media_device */
-diff --git a/include/media/media-entity.h b/include/media/media-entity.h
-index b82f824..114541a 100644
---- a/include/media/media-entity.h
-+++ b/include/media/media-entity.h
-@@ -81,6 +81,8 @@ struct media_entity {
- 	struct media_pad *pads;		/* Pads array (num_pads elements) */
- 	struct media_link *links;	/* Links array (max_links elements)*/
- 
-+	int use_count;			/* Use count for the entity. */
-+
- 	union {
- 		/* Node specifications */
- 		struct {
-@@ -129,6 +131,9 @@ void media_entity_cleanup(struct media_entity *entity);
- int media_entity_create_link(struct media_entity *source, u16 source_pad,
- 		struct media_entity *sink, u16 sink_pad, u32 flags);
- 
-+struct media_entity *media_entity_get(struct media_entity *entity);
-+void media_entity_put(struct media_entity *entity);
-+
- void media_entity_graph_walk_start(struct media_entity_graph *graph,
- 		struct media_entity *entity);
- struct media_entity *
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0013-media-Media-device-information-query.patch b/recipes-kernel/linux/linux-omap/media/0013-media-Media-device-information-query.patch
deleted file mode 100644
index bf9fcd9..0000000
--- a/recipes-kernel/linux/linux-omap/media/0013-media-Media-device-information-query.patch
+++ /dev/null
@@ -1,659 +0,0 @@
-From cb6936ced565e168ac7f9be06dc3320733aac17f Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 18 Aug 2010 16:41:22 +0200
-Subject: [PATCH 13/43] media: Media device information query
-
-Create the following ioctl and implement it at the media device level to
-query device information.
-
-- MEDIA_IOC_DEVICE_INFO: Query media device information
-
-The ioctl and its data structure are defined in the new kernel header
-linux/media.h available to userspace applications.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/DocBook/media-entities.tmpl          |   12 ++
- Documentation/DocBook/v4l/media-controller.xml     |   10 ++
- Documentation/DocBook/v4l/media-func-close.xml     |   59 +++++++++
- Documentation/DocBook/v4l/media-func-ioctl.xml     |  116 +++++++++++++++++
- Documentation/DocBook/v4l/media-func-open.xml      |   94 ++++++++++++++
- .../DocBook/v4l/media-ioc-device-info.xml          |  132 ++++++++++++++++++++
- drivers/media/media-device.c                       |   57 +++++++++
- include/linux/Kbuild                               |    1 +
- include/linux/media.h                              |   45 +++++++
- 9 files changed, 526 insertions(+), 0 deletions(-)
- create mode 100644 Documentation/DocBook/v4l/media-func-close.xml
- create mode 100644 Documentation/DocBook/v4l/media-func-ioctl.xml
- create mode 100644 Documentation/DocBook/v4l/media-func-open.xml
- create mode 100644 Documentation/DocBook/v4l/media-ioc-device-info.xml
- create mode 100644 include/linux/media.h
-
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index 61d6f11..6af3375 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -11,6 +11,10 @@
- <!ENTITY func-select "<link linkend='func-select'><function>select()</function></link>">
- <!ENTITY func-write "<link linkend='func-write'><function>write()</function></link>">
- 
-+<!ENTITY media-func-close "<link linkend='media-func-close'><function>close()</function></link>">
-+<!ENTITY media-func-ioctl "<link linkend='media-func-ioctl'><function>ioctl()</function></link>">
-+<!ENTITY media-func-open "<link linkend='media-func-open'><function>open()</function></link>">
-+
- <!-- Ioctls -->
- <!ENTITY VIDIOC-CROPCAP "<link linkend='vidioc-cropcap'><constant>VIDIOC_CROPCAP</constant></link>">
- <!ENTITY VIDIOC-DBG-G-CHIP-IDENT "<link linkend='vidioc-dbg-g-chip-ident'><constant>VIDIOC_DBG_G_CHIP_IDENT</constant></link>">
-@@ -87,6 +91,8 @@
- <!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>">
- <!ENTITY VIDIOC-UNSUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_UNSUBSCRIBE_EVENT</constant></link>">
- 
-+<!ENTITY MEDIA-IOC-DEVICE-INFO "<link linkend='media-ioc-device-info'><constant>MEDIA_IOC_DEVICE_INFO</constant></link>">
-+
- <!-- Types -->
- <!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>">
- 
-@@ -181,6 +187,8 @@
- <!ENTITY v4l2-vbi-format "struct <link linkend='v4l2-vbi-format'>v4l2_vbi_format</link>">
- <!ENTITY v4l2-window "struct <link linkend='v4l2-window'>v4l2_window</link>">
- 
-+<!ENTITY media-device-info "struct <link linkend='media-device-info'>media_device_info</link>">
-+
- <!-- Error Codes -->
- <!ENTITY EACCES "<errorcode>EACCES</errorcode> error code">
- <!ENTITY EAGAIN "<errorcode>EAGAIN</errorcode> error code">
-@@ -322,6 +330,10 @@
- <!ENTITY sub-media-indices SYSTEM "media-indices.tmpl">
- 
- <!ENTITY sub-media-controller SYSTEM "v4l/media-controller.xml">
-+<!ENTITY sub-media-open SYSTEM "v4l/media-func-open.xml">
-+<!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml">
-+<!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml">
-+<!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml">
- 
- <!-- Function Reference -->
- <!ENTITY close SYSTEM "v4l/func-close.xml">
-diff --git a/Documentation/DocBook/v4l/media-controller.xml b/Documentation/DocBook/v4l/media-controller.xml
-index f89228d..a46b786 100644
---- a/Documentation/DocBook/v4l/media-controller.xml
-+++ b/Documentation/DocBook/v4l/media-controller.xml
-@@ -74,3 +74,13 @@
-     pad to a sink pad.</para>
-   </section>
- </chapter>
-+
-+<appendix id="media-user-func">
-+  <title>Function Reference</title>
-+  <!-- Keep this alphabetically sorted. -->
-+  &sub-media-open;
-+  &sub-media-close;
-+  &sub-media-ioctl;
-+  <!-- All ioctls go here. -->
-+  &sub-media-ioc-device-info;
-+</appendix>
-diff --git a/Documentation/DocBook/v4l/media-func-close.xml b/Documentation/DocBook/v4l/media-func-close.xml
-new file mode 100644
-index 0000000..be149c8
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-func-close.xml
-@@ -0,0 +1,59 @@
-+<refentry id="media-func-close">
-+  <refmeta>
-+    <refentrytitle>media close()</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>media-close</refname>
-+    <refpurpose>Close a media device</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo>
-+      <funcprototype>
-+	<funcdef>int <function>close</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>Closes the media device. Resources associated with the file descriptor
-+    are freed. The device configuration remain unchanged.</para>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Return Value</title>
-+
-+    <para><function>close</function> returns 0 on success. On error, -1 is
-+    returned, and <varname>errno</varname> is set appropriately. Possible error
-+    codes are:</para>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EBADF</errorcode></term>
-+	<listitem>
-+	  <para><parameter>fd</parameter> is not a valid open file descriptor.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/media-func-ioctl.xml b/Documentation/DocBook/v4l/media-func-ioctl.xml
-new file mode 100644
-index 0000000..bda8604
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-func-ioctl.xml
-@@ -0,0 +1,116 @@
-+<refentry id="media-func-ioctl">
-+  <refmeta>
-+    <refentrytitle>media ioctl()</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>media-ioctl</refname>
-+    <refpurpose>Control a media device</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>void *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>Media ioctl request code as defined in the media.h header file,
-+	  for example MEDIA_IOC_SETUP_LINK.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para>Pointer to a request-specific structure.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+    <para>The <function>ioctl()</function> function manipulates media device
-+    parameters. The argument <parameter>fd</parameter> must be an open file
-+    descriptor.</para>
-+    <para>The ioctl <parameter>request</parameter> code specifies the media
-+    function to be called. It has encoded in it whether the argument is an
-+    input, output or read/write parameter, and the size of the argument
-+    <parameter>argp</parameter> in bytes.</para>
-+    <para>Macros and structures definitions specifying media ioctl requests and
-+    their parameters are located in the media.h header file. All media ioctl
-+    requests, their respective function and parameters are specified in
-+    <xref linkend="media-user-func" />.</para>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Return Value</title>
-+
-+    <para><function>ioctl()</function> returns <returnvalue>0</returnvalue> on
-+    success. On failure, <returnvalue>-1</returnvalue> is returned, and the
-+    <varname>errno</varname> variable is set appropriately. Generic error codes
-+    are listed below, and request-specific error codes are listed in the
-+    individual requests descriptions.</para>
-+    <para>When an ioctl that takes an output or read/write parameter fails,
-+    the parameter remains unmodified.</para>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EBADF</errorcode></term>
-+	<listitem>
-+	  <para><parameter>fd</parameter> is not a valid open file descriptor.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EFAULT</errorcode></term>
-+	<listitem>
-+	  <para><parameter>argp</parameter> references an inaccessible memory
-+	  area.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The <parameter>request</parameter> or the data pointed to by
-+	  <parameter>argp</parameter> is not valid. This is a very common error
-+	  code, see the individual ioctl requests listed in
-+	  <xref linkend="media-user-func" /> for actual causes.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>ENOMEM</errorcode></term>
-+	<listitem>
-+	  <para>Insufficient kernel memory was available to complete the
-+	  request.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>ENOTTY</errorcode></term>
-+	<listitem>
-+	  <para><parameter>fd</parameter> is  not  associated  with  a character
-+	  special device.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/media-func-open.xml b/Documentation/DocBook/v4l/media-func-open.xml
-new file mode 100644
-index 0000000..f7df034
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-func-open.xml
-@@ -0,0 +1,94 @@
-+<refentry id="media-func-open">
-+  <refmeta>
-+    <refentrytitle>media open()</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>media-open</refname>
-+    <refpurpose>Open a media device</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo>
-+      <funcprototype>
-+	<funcdef>int <function>open</function></funcdef>
-+	<paramdef>const char *<parameter>device_name</parameter></paramdef>
-+	<paramdef>int <parameter>flags</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>device_name</parameter></term>
-+	<listitem>
-+	  <para>Device to be opened.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>flags</parameter></term>
-+	<listitem>
-+	  <para>Open flags. Access mode must be either <constant>O_RDONLY</constant>
-+	  or <constant>O_RDWR</constant>. Other flags have no effect.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+  <refsect1>
-+    <title>Description</title>
-+    <para>To open a media device applications call <function>open()</function>
-+    with the desired device name. The function has no side effects; the device
-+    configuration remain unchanged.</para>
-+    <para>When the device is opened in read-only mode, attemps to modify its
-+    configuration will result in an error, and <varname>errno</varname> will be
-+    set to <errorcode>EBADF</errorcode>.</para>
-+  </refsect1>
-+  <refsect1>
-+    <title>Return Value</title>
-+
-+    <para><function>open</function> returns the new file descriptor on success.
-+    On error, -1 is returned, and <varname>errno</varname> is set appropriately.
-+    Possible error codes are:</para>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EACCES</errorcode></term>
-+	<listitem>
-+	  <para>The requested access to the file is not allowed.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EMFILE</errorcode></term>
-+	<listitem>
-+	  <para>The  process  already  has  the  maximum number of files open.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>ENFILE</errorcode></term>
-+	<listitem>
-+	  <para>The system limit on the total number of open files has been
-+	  reached.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>ENOMEM</errorcode></term>
-+	<listitem>
-+	  <para>Insufficient kernel memory was available.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>ENXIO</errorcode></term>
-+	<listitem>
-+	  <para>No device corresponding to this device special file exists.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/media-ioc-device-info.xml b/Documentation/DocBook/v4l/media-ioc-device-info.xml
-new file mode 100644
-index 0000000..278a312
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-ioc-device-info.xml
-@@ -0,0 +1,132 @@
-+<refentry id="media-ioc-device-info">
-+  <refmeta>
-+    <refentrytitle>ioctl MEDIA_IOC_DEVICE_INFO</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>MEDIA_IOC_DEVICE_INFO</refname>
-+    <refpurpose>Query device information</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct media_device_info *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>MEDIA_IOC_DEVICE_INFO</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>All media devices must support the <constant>MEDIA_IOC_DEVICE_INFO</constant>
-+    ioctl. To query device information, applications call the ioctl with a
-+    pointer to a &media-device-info;. The driver fills the structure and returns
-+    the information to the application.
-+    The ioctl never fails.</para>
-+
-+    <table pgwide="1" frame="none" id="media-device-info">
-+      <title>struct <structname>media_device_info</structname></title>
-+      <tgroup cols="3">
-+	&cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>char</entry>
-+	    <entry><structfield>driver</structfield>[16]</entry>
-+	    <entry><para>Name of the driver implementing the media API as a
-+	    NUL-terminated ASCII string. The driver version is stored in the
-+	    <structfield>driver_version</structfield> field.</para>
-+	    <para>Driver specific applications can use this information to
-+	    verify the driver identity. It is also useful to work around
-+	    known bugs, or to identify drivers in error reports.</para></entry>
-+	  </row>
-+	  <row>
-+	    <entry>char</entry>
-+	    <entry><structfield>model</structfield>[32]</entry>
-+	    <entry>Device model name as a NUL-terminated UTF-8 string. The
-+	    device version is stored in the <structfield>device_version</structfield>
-+	    field and is not be appended to the model name.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>char</entry>
-+	    <entry><structfield>serial</structfield>[40]</entry>
-+	    <entry>Serial number as a NUL-terminated ASCII string.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>char</entry>
-+	    <entry><structfield>bus_info</structfield>[32]</entry>
-+	    <entry>Location of the device in the system as a NUL-terminated
-+	    ASCII string. This includes the bus type name (PCI, USB, ...) and a
-+	    bus-specific identifier.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>media_version</structfield></entry>
-+	    <entry>Media API version, formatted with the
-+	    <constant>KERNEL_VERSION()</constant> macro.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>hw_revision</structfield></entry>
-+	    <entry>Hardware device revision in a driver-specific format.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>media_version</structfield></entry>
-+	    <entry>Media device driver version, formatted with the
-+	    <constant>KERNEL_VERSION()</constant> macro. Together with the
-+	    <structfield>driver</structfield> field this identifies a particular
-+	    driver.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[31]</entry>
-+	    <entry>Reserved for future extensions. Drivers and applications must
-+	    set this array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+    <para>The <structfield>serial</structfield> and <structfield>bus_info</structfield>
-+    fields can be used to distinguish between multiple instances of otherwise
-+    identical hardware. The serial number takes precedence when provided and can
-+    be assumed to be unique. If the serial number is an empty string, the
-+    <structfield>bus_info</structfield> field can be used instead. The
-+    <structfield>bus_info</structfield> field is guaranteed to be unique, but
-+    can vary across reboots or device unplug/replug.</para>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Return value</title>
-+    <para>This function doesn't return specific error codes.</para>
-+  </refsect1>
-+</refentry>
-diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
-index e4c2157..5c745be 100644
---- a/drivers/media/media-device.c
-+++ b/drivers/media/media-device.c
-@@ -22,13 +22,70 @@
- 
- #include <linux/types.h>
- #include <linux/ioctl.h>
-+#include <linux/media.h>
- 
- #include <media/media-device.h>
- #include <media/media-devnode.h>
- #include <media/media-entity.h>
- 
-+/* -----------------------------------------------------------------------------
-+ * Userspace API
-+ */
-+
-+static int media_device_open(struct file *filp)
-+{
-+	return 0;
-+}
-+
-+static int media_device_close(struct file *filp)
-+{
-+	return 0;
-+}
-+
-+static int media_device_get_info(struct media_device *dev,
-+				 struct media_device_info __user *__info)
-+{
-+	struct media_device_info info;
-+
-+	memset(&info, 0, sizeof(info));
-+
-+	strlcpy(info.driver, dev->dev->driver->name, sizeof(info.driver));
-+	strlcpy(info.model, dev->model, sizeof(info.model));
-+	strlcpy(info.serial, dev->serial, sizeof(info.serial));
-+	strlcpy(info.bus_info, dev->bus_info, sizeof(info.bus_info));
-+
-+	info.media_version = MEDIA_API_VERSION;
-+	info.hw_revision = dev->hw_revision;
-+	info.driver_version = dev->driver_version;
-+
-+	return copy_to_user(__info, &info, sizeof(*__info));
-+}
-+
-+static long media_device_ioctl(struct file *filp, unsigned int cmd,
-+			       unsigned long arg)
-+{
-+	struct media_devnode *devnode = media_devnode_data(filp);
-+	struct media_device *dev = to_media_device(devnode);
-+	long ret;
-+
-+	switch (cmd) {
-+	case MEDIA_IOC_DEVICE_INFO:
-+		ret = media_device_get_info(dev,
-+				(struct media_device_info __user *)arg);
-+		break;
-+
-+	default:
-+		ret = -ENOIOCTLCMD;
-+	}
-+
-+	return ret;
-+}
-+
- static const struct media_file_operations media_device_fops = {
- 	.owner = THIS_MODULE,
-+	.open = media_device_open,
-+	.ioctl = media_device_ioctl,
-+	.release = media_device_close,
- };
- 
- /* -----------------------------------------------------------------------------
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index 97319a8..26e0a7f 100644
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -228,6 +228,7 @@ header-y += magic.h
- header-y += major.h
- header-y += map_to_7segment.h
- header-y += matroxfb.h
-+header-y += media.h
- header-y += mempolicy.h
- header-y += meye.h
- header-y += mii.h
-diff --git a/include/linux/media.h b/include/linux/media.h
-new file mode 100644
-index 0000000..4c52f08
---- /dev/null
-+++ b/include/linux/media.h
-@@ -0,0 +1,45 @@
-+/*
-+ * Multimedia device API
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#ifndef __LINUX_MEDIA_H
-+#define __LINUX_MEDIA_H
-+
-+#include <linux/ioctl.h>
-+#include <linux/types.h>
-+#include <linux/version.h>
-+
-+#define MEDIA_API_VERSION	KERNEL_VERSION(0, 1, 0)
-+
-+struct media_device_info {
-+	char driver[16];
-+	char model[32];
-+	char serial[40];
-+	char bus_info[32];
-+	__u32 media_version;
-+	__u32 hw_revision;
-+	__u32 driver_version;
-+	__u32 reserved[31];
-+};
-+
-+#define MEDIA_IOC_DEVICE_INFO		_IOWR('M', 1, struct media_device_info)
-+
-+#endif /* __LINUX_MEDIA_H */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0014-media-Entities-pads-and-links-enumeration.patch b/recipes-kernel/linux/linux-omap/media/0014-media-Entities-pads-and-links-enumeration.patch
deleted file mode 100644
index cc9e876..0000000
--- a/recipes-kernel/linux/linux-omap/media/0014-media-Entities-pads-and-links-enumeration.patch
+++ /dev/null
@@ -1,889 +0,0 @@
-From d7784ca094970b836c99e5f2a6344811625753a3 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:40:01 +0100
-Subject: [PATCH 14/43] media: Entities, pads and links enumeration
-
-Create the following two ioctls and implement them at the media device
-level to enumerate entities, pads and links.
-
-- MEDIA_IOC_ENUM_ENTITIES: Enumerate entities and their properties
-- MEDIA_IOC_ENUM_LINKS: Enumerate all pads and links for a given entity
-
-Entity IDs can be non-contiguous. Userspace applications should
-enumerate entities using the MEDIA_ENT_ID_FLAG_NEXT flag. When the flag
-is set in the entity ID, the MEDIA_IOC_ENUM_ENTITIES will return the
-next entity with an ID bigger than the requested one.
-
-Only forward links that originate at one of the entity's source pads are
-returned during the enumeration process.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/DocBook/media-entities.tmpl          |    8 +
- Documentation/DocBook/v4l/media-controller.xml     |    2 +
- .../DocBook/v4l/media-ioc-device-info.xml          |    3 +-
- .../DocBook/v4l/media-ioc-enum-entities.xml        |  308 ++++++++++++++++++++
- Documentation/DocBook/v4l/media-ioc-enum-links.xml |  202 +++++++++++++
- drivers/media/media-device.c                       |  123 ++++++++
- include/linux/media.h                              |   85 ++++++
- include/media/media-entity.h                       |   24 +--
- 8 files changed, 731 insertions(+), 24 deletions(-)
- create mode 100644 Documentation/DocBook/v4l/media-ioc-enum-entities.xml
- create mode 100644 Documentation/DocBook/v4l/media-ioc-enum-links.xml
-
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index 6af3375..6e7dae4 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -92,6 +92,8 @@
- <!ENTITY VIDIOC-UNSUBSCRIBE-EVENT "<link linkend='vidioc-subscribe-event'><constant>VIDIOC_UNSUBSCRIBE_EVENT</constant></link>">
- 
- <!ENTITY MEDIA-IOC-DEVICE-INFO "<link linkend='media-ioc-device-info'><constant>MEDIA_IOC_DEVICE_INFO</constant></link>">
-+<!ENTITY MEDIA-IOC-ENUM-ENTITIES "<link linkend='media-ioc-enum-entities'><constant>MEDIA_IOC_ENUM_ENTITIES</constant></link>">
-+<!ENTITY MEDIA-IOC-ENUM-LINKS "<link linkend='media-ioc-enum-links'><constant>MEDIA_IOC_ENUM_LINKS</constant></link>">
- 
- <!-- Types -->
- <!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>">
-@@ -188,6 +190,10 @@
- <!ENTITY v4l2-window "struct <link linkend='v4l2-window'>v4l2_window</link>">
- 
- <!ENTITY media-device-info "struct <link linkend='media-device-info'>media_device_info</link>">
-+<!ENTITY media-entity-desc "struct <link linkend='media-entity-desc'>media_entity_desc</link>">
-+<!ENTITY media-links-enum "struct <link linkend='media-links-enum'>media_links_enum</link>">
-+<!ENTITY media-pad-desc "struct <link linkend='media-pad-desc'>media_pad_desc</link>">
-+<!ENTITY media-link-desc "struct <link linkend='media-link-desc'>media_link_desc</link>">
- 
- <!-- Error Codes -->
- <!ENTITY EACCES "<errorcode>EACCES</errorcode> error code">
-@@ -334,6 +340,8 @@
- <!ENTITY sub-media-close SYSTEM "v4l/media-func-close.xml">
- <!ENTITY sub-media-ioctl SYSTEM "v4l/media-func-ioctl.xml">
- <!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml">
-+<!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml">
-+<!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml">
- 
- <!-- Function Reference -->
- <!ENTITY close SYSTEM "v4l/func-close.xml">
-diff --git a/Documentation/DocBook/v4l/media-controller.xml b/Documentation/DocBook/v4l/media-controller.xml
-index a46b786..2c4fd2b 100644
---- a/Documentation/DocBook/v4l/media-controller.xml
-+++ b/Documentation/DocBook/v4l/media-controller.xml
-@@ -83,4 +83,6 @@
-   &sub-media-ioctl;
-   <!-- All ioctls go here. -->
-   &sub-media-ioc-device-info;
-+  &sub-media-ioc-enum-entities;
-+  &sub-media-ioc-enum-links;
- </appendix>
-diff --git a/Documentation/DocBook/v4l/media-ioc-device-info.xml b/Documentation/DocBook/v4l/media-ioc-device-info.xml
-index 278a312..1f32373 100644
---- a/Documentation/DocBook/v4l/media-ioc-device-info.xml
-+++ b/Documentation/DocBook/v4l/media-ioc-device-info.xml
-@@ -27,7 +27,8 @@
-       <varlistentry>
- 	<term><parameter>fd</parameter></term>
- 	<listitem>
--	  <para>&fd;</para>
-+	  <para>File descriptor returned by
-+	  <link linkend='media-func-open'><function>open()</function></link>.</para>
- 	</listitem>
-       </varlistentry>
-       <varlistentry>
-diff --git a/Documentation/DocBook/v4l/media-ioc-enum-entities.xml b/Documentation/DocBook/v4l/media-ioc-enum-entities.xml
-new file mode 100644
-index 0000000..13d0cc4
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-ioc-enum-entities.xml
-@@ -0,0 +1,308 @@
-+<refentry id="media-ioc-enum-entities">
-+  <refmeta>
-+    <refentrytitle>ioctl MEDIA_IOC_ENUM_ENTITIES</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>MEDIA_IOC_ENUM_ENTITIES</refname>
-+    <refpurpose>Enumerate entities and their properties</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct media_entity_desc *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>File descriptor returned by
-+	  <link linkend='media-func-open'><function>open()</function></link>.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>MEDIA_IOC_ENUM_ENTITIES</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+    <para>To query the attributes of an entity, applications set the id field
-+    of a &media-entity-desc; structure and call the MEDIA_IOC_ENUM_ENTITIES
-+    ioctl with a pointer to this structure. The driver fills the rest of the
-+    structure or returns an &EINVAL; when the id is invalid.</para>
-+    <para>Entities can be enumerated by or'ing the id with the
-+    <constant>MEDIA_ENT_ID_FLAG_NEXT</constant> flag. The driver will return
-+    information about the entity with the smallest id strictly larger than the
-+    requested one ('next entity'), or the &EINVAL; if there is none.</para>
-+    <para>Entity IDs can be non-contiguous. Applications must
-+    <emphasis>not</emphasis> try to enumerate entities by calling
-+    MEDIA_IOC_ENUM_ENTITIES with increasing id's until they get an error.</para>
-+    <para>Two or more entities that share a common non-zero
-+    <structfield>group_id</structfield> value are considered as logically
-+    grouped. Groups are used to report
-+    <itemizedlist>
-+      <listitem>ALSA, VBI and video nodes that carry the same media
-+      stream</listitem>
-+      <listitem>lens and flash controllers associated with a sensor</listitem>
-+    </itemizedlist>
-+    </para>
-+
-+    <table pgwide="1" frame="none" id="media-entity-desc">
-+      <title>struct <structname>media_entity_desc</structname></title>
-+      <tgroup cols="5">
-+	<colspec colname="c1" />
-+	<colspec colname="c2" />
-+	<colspec colname="c3" />
-+	<colspec colname="c4" />
-+	<colspec colname="c5" />
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>id</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Entity id, set by the application. When the id is or'ed with
-+	    <constant>MEDIA_ENT_ID_FLAG_NEXT</constant>, the driver clears the
-+	    flag and returns the first entity with a larger id.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>char</entry>
-+	    <entry><structfield>name</structfield>[32]</entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Entity name as an UTF-8 NULL-terminated string.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>type</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Entity type, see <xref linkend="media-entity-type" /> for details.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>revision</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Entity revision in a driver/hardware specific format.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>flags</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Entity flags, see <xref linkend="media-entity-flag" /> for details.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>group_id</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Entity group ID</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u16</entry>
-+	    <entry><structfield>pads</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Number of pads</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u16</entry>
-+	    <entry><structfield>links</structfield></entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>Total number of outbound links. Inbound links are not counted
-+	    in this field.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>union</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry>struct</entry>
-+	    <entry><structfield>v4l</structfield></entry>
-+	    <entry></entry>
-+	    <entry>Valid for V4L sub-devices and nodes only.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>major</structfield></entry>
-+	    <entry>V4L device node major number. For V4L sub-devices with no
-+	    device node, set by the driver to 0.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>minor</structfield></entry>
-+	    <entry>V4L device node minor number. For V4L sub-devices with no
-+	    device node, set by the driver to 0.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry>struct</entry>
-+	    <entry><structfield>fb</structfield></entry>
-+	    <entry></entry>
-+	    <entry>Valid for frame buffer nodes only.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>major</structfield></entry>
-+	    <entry>Frame buffer device node major number.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>minor</structfield></entry>
-+	    <entry>Frame buffer device node minor number.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry>struct</entry>
-+	    <entry><structfield>alsa</structfield></entry>
-+	    <entry></entry>
-+	    <entry>Valid for ALSA devices only.</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>card</structfield></entry>
-+	    <entry>ALSA card number</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>device</structfield></entry>
-+	    <entry>ALSA device number</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry></entry>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>subdevice</structfield></entry>
-+	    <entry>ALSA sub-device number</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry>int</entry>
-+	    <entry><structfield>dvb</structfield></entry>
-+	    <entry></entry>
-+	    <entry>DVB card number</entry>
-+	  </row>
-+	  <row>
-+	    <entry></entry>
-+	    <entry>__u8</entry>
-+	    <entry><structfield>raw</structfield>[180]</entry>
-+	    <entry></entry>
-+	    <entry></entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table frame="none" pgwide="1" id="media-entity-type">
-+      <title>Media entity types</title>
-+      <tgroup cols="2">
-+        <colspec colname="c1"/>
-+        <colspec colname="c2"/>
-+	<tbody valign="top">
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_DEVNODE</constant></entry>
-+	    <entry>Unknown device node</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_DEVNODE_V4L</constant></entry>
-+	    <entry>V4L video, radio or vbi device node</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_DEVNODE_FB</constant></entry>
-+	    <entry>Frame buffer device node</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_DEVNODE_ALSA</constant></entry>
-+	    <entry>ALSA card</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_DEVNODE_DVB</constant></entry>
-+	    <entry>DVB card</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV</constant></entry>
-+	    <entry>Unknown V4L sub-device</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_SENSOR</constant></entry>
-+	    <entry>Video sensor</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_FLASH</constant></entry>
-+	    <entry>Flash controller</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_T_V4L2_SUBDEV_LENS</constant></entry>
-+	    <entry>Lens controller</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table frame="none" pgwide="1" id="media-entity-flag">
-+      <title>Media entity flags</title>
-+      <tgroup cols="2">
-+        <colspec colname="c1"/>
-+        <colspec colname="c2"/>
-+	<tbody valign="top">
-+	  <row>
-+	    <entry><constant>MEDIA_ENT_FL_DEFAULT</constant></entry>
-+	    <entry>Default entity for its type. Used to discover the default
-+	    audio, VBI and video devices, the default camera sensor, ...</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &media-entity-desc; <structfield>id</structfield> references
-+	  a non-existing entity.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/media-ioc-enum-links.xml b/Documentation/DocBook/v4l/media-ioc-enum-links.xml
-new file mode 100644
-index 0000000..daf0360
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-ioc-enum-links.xml
-@@ -0,0 +1,202 @@
-+<refentry id="media-ioc-enum-links">
-+  <refmeta>
-+    <refentrytitle>ioctl MEDIA_IOC_ENUM_LINKS</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>MEDIA_IOC_ENUM_LINKS</refname>
-+    <refpurpose>Enumerate all pads and links for a given entity</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct media_links_enum *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>File descriptor returned by
-+	  <link linkend='media-func-open'><function>open()</function></link>.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>MEDIA_IOC_ENUM_LINKS</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>To enumerate pads and/or links for a given entity, applications set
-+    the entity field of a &media-links-enum; structure and initialize the
-+    &media-pad-desc; and &media-link-desc; structure arrays pointed by the
-+    <structfield>pads</structfield> and <structfield>links</structfield> fields.
-+    They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this
-+    structure.</para>
-+    <para>If the <structfield>pads</structfield> field is not NULL, the driver
-+    fills the <structfield>pads</structfield> array with information about the
-+    entity's pads. The array must have enough room to store all the entity's
-+    pads. The number of pads can be retrieved with the &MEDIA-IOC-ENUM-ENTITIES;
-+    ioctl.</para>
-+    <para>If the <structfield>links</structfield> field is not NULL, the driver
-+    fills the <structfield>links</structfield> array with information about the
-+    entity's outbound links. The array must have enough room to store all the
-+    entity's outbound links. The number of outbound links can be retrieved with
-+    the &MEDIA-IOC-ENUM-ENTITIES; ioctl.</para>
-+    <para>Only forward links that originate at one of the entity's source pads
-+    are returned during the enumeration process.</para>
-+
-+    <table pgwide="1" frame="none" id="media-links-enum">
-+      <title>struct <structname>media_links_enum</structname></title>
-+      <tgroup cols="3">
-+        &cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>entity</structfield></entry>
-+	    <entry>Entity id, set by the application.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>struct &media-pad-desc;</entry>
-+	    <entry>*<structfield>pads</structfield></entry>
-+	    <entry>Pointer to a pads array allocated by the application. Ignored
-+	    if NULL.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>struct &media-link-desc;</entry>
-+	    <entry>*<structfield>links</structfield></entry>
-+	    <entry>Pointer to a links array allocated by the application. Ignored
-+	    if NULL.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table pgwide="1" frame="none" id="media-pad-desc">
-+      <title>struct <structname>media_pad_desc</structname></title>
-+      <tgroup cols="3">
-+        &cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>entity</structfield></entry>
-+	    <entry>ID of the entity this pad belongs to.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u16</entry>
-+	    <entry><structfield>index</structfield></entry>
-+	    <entry>0-based pad index.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>flags</structfield></entry>
-+	    <entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table frame="none" pgwide="1" id="media-pad-flag">
-+      <title>Media pad flags</title>
-+      <tgroup cols="2">
-+        <colspec colname="c1"/>
-+        <colspec colname="c2"/>
-+	<tbody valign="top">
-+	  <row>
-+	    <entry><constant>MEDIA_PAD_FL_INPUT</constant></entry>
-+	    <entry>Input pad, relative to the entity. Input pads sink data and
-+	    are targets of links.</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_PAD_FL_OUTPUT</constant></entry>
-+	    <entry>Output pad, relative to the entity. Output pads source data
-+	    and are origins of links.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table pgwide="1" frame="none" id="media-link-desc">
-+      <title>struct <structname>media_links_enum</structname></title>
-+      <tgroup cols="3">
-+        &cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>struct &media-pad-desc;</entry>
-+	    <entry><structfield>source</structfield></entry>
-+	    <entry>Pad at the origin of this link.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>struct &media-pad-desc;</entry>
-+	    <entry><structfield>sink</structfield></entry>
-+	    <entry>Pad at the target of this link.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>flags</structfield></entry>
-+	    <entry>Link flags, see <xref linkend="media-link-flag" /> for more details.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table frame="none" pgwide="1" id="media-link-flag">
-+      <title>Media link flags</title>
-+      <tgroup cols="2">
-+        <colspec colname="c1"/>
-+        <colspec colname="c2"/>
-+	<tbody valign="top">
-+	  <row>
-+	    <entry><constant>MEDIA_LNK_FL_ENABLED</constant></entry>
-+	    <entry>The link is enabled and can be used to transfer media data.
-+	    When two or more links target a sink pad, only one of them can be
-+	    enabled at a time.</entry>
-+	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_LNK_FL_IMMUTABLE</constant></entry>
-+	    <entry>The link enabled state can't be modified at runtime. An
-+	    immutable link is always enabled.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+    <para>One and only one of <constant>MEDIA_PAD_FL_INPUT</constant> and
-+    <constant>MEDIA_PAD_FL_OUTPUT</constant> must be set for every pad.</para>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &media-links-enum; <structfield>id</structfield> references
-+	  a non-existing entity.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
-index 5c745be..1f46acb 100644
---- a/drivers/media/media-device.c
-+++ b/drivers/media/media-device.c
-@@ -61,6 +61,117 @@ static int media_device_get_info(struct media_device *dev,
- 	return copy_to_user(__info, &info, sizeof(*__info));
- }
- 
-+static struct media_entity *find_entity(struct media_device *mdev, u32 id)
-+{
-+	struct media_entity *entity;
-+	int next = id & MEDIA_ENT_ID_FLAG_NEXT;
-+
-+	id &= ~MEDIA_ENT_ID_FLAG_NEXT;
-+
-+	spin_lock(&mdev->lock);
-+
-+	media_device_for_each_entity(entity, mdev) {
-+		if ((entity->id == id && !next) ||
-+		    (entity->id > id && next)) {
-+			spin_unlock(&mdev->lock);
-+			return entity;
-+		}
-+	}
-+
-+	spin_unlock(&mdev->lock);
-+
-+	return NULL;
-+}
-+
-+static long media_device_enum_entities(struct media_device *mdev,
-+				       struct media_entity_desc __user *uent)
-+{
-+	struct media_entity *ent;
-+	struct media_entity_desc u_ent;
-+
-+	if (copy_from_user(&u_ent.id, &uent->id, sizeof(u_ent.id)))
-+		return -EFAULT;
-+
-+	ent = find_entity(mdev, u_ent.id);
-+
-+	if (ent == NULL)
-+		return -EINVAL;
-+
-+	u_ent.id = ent->id;
-+	u_ent.name[0] = '\0';
-+	if (ent->name)
-+		strlcpy(u_ent.name, ent->name, sizeof(u_ent.name));
-+	u_ent.type = ent->type;
-+	u_ent.revision = ent->revision;
-+	u_ent.flags = ent->flags;
-+	u_ent.group_id = ent->group_id;
-+	u_ent.pads = ent->num_pads;
-+	u_ent.links = ent->num_links - ent->num_backlinks;
-+	u_ent.v4l.major = ent->v4l.major;
-+	u_ent.v4l.minor = ent->v4l.minor;
-+	if (copy_to_user(uent, &u_ent, sizeof(u_ent)))
-+		return -EFAULT;
-+	return 0;
-+}
-+
-+static void media_device_kpad_to_upad(const struct media_pad *kpad,
-+				      struct media_pad_desc *upad)
-+{
-+	upad->entity = kpad->entity->id;
-+	upad->index = kpad->index;
-+	upad->flags = kpad->flags;
-+}
-+
-+static long media_device_enum_links(struct media_device *mdev,
-+				    struct media_links_enum __user *ulinks)
-+{
-+	struct media_entity *entity;
-+	struct media_links_enum links;
-+
-+	if (copy_from_user(&links, ulinks, sizeof(links)))
-+		return -EFAULT;
-+
-+	entity = find_entity(mdev, links.entity);
-+	if (entity == NULL)
-+		return -EINVAL;
-+
-+	if (links.pads) {
-+		unsigned int p;
-+
-+		for (p = 0; p < entity->num_pads; p++) {
-+			struct media_pad_desc pad;
-+			media_device_kpad_to_upad(&entity->pads[p], &pad);
-+			if (copy_to_user(&links.pads[p], &pad, sizeof(pad)))
-+				return -EFAULT;
-+		}
-+	}
-+
-+	if (links.links) {
-+		struct media_link_desc __user *ulink;
-+		unsigned int l;
-+
-+		for (l = 0, ulink = links.links; l < entity->num_links; l++) {
-+			struct media_link_desc link;
-+
-+			/* Ignore backlinks. */
-+			if (entity->links[l].source->entity != entity)
-+				continue;
-+
-+			media_device_kpad_to_upad(entity->links[l].source,
-+						  &link.source);
-+			media_device_kpad_to_upad(entity->links[l].sink,
-+						  &link.sink);
-+			link.flags = entity->links[l].flags;
-+			if (copy_to_user(ulink, &link, sizeof(*ulink)))
-+				return -EFAULT;
-+			ulink++;
-+		}
-+	}
-+	if (copy_to_user(ulinks, &links, sizeof(*ulinks)))
-+		return -EFAULT;
-+	return 0;
-+}
-+
- static long media_device_ioctl(struct file *filp, unsigned int cmd,
- 			       unsigned long arg)
- {
-@@ -74,6 +185,18 @@ static long media_device_ioctl(struct file *filp, unsigned int cmd,
- 				(struct media_device_info __user *)arg);
- 		break;
- 
-+	case MEDIA_IOC_ENUM_ENTITIES:
-+		ret = media_device_enum_entities(dev,
-+				(struct media_entity_desc __user *)arg);
-+		break;
-+
-+	case MEDIA_IOC_ENUM_LINKS:
-+		mutex_lock(&dev->graph_mutex);
-+		ret = media_device_enum_links(dev,
-+				(struct media_links_enum __user *)arg);
-+		mutex_unlock(&dev->graph_mutex);
-+		break;
-+
- 	default:
- 		ret = -ENOIOCTLCMD;
- 	}
-diff --git a/include/linux/media.h b/include/linux/media.h
-index 4c52f08..64c0313 100644
---- a/include/linux/media.h
-+++ b/include/linux/media.h
-@@ -40,6 +40,91 @@ struct media_device_info {
- 	__u32 reserved[31];
- };
- 
-+#define MEDIA_ENT_ID_FLAG_NEXT		(1 << 31)
-+
-+#define MEDIA_ENT_TYPE_SHIFT		16
-+#define MEDIA_ENT_TYPE_MASK		0x00ff0000
-+#define MEDIA_ENT_SUBTYPE_MASK		0x0000ffff
-+
-+#define MEDIA_ENT_T_DEVNODE		(1 << MEDIA_ENT_TYPE_SHIFT)
-+#define MEDIA_ENT_T_DEVNODE_V4L		(MEDIA_ENT_T_DEVNODE + 1)
-+#define MEDIA_ENT_T_DEVNODE_FB		(MEDIA_ENT_T_DEVNODE + 2)
-+#define MEDIA_ENT_T_DEVNODE_ALSA	(MEDIA_ENT_T_DEVNODE + 3)
-+#define MEDIA_ENT_T_DEVNODE_DVB		(MEDIA_ENT_T_DEVNODE + 4)
-+
-+#define MEDIA_ENT_T_V4L2_SUBDEV		(2 << MEDIA_ENT_TYPE_SHIFT)
-+#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR	(MEDIA_ENT_T_V4L2_SUBDEV + 1)
-+#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH	(MEDIA_ENT_T_V4L2_SUBDEV + 2)
-+#define MEDIA_ENT_T_V4L2_SUBDEV_LENS	(MEDIA_ENT_T_V4L2_SUBDEV + 3)
-+
-+#define MEDIA_ENT_FL_DEFAULT		(1 << 0)
-+
-+struct media_entity_desc {
-+	__u32 id;
-+	char name[32];
-+	__u32 type;
-+	__u32 revision;
-+	__u32 flags;
-+	__u32 group_id;
-+	__u16 pads;
-+	__u16 links;
-+
-+	__u32 reserved[4];
-+
-+	union {
-+		/* Node specifications */
-+		struct {
-+			__u32 major;
-+			__u32 minor;
-+		} v4l;
-+		struct {
-+			__u32 major;
-+			__u32 minor;
-+		} fb;
-+		struct {
-+			__u32 card;
-+			__u32 device;
-+			__u32 subdevice;
-+		} alsa;
-+		int dvb;
-+
-+		/* Sub-device specifications */
-+		/* Nothing needed yet */
-+		__u8 raw[184];
-+	};
-+};
-+
-+#define MEDIA_PAD_FL_INPUT		(1 << 0)
-+#define MEDIA_PAD_FL_OUTPUT		(1 << 1)
-+
-+struct media_pad_desc {
-+	__u32 entity;		/* entity ID */
-+	__u16 index;		/* pad index */
-+	__u32 flags;		/* pad flags */
-+	__u32 reserved[2];
-+};
-+
-+#define MEDIA_LNK_FL_ENABLED		(1 << 0)
-+#define MEDIA_LNK_FL_IMMUTABLE		(1 << 1)
-+
-+struct media_link_desc {
-+	struct media_pad_desc source;
-+	struct media_pad_desc sink;
-+	__u32 flags;
-+	__u32 reserved[2];
-+};
-+
-+struct media_links_enum {
-+	__u32 entity;
-+	/* Should have enough room for pads elements */
-+	struct media_pad_desc __user *pads;
-+	/* Should have enough room for links elements */
-+	struct media_link_desc __user *links;
-+	__u32 reserved[4];
-+};
-+
- #define MEDIA_IOC_DEVICE_INFO		_IOWR('M', 1, struct media_device_info)
-+#define MEDIA_IOC_ENUM_ENTITIES		_IOWR('M', 2, struct media_entity_desc)
-+#define MEDIA_IOC_ENUM_LINKS		_IOWR('M', 3, struct media_links_enum)
- 
- #endif /* __LINUX_MEDIA_H */
-diff --git a/include/media/media-entity.h b/include/media/media-entity.h
-index 114541a..0954490 100644
---- a/include/media/media-entity.h
-+++ b/include/media/media-entity.h
-@@ -24,29 +24,7 @@
- #define _MEDIA_ENTITY_H
- 
- #include <linux/list.h>
--
--#define MEDIA_ENT_TYPE_SHIFT		16
--#define MEDIA_ENT_TYPE_MASK		0x00ff0000
--#define MEDIA_ENT_SUBTYPE_MASK		0x0000ffff
--
--#define MEDIA_ENT_T_DEVNODE		(1 << MEDIA_ENTITY_TYPE_SHIFT)
--#define MEDIA_ENT_T_DEVNODE_V4L		(MEDIA_ENTITY_T_DEVNODE + 1)
--#define MEDIA_ENT_T_DEVNODE_FB		(MEDIA_ENTITY_T_DEVNODE + 2)
--#define MEDIA_ENT_T_DEVNODE_ALSA	(MEDIA_ENTITY_T_DEVNODE + 3)
--#define MEDIA_ENT_T_DEVNODE_DVB		(MEDIA_ENTITY_T_DEVNODE + 4)
--
--#define MEDIA_ENT_T_V4L2_SUBDEV		(2 << MEDIA_ENTITY_TYPE_SHIFT)
--#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR	(MEDIA_ENTITY_T_V4L2_SUBDEV + 1)
--#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH	(MEDIA_ENTITY_T_V4L2_SUBDEV + 2)
--#define MEDIA_ENT_T_V4L2_SUBDEV_LENS	(MEDIA_ENTITY_T_V4L2_SUBDEV + 3)
--
--#define MEDIA_ENT_FL_DEFAULT		(1 << 0)
--
--#define MEDIA_LNK_FL_ENABLED		(1 << 0)
--#define MEDIA_LNK_FL_IMMUTABLE		(1 << 1)
--
--#define MEDIA_PAD_FL_INPUT		(1 << 0)
--#define MEDIA_PAD_FL_OUTPUT		(1 << 1)
-+#include <linux/media.h>
- 
- struct media_link {
- 	struct media_pad *source;	/* Source pad */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0015-media-Links-setup.patch b/recipes-kernel/linux/linux-omap/media/0015-media-Links-setup.patch
deleted file mode 100644
index 4ea3974..0000000
--- a/recipes-kernel/linux/linux-omap/media/0015-media-Links-setup.patch
+++ /dev/null
@@ -1,517 +0,0 @@
-From 9991c219079532183cc33f16064f86680b80237c Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:40:03 +0100
-Subject: [PATCH 15/43] media: Links setup
-
-Create the following ioctl and implement it at the media device level to
-setup links.
-
-- MEDIA_IOC_SETUP_LINK: Modify the properties of a given link
-
-The only property that can currently be modified is the ENABLED link
-flag to enable/disable a link. Links marked with the IMMUTABLE link flag
-can not be enabled or disabled.
-
-Enabling or disabling a link has effects on entities' use count. Those
-changes are automatically propagated through the graph.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Stanimir Varbanov <svarbanov at mm-sol.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/DocBook/media-entities.tmpl          |    2 +
- Documentation/DocBook/v4l/media-controller.xml     |    1 +
- Documentation/DocBook/v4l/media-ioc-setup-link.xml |   90 +++++++++++
- Documentation/media-framework.txt                  |   42 ++++++
- drivers/media/media-device.c                       |   45 ++++++
- drivers/media/media-entity.c                       |  155 ++++++++++++++++++++
- include/linux/media.h                              |    1 +
- include/media/media-device.h                       |    3 +
- include/media/media-entity.h                       |   17 ++
- 9 files changed, 356 insertions(+), 0 deletions(-)
- create mode 100644 Documentation/DocBook/v4l/media-ioc-setup-link.xml
-
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index 6e7dae4..679c585 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -94,6 +94,7 @@
- <!ENTITY MEDIA-IOC-DEVICE-INFO "<link linkend='media-ioc-device-info'><constant>MEDIA_IOC_DEVICE_INFO</constant></link>">
- <!ENTITY MEDIA-IOC-ENUM-ENTITIES "<link linkend='media-ioc-enum-entities'><constant>MEDIA_IOC_ENUM_ENTITIES</constant></link>">
- <!ENTITY MEDIA-IOC-ENUM-LINKS "<link linkend='media-ioc-enum-links'><constant>MEDIA_IOC_ENUM_LINKS</constant></link>">
-+<!ENTITY MEDIA-IOC-SETUP-LINK "<link linkend='media-ioc-setup-link'><constant>MEDIA_IOC_SETUP_LINK</constant></link>">
- 
- <!-- Types -->
- <!ENTITY v4l2-std-id "<link linkend='v4l2-std-id'>v4l2_std_id</link>">
-@@ -342,6 +343,7 @@
- <!ENTITY sub-media-ioc-device-info SYSTEM "v4l/media-ioc-device-info.xml">
- <!ENTITY sub-media-ioc-enum-entities SYSTEM "v4l/media-ioc-enum-entities.xml">
- <!ENTITY sub-media-ioc-enum-links SYSTEM "v4l/media-ioc-enum-links.xml">
-+<!ENTITY sub-media-ioc-setup-link SYSTEM "v4l/media-ioc-setup-link.xml">
- 
- <!-- Function Reference -->
- <!ENTITY close SYSTEM "v4l/func-close.xml">
-diff --git a/Documentation/DocBook/v4l/media-controller.xml b/Documentation/DocBook/v4l/media-controller.xml
-index 2c4fd2b..2dc25e1 100644
---- a/Documentation/DocBook/v4l/media-controller.xml
-+++ b/Documentation/DocBook/v4l/media-controller.xml
-@@ -85,4 +85,5 @@
-   &sub-media-ioc-device-info;
-   &sub-media-ioc-enum-entities;
-   &sub-media-ioc-enum-links;
-+  &sub-media-ioc-setup-link;
- </appendix>
-diff --git a/Documentation/DocBook/v4l/media-ioc-setup-link.xml b/Documentation/DocBook/v4l/media-ioc-setup-link.xml
-new file mode 100644
-index 0000000..09ab3d2
---- /dev/null
-+++ b/Documentation/DocBook/v4l/media-ioc-setup-link.xml
-@@ -0,0 +1,90 @@
-+<refentry id="media-ioc-setup-link">
-+  <refmeta>
-+    <refentrytitle>ioctl MEDIA_IOC_SETUP_LINK</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>MEDIA_IOC_SETUP_LINK</refname>
-+    <refpurpose>Modify the properties of a link</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct media_link_desc *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>File descriptor returned by
-+	  <link linkend='media-func-open'><function>open()</function></link>.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>MEDIA_IOC_ENUM_LINKS</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>To change link properties applications fill a &media-link-desc; with
-+    link identification information (source and sink pad) and the new requested
-+    link flags. They then call the MEDIA_IOC_SETUP_LINK ioctl with a pointer to
-+    that structure.</para>
-+    <para>The only configurable property is the <constant>ENABLED</constant>
-+    link flag to enable/disable a link. Links marked with the
-+    <constant>IMMUTABLE</constant> link flag can not be enabled or disabled.
-+    </para>
-+    <para>Link configuration has no side effect on other links. If an enabled
-+    link at the sink pad prevents the link from being enabled, the driver
-+    returns with an &EBUSY;.</para>
-+    <para>If the specified link can't be found the driver returns with an
-+    &EINVAL;.</para>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EBUSY</errorcode></term>
-+	<listitem>
-+	  <para>The link properties can't be changed because the link is
-+	  currently busy. This can be caused, for instance, by an active media
-+	  stream (audio or video) on the link. The ioctl shouldn't be retried if
-+	  no other action is performed before to fix the problem.</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &media-link-desc; references a non-existing link, or the
-+	  link is immutable and an attempt to modify its configuration was made.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
-index 9017a41..634845e 100644
---- a/Documentation/media-framework.txt
-+++ b/Documentation/media-framework.txt
-@@ -259,6 +259,16 @@ When the graph traversal is complete the function will return NULL.
- Graph traversal can be interrupted at any moment. No cleanup function call is
- required and the graph structure can be freed normally.
- 
-+Helper functions can be used to find a link between two given pads, or a pad
-+connected to another pad through an enabled link
-+
-+	media_entity_find_link(struct media_pad *source,
-+			       struct media_pad *sink);
-+
-+	media_entity_remote_source(struct media_pad *pad);
-+
-+Refer to the kerneldoc documentation for more information.
-+
- 
- Use count and power handling
- ----------------------------
-@@ -271,3 +281,35 @@ track the number of users of every entity for power management needs.
- The use_count field is owned by media drivers and must not be touched by entity
- drivers. Access to the field must be protected by the media device graph_mutex
- lock.
-+
-+
-+Links setup
-+-----------
-+
-+Link properties can be modified at runtime by calling
-+
-+	media_entity_setup_link(struct media_link *link, u32 flags);
-+
-+The flags argument contains the requested new link flags.
-+
-+The only configurable property is the ENABLED link flag to enable/disable a
-+link. Links marked with the IMMUTABLE link flag can not be enabled or disabled.
-+
-+When a link is enabled or disabled, the media framework calls the
-+link_setup operation for the two entities at the source and sink of the link,
-+in that order. If the second link_setup call fails, another link_setup call is
-+made on the first entity to restore the original link flags.
-+
-+Media device drivers can be notified of link setup operations by setting the
-+media_device::link_notify pointer to a callback function. If provided, the
-+notification callback will be called before enabling and after disabling
-+links.
-+
-+Entity drivers must implement the link_setup operation if any of their links
-+is non-immutable. The operation must either configure the hardware or store
-+the configuration information to be applied later.
-+
-+Link configuration must not have any side effect on other links. If an enabled
-+link at a sink pad prevents another link at the same pad from being disabled,
-+the link_setup operation must return -EBUSY and can't implicitly disable the
-+first enabled link.
-diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
-index 1f46acb..719deba 100644
---- a/drivers/media/media-device.c
-+++ b/drivers/media/media-device.c
-@@ -172,6 +172,44 @@ static long media_device_enum_links(struct media_device *mdev,
- 	return 0;
- }
- 
-+static long media_device_setup_link(struct media_device *mdev,
-+				    struct media_link_desc __user *_ulink)
-+{
-+	struct media_link *link = NULL;
-+	struct media_link_desc ulink;
-+	struct media_entity *source;
-+	struct media_entity *sink;
-+	int ret;
-+
-+	if (copy_from_user(&ulink, _ulink, sizeof(ulink)))
-+		return -EFAULT;
-+
-+	/* Find the source and sink entities and link.
-+	 */
-+	source = find_entity(mdev, ulink.source.entity);
-+	sink = find_entity(mdev, ulink.sink.entity);
-+
-+	if (source == NULL || sink == NULL)
-+		return -EINVAL;
-+
-+	if (ulink.source.index >= source->num_pads ||
-+	    ulink.sink.index >= sink->num_pads)
-+		return -EINVAL;
-+
-+	link = media_entity_find_link(&source->pads[ulink.source.index],
-+				      &sink->pads[ulink.sink.index]);
-+	if (link == NULL)
-+		return -EINVAL;
-+
-+	/* Setup the link on both entities. */
-+	ret = __media_entity_setup_link(link, ulink.flags);
-+
-+	if (copy_to_user(_ulink, &ulink, sizeof(ulink)))
-+		return -EFAULT;
-+
-+	return ret;
-+}
-+
- static long media_device_ioctl(struct file *filp, unsigned int cmd,
- 			       unsigned long arg)
- {
-@@ -197,6 +235,13 @@ static long media_device_ioctl(struct file *filp, unsigned int cmd,
- 		mutex_unlock(&dev->graph_mutex);
- 		break;
- 
-+	case MEDIA_IOC_SETUP_LINK:
-+		mutex_lock(&dev->graph_mutex);
-+		ret = media_device_setup_link(dev,
-+				(struct media_link_desc __user *)arg);
-+		mutex_unlock(&dev->graph_mutex);
-+		break;
-+
- 	default:
- 		ret = -ENOIOCTLCMD;
- 	}
-diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
-index fe6bfd2..d703ce8 100644
---- a/drivers/media/media-entity.c
-+++ b/drivers/media/media-entity.c
-@@ -306,3 +306,158 @@ media_entity_create_link(struct media_entity *source, u16 source_pad,
- 	return 0;
- }
- EXPORT_SYMBOL_GPL(media_entity_create_link);
-+
-+static int __media_entity_setup_link_notify(struct media_link *link, u32 flags)
-+{
-+	const u32 mask = MEDIA_LNK_FL_ENABLED;
-+	int ret;
-+
-+	/* Notify both entities. */
-+	ret = media_entity_call(link->source->entity, link_setup,
-+				link->source, link->sink, flags);
-+	if (ret < 0 && ret != -ENOIOCTLCMD)
-+		return ret;
-+
-+	ret = media_entity_call(link->sink->entity, link_setup,
-+				link->sink, link->source, flags);
-+	if (ret < 0 && ret != -ENOIOCTLCMD) {
-+		media_entity_call(link->source->entity, link_setup,
-+				  link->source, link->sink, link->flags);
-+		return ret;
-+	}
-+
-+	link->flags = (link->flags & ~mask) | (flags & mask);
-+	link->reverse->flags = link->flags;
-+
-+	return 0;
-+}
-+
-+/**
-+ * __media_entity_setup_link - Configure a media link
-+ * @link: The link being configured
-+ * @flags: Link configuration flags
-+ *
-+ * The bulk of link setup is handled by the two entities connected through the
-+ * link. This function notifies both entities of the link configuration change.
-+ *
-+ * If the link is immutable or if the current and new configuration are
-+ * identical, return immediately.
-+ *
-+ * The user is expected to hold link->source->parent->mutex. If not,
-+ * media_entity_setup_link() should be used instead.
-+ */
-+int __media_entity_setup_link(struct media_link *link, u32 flags)
-+{
-+	struct media_device *mdev;
-+	struct media_entity *source, *sink;
-+	int ret = -EBUSY;
-+
-+	if (link == NULL)
-+		return -EINVAL;
-+
-+	if (link->flags & MEDIA_LNK_FL_IMMUTABLE)
-+		return link->flags == flags ? 0 : -EINVAL;
-+
-+	if (link->flags == flags)
-+		return 0;
-+
-+	source = link->source->entity;
-+	sink = link->sink->entity;
-+
-+	mdev = source->parent;
-+
-+	if ((flags & MEDIA_LNK_FL_ENABLED) && mdev->link_notify) {
-+		ret = mdev->link_notify(link->source, link->sink,
-+					MEDIA_LNK_FL_ENABLED);
-+		if (ret < 0)
-+			return ret;
-+	}
-+
-+	ret = __media_entity_setup_link_notify(link, flags);
-+	if (ret < 0)
-+		goto err;
-+
-+	if (!(flags & MEDIA_LNK_FL_ENABLED) && mdev->link_notify)
-+		mdev->link_notify(link->source, link->sink, 0);
-+
-+	return 0;
-+
-+err:
-+	if ((flags & MEDIA_LNK_FL_ENABLED) && mdev->link_notify)
-+		mdev->link_notify(link->source, link->sink, 0);
-+
-+	return ret;
-+}
-+
-+int media_entity_setup_link(struct media_link *link, u32 flags)
-+{
-+	int ret;
-+
-+	mutex_lock(&link->source->entity->parent->graph_mutex);
-+	ret = __media_entity_setup_link(link, flags);
-+	mutex_unlock(&link->source->entity->parent->graph_mutex);
-+
-+	return ret;
-+}
-+EXPORT_SYMBOL_GPL(media_entity_setup_link);
-+
-+/**
-+ * media_entity_find_link - Find a link between two pads
-+ * @source: Source pad
-+ * @sink: Sink pad
-+ *
-+ * Return a pointer to the link between the two entities. If no such link
-+ * exists, return NULL.
-+ */
-+struct media_link *
-+media_entity_find_link(struct media_pad *source, struct media_pad *sink)
-+{
-+	struct media_link *link;
-+	unsigned int i;
-+
-+	for (i = 0; i < source->entity->num_links; ++i) {
-+		link = &source->entity->links[i];
-+
-+		if (link->source->entity == source->entity &&
-+		    link->source->index == source->index &&
-+		    link->sink->entity == sink->entity &&
-+		    link->sink->index == sink->index)
-+			return link;
-+	}
-+
-+	return NULL;
-+}
-+EXPORT_SYMBOL_GPL(media_entity_find_link);
-+
-+/**
-+ * media_entity_remote_source - Find the source pad at the remote end of a link
-+ * @pad: Sink pad at the local end of the link
-+ *
-+ * Search for a remote source pad connected to the given sink pad by iterating
-+ * over all links originating or terminating at that pad until an enabled link
-+ * is found.
-+ *
-+ * Return a pointer to the pad at the remote end of the first found enabled
-+ * link, or NULL if no enabled link has been found.
-+ */
-+struct media_pad *media_entity_remote_source(struct media_pad *pad)
-+{
-+	unsigned int i;
-+
-+	for (i = 0; i < pad->entity->num_links; i++) {
-+		struct media_link *link = &pad->entity->links[i];
-+
-+		if (!(link->flags & MEDIA_LNK_FL_ENABLED))
-+			continue;
-+
-+		if (link->source == pad)
-+			return link->sink;
-+
-+		if (link->sink == pad)
-+			return link->source;
-+	}
-+
-+	return NULL;
-+
-+}
-+EXPORT_SYMBOL_GPL(media_entity_remote_source);
-diff --git a/include/linux/media.h b/include/linux/media.h
-index 64c0313..2f67ed2 100644
---- a/include/linux/media.h
-+++ b/include/linux/media.h
-@@ -126,5 +126,6 @@ struct media_links_enum {
- #define MEDIA_IOC_DEVICE_INFO		_IOWR('M', 1, struct media_device_info)
- #define MEDIA_IOC_ENUM_ENTITIES		_IOWR('M', 2, struct media_entity_desc)
- #define MEDIA_IOC_ENUM_LINKS		_IOWR('M', 3, struct media_links_enum)
-+#define MEDIA_IOC_SETUP_LINK		_IOWR('M', 4, struct media_link_desc)
- 
- #endif /* __LINUX_MEDIA_H */
-diff --git a/include/media/media-device.h b/include/media/media-device.h
-index 260d59c..ad93e66 100644
---- a/include/media/media-device.h
-+++ b/include/media/media-device.h
-@@ -73,6 +73,9 @@ struct media_device {
- 	spinlock_t lock;
- 	/* Serializes graph operations. */
- 	struct mutex graph_mutex;
-+
-+	int (*link_notify)(struct media_pad *source,
-+			   struct media_pad *sink, u32 flags);
- };
- 
- /* media_devnode to media_device */
-diff --git a/include/media/media-entity.h b/include/media/media-entity.h
-index 0954490..60fc7bd 100644
---- a/include/media/media-entity.h
-+++ b/include/media/media-entity.h
-@@ -39,6 +39,12 @@ struct media_pad {
- 	unsigned long flags;		/* Pad flags (MEDIA_PAD_FL_*) */
- };
- 
-+struct media_entity_operations {
-+	int (*link_setup)(struct media_entity *entity,
-+			  const struct media_pad *local,
-+			  const struct media_pad *remote, u32 flags);
-+};
-+
- struct media_entity {
- 	struct list_head list;
- 	struct media_device *parent;	/* Media device this entity belongs to*/
-@@ -59,6 +65,8 @@ struct media_entity {
- 	struct media_pad *pads;		/* Pads array (num_pads elements) */
- 	struct media_link *links;	/* Links array (max_links elements)*/
- 
-+	const struct media_entity_operations *ops;	/* Entity operations */
-+
- 	int use_count;			/* Use count for the entity. */
- 
- 	union {
-@@ -108,6 +116,11 @@ int media_entity_init(struct media_entity *entity, u16 num_pads,
- void media_entity_cleanup(struct media_entity *entity);
- int media_entity_create_link(struct media_entity *source, u16 source_pad,
- 		struct media_entity *sink, u16 sink_pad, u32 flags);
-+int __media_entity_setup_link(struct media_link *link, u32 flags);
-+int media_entity_setup_link(struct media_link *link, u32 flags);
-+struct media_link *media_entity_find_link(struct media_pad *source,
-+		struct media_pad *sink);
-+struct media_pad *media_entity_remote_source(struct media_pad *pad);
- 
- struct media_entity *media_entity_get(struct media_entity *entity);
- void media_entity_put(struct media_entity *entity);
-@@ -117,4 +130,8 @@ void media_entity_graph_walk_start(struct media_entity_graph *graph,
- struct media_entity *
- media_entity_graph_walk_next(struct media_entity_graph *graph);
- 
-+#define media_entity_call(entity, operation, args...)			\
-+	(((entity)->ops && (entity)->ops->operation) ?			\
-+	 (entity)->ops->operation((entity) , ##args) : -ENOIOCTLCMD)
-+
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0016-media-Pipelines-and-media-streams.patch b/recipes-kernel/linux/linux-omap/media/0016-media-Pipelines-and-media-streams.patch
deleted file mode 100644
index 969162f..0000000
--- a/recipes-kernel/linux/linux-omap/media/0016-media-Pipelines-and-media-streams.patch
+++ /dev/null
@@ -1,259 +0,0 @@
-From 4e07e9ada1b3baaec6d4948eccf3c0499e3228df Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 25 Aug 2010 15:00:41 +0300
-Subject: [PATCH 16/43] media: Pipelines and media streams
-
-Drivers often need to associate pipeline objects to entities, and to
-take stream state into account when configuring entities and links. The
-pipeline API helps drivers manage that information.
-
-When starting streaming, drivers call media_entity_pipeline_start(). The
-function marks all entities connected to the given entity through
-enabled links, either directly or indirectly, as streaming. Similarly,
-when stopping the stream, drivers call media_entity_pipeline_stop().
-
-The media_entity_pipeline_start() function takes a pointer to a media
-pipeline and stores it in every entity in the graph. Drivers should
-embed the media_pipeline structure in higher-level pipeline structures
-and can then access the pipeline through the media_entity structure.
-
-Link configuration will fail with -EBUSY by default if either end of the
-link is a streaming entity, unless the link is marked with the
-MEDIA_LNK_FL_DYNAMIC flag.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/DocBook/v4l/media-ioc-enum-links.xml |    5 ++
- Documentation/DocBook/v4l/media-ioc-setup-link.xml |    3 +
- Documentation/media-framework.txt                  |   38 ++++++++++
- drivers/media/media-entity.c                       |   73 ++++++++++++++++++++
- include/linux/media.h                              |    1 +
- include/media/media-entity.h                       |   10 +++
- 6 files changed, 130 insertions(+), 0 deletions(-)
-
-diff --git a/Documentation/DocBook/v4l/media-ioc-enum-links.xml b/Documentation/DocBook/v4l/media-ioc-enum-links.xml
-index daf0360..b204bfb 100644
---- a/Documentation/DocBook/v4l/media-ioc-enum-links.xml
-+++ b/Documentation/DocBook/v4l/media-ioc-enum-links.xml
-@@ -179,6 +179,11 @@
- 	    <entry>The link enabled state can't be modified at runtime. An
- 	    immutable link is always enabled.</entry>
- 	  </row>
-+	  <row>
-+	    <entry><constant>MEDIA_LNK_FL_DYNAMIC</constant></entry>
-+	    <entry>The link enabled state can be modified during streaming. This
-+	    flag is set by drivers and is read-only for applications.</entry>
-+	  </row>
- 	</tbody>
-       </tgroup>
-     </table>
-diff --git a/Documentation/DocBook/v4l/media-ioc-setup-link.xml b/Documentation/DocBook/v4l/media-ioc-setup-link.xml
-index 09ab3d2..2331e76 100644
---- a/Documentation/DocBook/v4l/media-ioc-setup-link.xml
-+++ b/Documentation/DocBook/v4l/media-ioc-setup-link.xml
-@@ -60,6 +60,9 @@
-     <para>Link configuration has no side effect on other links. If an enabled
-     link at the sink pad prevents the link from being enabled, the driver
-     returns with an &EBUSY;.</para>
-+    <para>Only links marked with the <constant>DYNAMIC</constant> link flag can
-+    be enabled/disabled while streaming media data. Attempting to enable or
-+    disable a streaming non-dynamic link will return an &EBUSY;.</para>
-     <para>If the specified link can't be found the driver returns with an
-     &EINVAL;.</para>
-   </refsect1>
-diff --git a/Documentation/media-framework.txt b/Documentation/media-framework.txt
-index 634845e..435d0c4 100644
---- a/Documentation/media-framework.txt
-+++ b/Documentation/media-framework.txt
-@@ -313,3 +313,41 @@ Link configuration must not have any side effect on other links. If an enabled
- link at a sink pad prevents another link at the same pad from being disabled,
- the link_setup operation must return -EBUSY and can't implicitly disable the
- first enabled link.
-+
-+
-+Pipelines and media streams
-+---------------------------
-+
-+When starting streaming, drivers must notify all entities in the pipeline to
-+prevent link states from being modified during streaming by calling
-+
-+	media_entity_pipeline_start(struct media_entity *entity,
-+				    struct media_pipeline *pipe);
-+
-+The function will mark all entities connected to the given entity through
-+enabled links, either directly or indirectly, as streaming.
-+
-+The media_pipeline instance pointed to by the pipe argument will be stored in
-+every entity in the pipeline. Drivers should embed the media_pipeline structure
-+in higher-level pipeline structures and can then access the pipeline through
-+the media_entity pipe field.
-+
-+Calls to media_entity_pipeline_start() can be nested. The pipeline pointer must
-+be identical for all nested calls to the function.
-+
-+When stopping the stream, drivers must notify the entities with
-+
-+	media_entity_pipeline_stop(struct media_entity *entity);
-+
-+If multiple calls to media_entity_pipeline_start() have been made the same
-+number of media_entity_pipeline_stop() calls are required to stop streaming. The
-+media_entity pipe field is reset to NULL on the last nested stop call.
-+
-+Link configuration will fail with -EBUSY by default if either end of the link is
-+a streaming entity. Links that can be modified while streaming must be marked
-+with the MEDIA_LNK_FL_DYNAMIC flag.
-+
-+If other operations need to be disallowed on streaming entities (such as
-+changing entities configuration parameters) drivers can explictly check the
-+media_entity stream_count field to find out if an entity is streaming. This
-+operation must be done with the media_device graph_mutex held.
-diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
-index d703ce8..e63e089 100644
---- a/drivers/media/media-entity.c
-+++ b/drivers/media/media-entity.c
-@@ -197,6 +197,75 @@ media_entity_graph_walk_next(struct media_entity_graph *graph)
- EXPORT_SYMBOL_GPL(media_entity_graph_walk_next);
- 
- /* -----------------------------------------------------------------------------
-+ * Pipeline management
-+ */
-+
-+/**
-+ * media_entity_pipeline_start - Mark a pipeline as streaming
-+ * @entity: Starting entity
-+ * @pipe: Media pipeline to be assigned to all entities in the pipeline.
-+ *
-+ * Mark all entities connected to a given entity through enabled links, either
-+ * directly or indirectly, as streaming. The given pipeline object is assigned to
-+ * every entity in the pipeline and stored in the media_entity pipe field.
-+ *
-+ * Calls to this function can be nested, in which case the same number of
-+ * media_entity_pipeline_stop() calls will be required to stop streaming. The
-+ * pipeline pointer must be identical for all nested calls to
-+ * media_entity_pipeline_start().
-+ */
-+void media_entity_pipeline_start(struct media_entity *entity,
-+				 struct media_pipeline *pipe)
-+{
-+	struct media_device *mdev = entity->parent;
-+	struct media_entity_graph graph;
-+
-+	mutex_lock(&mdev->graph_mutex);
-+
-+	media_entity_graph_walk_start(&graph, entity);
-+
-+	while ((entity = media_entity_graph_walk_next(&graph))) {
-+		entity->stream_count++;
-+		WARN_ON(entity->pipe && entity->pipe != pipe);
-+		entity->pipe = pipe;
-+	}
-+
-+	mutex_unlock(&mdev->graph_mutex);
-+}
-+EXPORT_SYMBOL_GPL(media_entity_pipeline_start);
-+
-+/**
-+ * media_entity_pipeline_stop - Mark a pipeline as not streaming
-+ * @entity: Starting entity
-+ *
-+ * Mark all entities connected to a given entity through enabled links, either
-+ * directly or indirectly, as not streaming. The media_entity pipe field is
-+ * reset to NULL.
-+ *
-+ * If multiple calls to media_entity_pipeline_start() have been made, the same
-+ * number of calls to this function are required to mark the pipeline as not
-+ * streaming.
-+ */
-+void media_entity_pipeline_stop(struct media_entity *entity)
-+{
-+	struct media_device *mdev = entity->parent;
-+	struct media_entity_graph graph;
-+
-+	mutex_lock(&mdev->graph_mutex);
-+
-+	media_entity_graph_walk_start(&graph, entity);
-+
-+	while ((entity = media_entity_graph_walk_next(&graph))) {
-+		entity->stream_count--;
-+		if (entity->stream_count == 0)
-+			entity->pipe = NULL;
-+	}
-+
-+	mutex_unlock(&mdev->graph_mutex);
-+}
-+EXPORT_SYMBOL_GPL(media_entity_pipeline_stop);
-+
-+/* -----------------------------------------------------------------------------
-  * Module use count
-  */
- 
-@@ -364,6 +433,10 @@ int __media_entity_setup_link(struct media_link *link, u32 flags)
- 	source = link->source->entity;
- 	sink = link->sink->entity;
- 
-+	if (!(link->flags & MEDIA_LNK_FL_DYNAMIC) &&
-+	    (source->stream_count || sink->stream_count))
-+		return -EBUSY;
-+
- 	mdev = source->parent;
- 
- 	if ((flags & MEDIA_LNK_FL_ENABLED) && mdev->link_notify) {
-diff --git a/include/linux/media.h b/include/linux/media.h
-index 2f67ed2..29039e8 100644
---- a/include/linux/media.h
-+++ b/include/linux/media.h
-@@ -106,6 +106,7 @@ struct media_pad_desc {
- 
- #define MEDIA_LNK_FL_ENABLED		(1 << 0)
- #define MEDIA_LNK_FL_IMMUTABLE		(1 << 1)
-+#define MEDIA_LNK_FL_DYNAMIC		(1 << 2)
- 
- struct media_link_desc {
- 	struct media_pad_desc source;
-diff --git a/include/media/media-entity.h b/include/media/media-entity.h
-index 60fc7bd..450ba12 100644
---- a/include/media/media-entity.h
-+++ b/include/media/media-entity.h
-@@ -26,6 +26,9 @@
- #include <linux/list.h>
- #include <linux/media.h>
- 
-+struct media_pipeline {
-+};
-+
- struct media_link {
- 	struct media_pad *source;	/* Source pad */
- 	struct media_pad *sink;		/* Sink pad  */
-@@ -67,8 +70,11 @@ struct media_entity {
- 
- 	const struct media_entity_operations *ops;	/* Entity operations */
- 
-+	int stream_count;		/* Stream count for the entity. */
- 	int use_count;			/* Use count for the entity. */
- 
-+	struct media_pipeline *pipe;	/* Pipeline this entity belongs to. */
-+
- 	union {
- 		/* Node specifications */
- 		struct {
-@@ -114,6 +120,7 @@ struct media_entity_graph {
- int media_entity_init(struct media_entity *entity, u16 num_pads,
- 		struct media_pad *pads, u16 extra_links);
- void media_entity_cleanup(struct media_entity *entity);
-+
- int media_entity_create_link(struct media_entity *source, u16 source_pad,
- 		struct media_entity *sink, u16 sink_pad, u32 flags);
- int __media_entity_setup_link(struct media_link *link, u32 flags);
-@@ -129,6 +136,9 @@ void media_entity_graph_walk_start(struct media_entity_graph *graph,
- 		struct media_entity *entity);
- struct media_entity *
- media_entity_graph_walk_next(struct media_entity_graph *graph);
-+void media_entity_pipeline_start(struct media_entity *entity,
-+		struct media_pipeline *pipe);
-+void media_entity_pipeline_stop(struct media_entity *entity);
- 
- #define media_entity_call(entity, operation, args...)			\
- 	(((entity)->ops && (entity)->ops->operation) ?			\
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0017-v4l-Add-a-media_device-pointer-to-the-v4l2_device-st.patch b/recipes-kernel/linux/linux-omap/media/0017-v4l-Add-a-media_device-pointer-to-the-v4l2_device-st.patch
deleted file mode 100644
index 714c5a3..0000000
--- a/recipes-kernel/linux/linux-omap/media/0017-v4l-Add-a-media_device-pointer-to-the-v4l2_device-st.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 56e006c01032f98483195e572700e17fb8aaa8b1 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:40:05 +0100
-Subject: [PATCH 17/43] v4l: Add a media_device pointer to the v4l2_device structure
-
-The pointer will later be used to register/unregister media entities
-when registering/unregistering a v4l2_subdev or a video_device.
-
-With the introduction of media devices, device drivers need to store a
-pointer to a driver-specific structure in the device's drvdata.
-v4l2_device can't claim ownership of the drvdata anymore.
-
-To maintain compatibility with drivers that rely on v4l2_device storing
-a pointer to itself in the device's drvdata, v4l2_device_register() will
-keep doing so if the drvdata is NULL.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/video4linux/v4l2-framework.txt |   17 ++++++++++++-----
- drivers/media/video/v4l2-device.c            |   13 +++++++------
- include/media/v4l2-device.h                  |    4 ++++
- 3 files changed, 23 insertions(+), 11 deletions(-)
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index 4db1def..aeb2a22 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -83,11 +83,17 @@ You must register the device instance:
- 
- 	v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev);
- 
--Registration will initialize the v4l2_device struct and link dev->driver_data
--to v4l2_dev. If v4l2_dev->name is empty then it will be set to a value derived
--from dev (driver name followed by the bus_id, to be precise). If you set it
--up before calling v4l2_device_register then it will be untouched. If dev is
--NULL, then you *must* setup v4l2_dev->name before calling v4l2_device_register.
-+Registration will initialize the v4l2_device struct. If the dev->driver_data
-+field is NULL, it will be linked to v4l2_dev. Drivers that use the media
-+device framework in addition to the V4L2 framework need to set
-+dev->driver_data manually to point to the driver-specific device structure
-+that embed the struct v4l2_device instance. This is achieved by a
-+dev_set_drvdata() call before registering the V4L2 device instance.
-+
-+If v4l2_dev->name is empty then it will be set to a value derived from dev
-+(driver name followed by the bus_id, to be precise). If you set it up before
-+calling v4l2_device_register then it will be untouched. If dev is NULL, then
-+you *must* setup v4l2_dev->name before calling v4l2_device_register.
- 
- You can use v4l2_device_set_name() to set the name based on a driver name and
- a driver-global atomic_t instance. This will generate names like ivtv0, ivtv1,
-@@ -108,6 +114,7 @@ You unregister with:
- 
- 	v4l2_device_unregister(struct v4l2_device *v4l2_dev);
- 
-+If the dev->driver_data field points to v4l2_dev, it will be reset to NULL.
- Unregistering will also automatically unregister all subdevs from the device.
- 
- If you have a hotpluggable device (e.g. a USB device), then when a disconnect
-diff --git a/drivers/media/video/v4l2-device.c b/drivers/media/video/v4l2-device.c
-index 97e84df..5c16a12 100644
---- a/drivers/media/video/v4l2-device.c
-+++ b/drivers/media/video/v4l2-device.c
-@@ -47,9 +47,8 @@ int v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev)
- 	if (!v4l2_dev->name[0])
- 		snprintf(v4l2_dev->name, sizeof(v4l2_dev->name), "%s %s",
- 			dev->driver->name, dev_name(dev));
--	if (dev_get_drvdata(dev))
--		v4l2_warn(v4l2_dev, "Non-NULL drvdata on register\n");
--	dev_set_drvdata(dev, v4l2_dev);
-+	if (!dev_get_drvdata(dev))
-+		dev_set_drvdata(dev, v4l2_dev);
- 	return 0;
- }
- EXPORT_SYMBOL_GPL(v4l2_device_register);
-@@ -72,10 +71,12 @@ EXPORT_SYMBOL_GPL(v4l2_device_set_name);
- 
- void v4l2_device_disconnect(struct v4l2_device *v4l2_dev)
- {
--	if (v4l2_dev->dev) {
-+	if (v4l2_dev->dev == NULL)
-+		return;
-+
-+	if (dev_get_drvdata(v4l2_dev->dev) == v4l2_dev)
- 		dev_set_drvdata(v4l2_dev->dev, NULL);
--		v4l2_dev->dev = NULL;
--	}
-+	v4l2_dev->dev = NULL;
- }
- EXPORT_SYMBOL_GPL(v4l2_device_disconnect);
- 
-diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h
-index b16f307..759db73 100644
---- a/include/media/v4l2-device.h
-+++ b/include/media/v4l2-device.h
-@@ -21,6 +21,7 @@
- #ifndef _V4L2_DEVICE_H
- #define _V4L2_DEVICE_H
- 
-+#include <media/media-device.h>
- #include <media/v4l2-subdev.h>
- 
- /* Each instance of a V4L2 device should create the v4l2_device struct,
-@@ -39,6 +40,9 @@ struct v4l2_device {
- 	   Note: dev might be NULL if there is no parent device
- 	   as is the case with e.g. ISA devices. */
- 	struct device *dev;
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct media_device *mdev;
-+#endif
- 	/* used to keep track of the registered subdevs */
- 	struct list_head subdevs;
- 	/* lock this struct; can be used by the driver as well if this
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0018-v4l-Make-video_device-inherit-from-media_entity.patch b/recipes-kernel/linux/linux-omap/media/0018-v4l-Make-video_device-inherit-from-media_entity.patch
deleted file mode 100644
index 6417d1d..0000000
--- a/recipes-kernel/linux/linux-omap/media/0018-v4l-Make-video_device-inherit-from-media_entity.patch
+++ /dev/null
@@ -1,234 +0,0 @@
-From e31cb57c733341b49256a47f086fa4cc1c1c56ac Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:40:10 +0100
-Subject: [PATCH 18/43] v4l: Make video_device inherit from media_entity
-
-V4L2 devices are media entities. As such they need to inherit from
-(include) the media_entity structure.
-
-When registering/unregistering the device, the media entity is
-automatically registered/unregistered. The entity is acquired on device
-open and released on device close.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/video4linux/v4l2-framework.txt |   38 ++++++++++++++++++--
- drivers/media/video/v4l2-dev.c               |   49 +++++++++++++++++++++++--
- include/media/v4l2-dev.h                     |    7 ++++
- 3 files changed, 87 insertions(+), 7 deletions(-)
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index aeb2a22..f231bc2 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -71,6 +71,10 @@ sub-device instances, the video_device struct stores V4L2 device node data
- and in the future a v4l2_fh struct will keep track of filehandle instances
- (this is not yet implemented).
- 
-+The V4L2 framework also optionally integrates with the media framework. If a
-+driver sets the struct v4l2_device mdev field, sub-devices and video nodes
-+will automatically appear in the media framework as entities.
-+
- 
- struct v4l2_device
- ------------------
-@@ -84,11 +88,14 @@ You must register the device instance:
- 	v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev);
- 
- Registration will initialize the v4l2_device struct. If the dev->driver_data
--field is NULL, it will be linked to v4l2_dev. Drivers that use the media
--device framework in addition to the V4L2 framework need to set
-+field is NULL, it will be linked to v4l2_dev.
-+
-+Drivers that want integration with the media device framework need to set
- dev->driver_data manually to point to the driver-specific device structure
- that embed the struct v4l2_device instance. This is achieved by a
--dev_set_drvdata() call before registering the V4L2 device instance.
-+dev_set_drvdata() call before registering the V4L2 device instance. They must
-+also set the struct v4l2_device mdev field to point to a properly initialized
-+and registered media_device instance.
- 
- If v4l2_dev->name is empty then it will be set to a value derived from dev
- (driver name followed by the bus_id, to be precise). If you set it up before
-@@ -532,6 +539,21 @@ If you use v4l2_ioctl_ops, then you should set either .unlocked_ioctl or
- The v4l2_file_operations struct is a subset of file_operations. The main
- difference is that the inode argument is omitted since it is never used.
- 
-+If integration with the media framework is needed, you must initialize the
-+media_entity struct embedded in the video_device struct (entity field) by
-+calling media_entity_init():
-+
-+	struct media_pad *pad = &my_vdev->pad;
-+	int err;
-+
-+	err = media_entity_init(&vdev->entity, 1, pad, 0);
-+
-+The pads array must have been previously initialized. There is no need to
-+manually set the struct media_entity type and name fields.
-+
-+A reference to the entity will be automatically acquired/released when the
-+video device is opened/closed.
-+
- v4l2_file_operations and locking
- --------------------------------
- 
-@@ -561,6 +583,9 @@ for you.
- 		return err;
- 	}
- 
-+If the v4l2_device parent device has a non-NULL mdev field, the video device
-+entity will be automatically registered with the media device.
-+
- Which device is registered depends on the type argument. The following
- types exist:
- 
-@@ -636,6 +661,13 @@ release, of course) will return an error as well.
- When the last user of the video device node exits, then the vdev->release()
- callback is called and you can do the final cleanup there.
- 
-+Don't forget to cleanup the media entity associated with the video device if
-+it has been initialized:
-+
-+	media_entity_cleanup(&vdev->entity);
-+
-+This can be done from the release callback.
-+
- 
- video_device helper functions
- -----------------------------
-diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
-index f22bd41..f91348f 100644
---- a/drivers/media/video/v4l2-dev.c
-+++ b/drivers/media/video/v4l2-dev.c
-@@ -303,6 +303,9 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
- static int v4l2_open(struct inode *inode, struct file *filp)
- {
- 	struct video_device *vdev;
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct media_entity *entity = NULL;
-+#endif
- 	int ret = 0;
- 
- 	/* Check if the video device is available */
-@@ -316,6 +319,16 @@ static int v4l2_open(struct inode *inode, struct file *filp)
- 	/* and increase the device refcount */
- 	video_get(vdev);
- 	mutex_unlock(&videodev_lock);
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) {
-+		entity = media_entity_get(&vdev->entity);
-+		if (!entity) {
-+			ret = -EBUSY;
-+			video_put(vdev);
-+			return ret;
-+		}
-+	}
-+#endif
- 	if (vdev->fops->open) {
- 		if (vdev->lock && mutex_lock_interruptible(vdev->lock)) {
- 			ret = -ERESTARTSYS;
-@@ -331,8 +344,13 @@ static int v4l2_open(struct inode *inode, struct file *filp)
- 
- err:
- 	/* decrease the refcount in case of an error */
--	if (ret)
-+	if (ret) {
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+		if (vdev->v4l2_dev && vdev->v4l2_dev->mdev)
-+			media_entity_put(entity);
-+#endif
- 		video_put(vdev);
-+	}
- 	return ret;
- }
- 
-@@ -349,7 +367,10 @@ static int v4l2_release(struct inode *inode, struct file *filp)
- 		if (vdev->lock)
- 			mutex_unlock(vdev->lock);
- 	}
--
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (vdev->v4l2_dev && vdev->v4l2_dev->mdev)
-+		media_entity_put(&vdev->entity);
-+#endif
- 	/* decrease the refcount unconditionally since the release()
- 	   return value is ignored. */
- 	video_put(vdev);
-@@ -586,12 +607,27 @@ int __video_register_device(struct video_device *vdev, int type, int nr,
- 	if (nr != -1 && nr != vdev->num && warn_if_nr_in_use)
- 		printk(KERN_WARNING "%s: requested %s%d, got %s\n", __func__,
- 			name_base, nr, video_device_node_name(vdev));
--
--	/* Part 5: Activate this minor. The char device can now be used. */
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	/* Part 5: Register the entity. */
-+	if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) {
-+		vdev->entity.type = MEDIA_ENT_T_DEVNODE_V4L;
-+		vdev->entity.name = vdev->name;
-+		vdev->entity.v4l.major = VIDEO_MAJOR;
-+		vdev->entity.v4l.minor = vdev->minor;
-+		ret = media_device_register_entity(vdev->v4l2_dev->mdev,
-+			&vdev->entity);
-+		if (ret < 0)
-+			printk(KERN_WARNING
-+			       "%s: media_device_register_entity failed\n",
-+			       __func__);
-+	}
-+#endif
-+	/* Part 6: Activate this minor. The char device can now be used. */
- 	set_bit(V4L2_FL_REGISTERED, &vdev->flags);
- 	mutex_lock(&videodev_lock);
- 	video_device[vdev->minor] = vdev;
- 	mutex_unlock(&videodev_lock);
-+
- 	return 0;
- 
- cleanup:
-@@ -619,6 +655,11 @@ void video_unregister_device(struct video_device *vdev)
- 	if (!vdev || !video_is_registered(vdev))
- 		return;
- 
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (vdev->v4l2_dev && vdev->v4l2_dev->mdev)
-+		media_device_unregister_entity(&vdev->entity);
-+#endif
-+
- 	mutex_lock(&videodev_lock);
- 	/* This must be in a critical section to prevent a race with v4l2_open.
- 	 * Once this bit has been cleared video_get may never be called again.
-diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
-index 4fe6831..51b2c51 100644
---- a/include/media/v4l2-dev.h
-+++ b/include/media/v4l2-dev.h
-@@ -16,6 +16,8 @@
- #include <linux/mutex.h>
- #include <linux/videodev2.h>
- 
-+#include <media/media-entity.h>
-+
- #define VIDEO_MAJOR	81
- 
- #define VFL_TYPE_GRABBER	0
-@@ -55,6 +57,9 @@ struct v4l2_file_operations {
- 
- struct video_device
- {
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct media_entity entity;
-+#endif
- 	/* device ops */
- 	const struct v4l2_file_operations *fops;
- 
-@@ -100,6 +105,8 @@ struct video_device
- 	struct mutex *lock;
- };
- 
-+#define media_entity_to_video_device(entity) \
-+	container_of(entity, struct video_device, entity)
- /* dev to video-device */
- #define to_video_device(cd) container_of(cd, struct video_device, dev)
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0019-v4l-Make-v4l2_subdev-inherit-from-media_entity.patch b/recipes-kernel/linux/linux-omap/media/0019-v4l-Make-v4l2_subdev-inherit-from-media_entity.patch
deleted file mode 100644
index c7ae882..0000000
--- a/recipes-kernel/linux/linux-omap/media/0019-v4l-Make-v4l2_subdev-inherit-from-media_entity.patch
+++ /dev/null
@@ -1,265 +0,0 @@
-From ab4bf9e43078f79ba2b287e6dd6d6871901d0341 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:40:08 +0100
-Subject: [PATCH 19/43] v4l: Make v4l2_subdev inherit from media_entity
-
-V4L2 subdevices are media entities. As such they need to inherit from
-(include) the media_entity structure.
-
-When registering/unregistering the subdevice, the media entity is
-automatically registered/unregistered. The entity is acquired on device
-open and released on device close.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/video4linux/v4l2-framework.txt |   23 ++++++++++++++
- drivers/media/video/v4l2-device.c            |   39 ++++++++++++++++++++----
- drivers/media/video/v4l2-subdev.c            |   41 ++++++++++++++++++++++++-
- include/media/v4l2-subdev.h                  |   10 ++++++
- 4 files changed, 104 insertions(+), 9 deletions(-)
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index f231bc2..d0fb880 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -268,6 +268,26 @@ A sub-device driver initializes the v4l2_subdev struct using:
- Afterwards you need to initialize subdev->name with a unique name and set the
- module owner. This is done for you if you use the i2c helper functions.
- 
-+If integration with the media framework is needed, you must initialize the
-+media_entity struct embedded in the v4l2_subdev struct (entity field) by
-+calling media_entity_init():
-+
-+	struct media_pad *pads = &my_sd->pads;
-+	int err;
-+
-+	err = media_entity_init(&sd->entity, npads, pads, 0);
-+
-+The pads array must have been previously initialized. There is no need to
-+manually set the struct media_entity type and name fields, but the revision
-+field must be initialized if needed.
-+
-+A reference to the entity will be automatically acquired/released when the
-+subdev device node (if any) is opened/closed.
-+
-+Don't forget to cleanup the media entity before the sub-device is destroyed:
-+
-+	media_entity_cleanup(&sd->entity);
-+
- A device (bridge) driver needs to register the v4l2_subdev with the
- v4l2_device:
- 
-@@ -277,6 +297,9 @@ This can fail if the subdev module disappeared before it could be registered.
- After this function was called successfully the subdev->dev field points to
- the v4l2_device.
- 
-+If the v4l2_device parent device has a non-NULL mdev field, the sub-device
-+entity will be automatically registered with the media device.
-+
- You can unregister a sub-device using:
- 
- 	v4l2_device_unregister_subdev(sd);
-diff --git a/drivers/media/video/v4l2-device.c b/drivers/media/video/v4l2-device.c
-index 5c16a12..69cb429 100644
---- a/drivers/media/video/v4l2-device.c
-+++ b/drivers/media/video/v4l2-device.c
-@@ -116,8 +116,11 @@ void v4l2_device_unregister(struct v4l2_device *v4l2_dev)
- EXPORT_SYMBOL_GPL(v4l2_device_unregister);
- 
- int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev,
--						struct v4l2_subdev *sd)
-+				struct v4l2_subdev *sd)
- {
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct media_entity *entity = &sd->entity;
-+#endif
- 	struct video_device *vdev;
- 	int err;
- 
-@@ -135,7 +138,16 @@ int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev,
- 	err = v4l2_ctrl_add_handler(v4l2_dev->ctrl_handler, sd->ctrl_handler);
- 	if (err)
- 		return err;
--
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	/* Register the entity. */
-+	if (v4l2_dev->mdev) {
-+		err = media_device_register_entity(v4l2_dev->mdev, entity);
-+		if (err < 0) {
-+			module_put(sd->owner);
-+			return err;
-+		}
-+	}
-+#endif
- 	sd->v4l2_dev = v4l2_dev;
- 	spin_lock(&v4l2_dev->lock);
- 	list_add_tail(&sd->list, &v4l2_dev->subdevs);
-@@ -150,26 +162,39 @@ int v4l2_device_register_subdev(struct v4l2_device *v4l2_dev,
- 	if (sd->flags & V4L2_SUBDEV_FL_HAS_DEVNODE) {
- 		err = __video_register_device(vdev, VFL_TYPE_SUBDEV, -1, 1,
- 					      sd->owner);
--		if (err < 0)
-+		if (err < 0) {
- 			v4l2_device_unregister_subdev(sd);
-+			return err;
-+		}
- 	}
--
--	return err;
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	entity->v4l.major = VIDEO_MAJOR;
-+	entity->v4l.minor = vdev->minor;
-+#endif
-+	return 0;
- }
- EXPORT_SYMBOL_GPL(v4l2_device_register_subdev);
- 
- void v4l2_device_unregister_subdev(struct v4l2_subdev *sd)
- {
-+	struct v4l2_device *v4l2_dev;
-+
- 	/* return if it isn't registered */
- 	if (sd == NULL || sd->v4l2_dev == NULL)
- 		return;
- 
--	spin_lock(&sd->v4l2_dev->lock);
-+	v4l2_dev = sd->v4l2_dev;
-+
-+	spin_lock(&v4l2_dev->lock);
- 	list_del(&sd->list);
--	spin_unlock(&sd->v4l2_dev->lock);
-+	spin_unlock(&v4l2_dev->lock);
- 	sd->v4l2_dev = NULL;
- 
- 	module_put(sd->owner);
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (v4l2_dev->mdev)
-+		media_device_unregister_entity(&sd->entity);
-+#endif
- 	video_unregister_device(&sd->devnode);
- }
- EXPORT_SYMBOL_GPL(v4l2_device_unregister_subdev);
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index fbccefd..a49856a 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -35,7 +35,10 @@ static int subdev_open(struct file *file)
- {
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
--	struct v4l2_fh *vfh;
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct media_entity *entity;
-+#endif
-+	struct v4l2_fh *vfh = NULL;
- 	int ret;
- 
- 	if (!sd->initialized)
-@@ -61,11 +64,20 @@ static int subdev_open(struct file *file)
- 		v4l2_fh_add(vfh);
- 		file->private_data = vfh;
- 	}
--
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (sd->v4l2_dev->mdev) {
-+		entity = media_entity_get(&sd->entity);
-+		if (!entity) {
-+			ret = -EBUSY;
-+			goto err;
-+		}
-+	}
-+#endif
- 	return 0;
- 
- err:
- 	if (vfh != NULL) {
-+		v4l2_fh_del(vfh);
- 		v4l2_fh_exit(vfh);
- 		kfree(vfh);
- 	}
-@@ -75,8 +87,16 @@ err:
- 
- static int subdev_close(struct file *file)
- {
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct video_device *vdev = video_devdata(file);
-+	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+#endif
- 	struct v4l2_fh *vfh = file->private_data;
- 
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (sd->v4l2_dev->mdev)
-+		media_entity_put(&sd->entity);
-+#endif
- 	if (vfh != NULL) {
- 		v4l2_fh_del(vfh);
- 		v4l2_fh_exit(vfh);
-@@ -176,5 +196,22 @@ void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops)
- 	sd->dev_priv = NULL;
- 	sd->host_priv = NULL;
- 	sd->initialized = 1;
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	sd->entity.name = sd->name;
-+	sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV;
-+#endif
- }
- EXPORT_SYMBOL(v4l2_subdev_init);
-+
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+int v4l2_subdev_set_power(struct media_entity *entity, int power)
-+{
-+	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
-+
-+	dev_dbg(entity->parent->dev,
-+		"%s power%s\n", entity->name, power ? "on" : "off");
-+
-+	return v4l2_subdev_call(sd, core, s_power, power);
-+}
-+EXPORT_SYMBOL_GPL(v4l2_subdev_set_power);
-+#endif
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index 68cbe48..7d55b0c 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -21,6 +21,7 @@
- #ifndef _V4L2_SUBDEV_H
- #define _V4L2_SUBDEV_H
- 
-+#include <media/media-entity.h>
- #include <media/v4l2-common.h>
- #include <media/v4l2-dev.h>
- #include <media/v4l2-mediabus.h>
-@@ -437,6 +438,9 @@ struct v4l2_subdev_ops {
-    stand-alone or embedded in a larger struct.
-  */
- struct v4l2_subdev {
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	struct media_entity entity;
-+#endif
- 	struct list_head list;
- 	struct module *owner;
- 	u32 flags;
-@@ -458,6 +462,8 @@ struct v4l2_subdev {
- 	unsigned int nevents;
- };
- 
-+#define media_entity_to_v4l2_subdev(ent) \
-+	container_of(ent, struct v4l2_subdev, entity)
- #define vdev_to_v4l2_subdev(vdev) \
- 	container_of(vdev, struct v4l2_subdev, devnode)
- 
-@@ -486,6 +492,10 @@ static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
- void v4l2_subdev_init(struct v4l2_subdev *sd,
- 		      const struct v4l2_subdev_ops *ops);
- 
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+int v4l2_subdev_set_power(struct media_entity *entity, int power);
-+#endif
-+
- /* Call an ops of a v4l2_subdev, doing the right checks against
-    NULL pointers.
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0020-v4l-Move-the-media-v4l2-mediabus.h-header-to-include.patch b/recipes-kernel/linux/linux-omap/media/0020-v4l-Move-the-media-v4l2-mediabus.h-header-to-include.patch
deleted file mode 100644
index 302fe53..0000000
--- a/recipes-kernel/linux/linux-omap/media/0020-v4l-Move-the-media-v4l2-mediabus.h-header-to-include.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-From 0d2a2247733eca8f357f5a93fcc357edbb941ec1 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Mon, 15 Mar 2010 23:33:31 +0100
-Subject: [PATCH 20/43] v4l: Move the media/v4l2-mediabus.h header to include/linux
-
-The header defines the v4l2_mbus_framefmt structure which will be used
-by the V4L2 subdevs userspace API.
-
-Change the type of the v4l2_mbus_framefmt::code field to __u32, as enum
-sizes can differ between different ABIs on the same architectures.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/linux/Kbuild          |    1 +
- include/linux/v4l2-mediabus.h |   78 +++++++++++++++++++++++++++++++++++++++++
- include/media/soc_mediabus.h  |    3 +-
- include/media/v4l2-mediabus.h |   61 +-------------------------------
- 4 files changed, 81 insertions(+), 62 deletions(-)
- create mode 100644 include/linux/v4l2-mediabus.h
-
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index 26e0a7f..796e1d8 100644
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -366,6 +366,7 @@ header-y += unistd.h
- header-y += usbdevice_fs.h
- header-y += utime.h
- header-y += utsname.h
-+header-y += v4l2-mediabus.h
- header-y += veth.h
- header-y += vhost.h
- header-y += videodev.h
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-new file mode 100644
-index 0000000..a62cd64
---- /dev/null
-+++ b/include/linux/v4l2-mediabus.h
-@@ -0,0 +1,78 @@
-+/*
-+ * Media Bus API header
-+ *
-+ * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski at gmx.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifndef __LINUX_V4L2_MEDIABUS_H
-+#define __LINUX_V4L2_MEDIABUS_H
-+
-+#include <linux/types.h>
-+#include <linux/videodev2.h>
-+
-+/*
-+ * These pixel codes uniquely identify data formats on the media bus. Mostly
-+ * they correspond to similarly named V4L2_PIX_FMT_* formats, format 0 is
-+ * reserved, V4L2_MBUS_FMT_FIXED shall be used by host-client pairs, where the
-+ * data format is fixed. Additionally, "2X8" means that one pixel is transferred
-+ * in two 8-bit samples, "BE" or "LE" specify in which order those samples are
-+ * transferred over the bus: "LE" means that the least significant bits are
-+ * transferred first, "BE" means that the most significant bits are transferred
-+ * first, and "PADHI" and "PADLO" define which bits - low or high, in the
-+ * incomplete high byte, are filled with padding bits.
-+ */
-+enum v4l2_mbus_pixelcode {
-+	V4L2_MBUS_FMT_FIXED = 1,
-+	V4L2_MBUS_FMT_YUYV8_2X8,
-+	V4L2_MBUS_FMT_YVYU8_2X8,
-+	V4L2_MBUS_FMT_UYVY8_2X8,
-+	V4L2_MBUS_FMT_VYUY8_2X8,
-+	V4L2_MBUS_FMT_YVYU10_2X10,
-+	V4L2_MBUS_FMT_YUYV10_2X10,
-+	V4L2_MBUS_FMT_YVYU10_1X20,
-+	V4L2_MBUS_FMT_YUYV10_1X20,
-+	V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE,
-+	V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE,
-+	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
-+	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
-+	V4L2_MBUS_FMT_RGB565_2X8_LE,
-+	V4L2_MBUS_FMT_RGB565_2X8_BE,
-+	V4L2_MBUS_FMT_BGR565_2X8_LE,
-+	V4L2_MBUS_FMT_BGR565_2X8_BE,
-+	V4L2_MBUS_FMT_SBGGR8_1X8,
-+	V4L2_MBUS_FMT_SBGGR10_1X10,
-+	V4L2_MBUS_FMT_GREY8_1X8,
-+	V4L2_MBUS_FMT_Y10_1X10,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE,
-+	V4L2_MBUS_FMT_SGRBG8_1X8,
-+	V4L2_MBUS_FMT_SBGGR12_1X12,
-+	V4L2_MBUS_FMT_YUYV8_1_5X8,
-+	V4L2_MBUS_FMT_YVYU8_1_5X8,
-+	V4L2_MBUS_FMT_UYVY8_1_5X8,
-+	V4L2_MBUS_FMT_VYUY8_1_5X8,
-+};
-+
-+/**
-+ * struct v4l2_mbus_framefmt - frame format on the media bus
-+ * @width:	frame width
-+ * @height:	frame height
-+ * @code:	data format code
-+ * @field:	used interlacing type
-+ * @colorspace:	colorspace of the data
-+ */
-+struct v4l2_mbus_framefmt {
-+	__u32				width;
-+	__u32				height;
-+	__u32				code;
-+	enum v4l2_field			field;
-+	enum v4l2_colorspace		colorspace;
-+};
-+
-+#endif
-diff --git a/include/media/soc_mediabus.h b/include/media/soc_mediabus.h
-index 037cd7b..6243147 100644
---- a/include/media/soc_mediabus.h
-+++ b/include/media/soc_mediabus.h
-@@ -12,8 +12,7 @@
- #define SOC_MEDIABUS_H
- 
- #include <linux/videodev2.h>
--
--#include <media/v4l2-mediabus.h>
-+#include <linux/v4l2-mediabus.h>
- 
- /**
-  * enum soc_mbus_packing - data packing types on the media-bus
-diff --git a/include/media/v4l2-mediabus.h b/include/media/v4l2-mediabus.h
-index 8e65598..971c7fa 100644
---- a/include/media/v4l2-mediabus.h
-+++ b/include/media/v4l2-mediabus.h
-@@ -11,66 +11,7 @@
- #ifndef V4L2_MEDIABUS_H
- #define V4L2_MEDIABUS_H
- 
--/*
-- * These pixel codes uniquely identify data formats on the media bus. Mostly
-- * they correspond to similarly named V4L2_PIX_FMT_* formats, format 0 is
-- * reserved, V4L2_MBUS_FMT_FIXED shall be used by host-client pairs, where the
-- * data format is fixed. Additionally, "2X8" means that one pixel is transferred
-- * in two 8-bit samples, "BE" or "LE" specify in which order those samples are
-- * transferred over the bus: "LE" means that the least significant bits are
-- * transferred first, "BE" means that the most significant bits are transferred
-- * first, and "PADHI" and "PADLO" define which bits - low or high, in the
-- * incomplete high byte, are filled with padding bits.
-- */
--enum v4l2_mbus_pixelcode {
--	V4L2_MBUS_FMT_FIXED = 1,
--	V4L2_MBUS_FMT_YUYV8_2X8,
--	V4L2_MBUS_FMT_YVYU8_2X8,
--	V4L2_MBUS_FMT_UYVY8_2X8,
--	V4L2_MBUS_FMT_VYUY8_2X8,
--	V4L2_MBUS_FMT_YVYU10_2X10,
--	V4L2_MBUS_FMT_YUYV10_2X10,
--	V4L2_MBUS_FMT_YVYU10_1X20,
--	V4L2_MBUS_FMT_YUYV10_1X20,
--	V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE,
--	V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE,
--	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
--	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
--	V4L2_MBUS_FMT_RGB565_2X8_LE,
--	V4L2_MBUS_FMT_RGB565_2X8_BE,
--	V4L2_MBUS_FMT_BGR565_2X8_LE,
--	V4L2_MBUS_FMT_BGR565_2X8_BE,
--	V4L2_MBUS_FMT_SBGGR8_1X8,
--	V4L2_MBUS_FMT_SBGGR10_1X10,
--	V4L2_MBUS_FMT_GREY8_1X8,
--	V4L2_MBUS_FMT_Y10_1X10,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE,
--	V4L2_MBUS_FMT_SGRBG8_1X8,
--	V4L2_MBUS_FMT_SBGGR12_1X12,
--	V4L2_MBUS_FMT_YUYV8_1_5X8,
--	V4L2_MBUS_FMT_YVYU8_1_5X8,
--	V4L2_MBUS_FMT_UYVY8_1_5X8,
--	V4L2_MBUS_FMT_VYUY8_1_5X8,
--};
--
--/**
-- * struct v4l2_mbus_framefmt - frame format on the media bus
-- * @width:	frame width
-- * @height:	frame height
-- * @code:	data format code
-- * @field:	used interlacing type
-- * @colorspace:	colorspace of the data
-- */
--struct v4l2_mbus_framefmt {
--	__u32				width;
--	__u32				height;
--	enum v4l2_mbus_pixelcode	code;
--	enum v4l2_field			field;
--	enum v4l2_colorspace		colorspace;
--};
-+#include <linux/v4l2-mediabus.h>
- 
- static inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt,
- 				const struct v4l2_mbus_framefmt *mbus_fmt)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0021-v4l-Replace-enums-with-fixed-sized-fields-in-public-.patch b/recipes-kernel/linux/linux-omap/media/0021-v4l-Replace-enums-with-fixed-sized-fields-in-public-.patch
deleted file mode 100644
index e04f4e2..0000000
--- a/recipes-kernel/linux/linux-omap/media/0021-v4l-Replace-enums-with-fixed-sized-fields-in-public-.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From fb1156d3125e36952f884b09afb9d0815ddeafd7 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 6 Oct 2010 08:30:26 +0200
-Subject: [PATCH 21/43] v4l: Replace enums with fixed-sized fields in public structure
-
-The v4l2_mbus_framefmt structure will be part of the public userspace
-API and used (albeit indirectly) as an ioctl argument. As such, its size
-must be fixed across userspace ABIs.
-
-Replace the v4l2_field and v4l2_colorspace enums by __u32 fields and add
-padding for future enhancements.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/linux/v4l2-mediabus.h |   17 +++++++++--------
- 1 files changed, 9 insertions(+), 8 deletions(-)
-
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-index a62cd64..feeb88c 100644
---- a/include/linux/v4l2-mediabus.h
-+++ b/include/linux/v4l2-mediabus.h
-@@ -63,16 +63,17 @@ enum v4l2_mbus_pixelcode {
-  * struct v4l2_mbus_framefmt - frame format on the media bus
-  * @width:	frame width
-  * @height:	frame height
-- * @code:	data format code
-- * @field:	used interlacing type
-- * @colorspace:	colorspace of the data
-+ * @code:	data format code (from enum v4l2_mbus_pixelcode)
-+ * @field:	used interlacing type (from enum v4l2_field)
-+ * @colorspace:	colorspace of the data (from enum v4l2_colorspace)
-  */
- struct v4l2_mbus_framefmt {
--	__u32				width;
--	__u32				height;
--	__u32				code;
--	enum v4l2_field			field;
--	enum v4l2_colorspace		colorspace;
-+	__u32			width;
-+	__u32			height;
-+	__u32			code;
-+	__u32			field;
-+	__u32			colorspace;
-+	__u32			reserved[7];
- };
- 
- #endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0022-v4l-Rename-V4L2_MBUS_FMT_GREY8_1X8-to-V4L2_MBUS_FMT_.patch b/recipes-kernel/linux/linux-omap/media/0022-v4l-Rename-V4L2_MBUS_FMT_GREY8_1X8-to-V4L2_MBUS_FMT_.patch
deleted file mode 100644
index ffffd26..0000000
--- a/recipes-kernel/linux/linux-omap/media/0022-v4l-Rename-V4L2_MBUS_FMT_GREY8_1X8-to-V4L2_MBUS_FMT_.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-From 0be9c8b998cef9ce650e1e53d12bb5a6d772d151 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Tue, 28 Sep 2010 12:01:44 +0200
-Subject: [PATCH 22/43] v4l: Rename V4L2_MBUS_FMT_GREY8_1X8 to V4L2_MBUS_FMT_Y8_1X8
-
-For consistency with the V4L2_MBUS_FMT_Y10_1X10 format.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/video/mt9m001.c        |    2 +-
- drivers/media/video/mt9v022.c        |    4 ++--
- drivers/media/video/ov6650.c         |   10 +++++-----
- drivers/media/video/sh_mobile_csi2.c |    6 +++---
- drivers/media/video/soc_mediabus.c   |    2 +-
- include/linux/v4l2-mediabus.h        |    2 +-
- 6 files changed, 13 insertions(+), 13 deletions(-)
-
-diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c
-index fcb4cd9..3aaedf6 100644
---- a/drivers/media/video/mt9m001.c
-+++ b/drivers/media/video/mt9m001.c
-@@ -79,7 +79,7 @@ static const struct mt9m001_datafmt mt9m001_colour_fmts[] = {
- static const struct mt9m001_datafmt mt9m001_monochrome_fmts[] = {
- 	/* Order important - see above */
- 	{V4L2_MBUS_FMT_Y10_1X10, V4L2_COLORSPACE_JPEG},
--	{V4L2_MBUS_FMT_GREY8_1X8, V4L2_COLORSPACE_JPEG},
-+	{V4L2_MBUS_FMT_Y8_1X8, V4L2_COLORSPACE_JPEG},
- };
- 
- struct mt9m001 {
-diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c
-index b96171c..56dd4fc 100644
---- a/drivers/media/video/mt9v022.c
-+++ b/drivers/media/video/mt9v022.c
-@@ -95,7 +95,7 @@ static const struct mt9v022_datafmt mt9v022_colour_fmts[] = {
- static const struct mt9v022_datafmt mt9v022_monochrome_fmts[] = {
- 	/* Order important - see above */
- 	{V4L2_MBUS_FMT_Y10_1X10, V4L2_COLORSPACE_JPEG},
--	{V4L2_MBUS_FMT_GREY8_1X8, V4L2_COLORSPACE_JPEG},
-+	{V4L2_MBUS_FMT_Y8_1X8, V4L2_COLORSPACE_JPEG},
- };
- 
- struct mt9v022 {
-@@ -392,7 +392,7 @@ static int mt9v022_s_fmt(struct v4l2_subdev *sd,
- 	 * icd->try_fmt(), datawidth is from our supported format list
- 	 */
- 	switch (mf->code) {
--	case V4L2_MBUS_FMT_GREY8_1X8:
-+	case V4L2_MBUS_FMT_Y8_1X8:
- 	case V4L2_MBUS_FMT_Y10_1X10:
- 		if (mt9v022->model != V4L2_IDENT_MT9V022IX7ATM)
- 			return -EINVAL;
-diff --git a/drivers/media/video/ov6650.c b/drivers/media/video/ov6650.c
-index cf93de9..fe8e3eb 100644
---- a/drivers/media/video/ov6650.c
-+++ b/drivers/media/video/ov6650.c
-@@ -207,7 +207,7 @@ static enum v4l2_mbus_pixelcode ov6650_codes[] = {
- 	V4L2_MBUS_FMT_YVYU8_2X8,
- 	V4L2_MBUS_FMT_VYUY8_2X8,
- 	V4L2_MBUS_FMT_SBGGR8_1X8,
--	V4L2_MBUS_FMT_GREY8_1X8,
-+	V4L2_MBUS_FMT_Y8_1X8,
- };
- 
- static const struct v4l2_queryctrl ov6650_controls[] = {
-@@ -800,7 +800,7 @@ static int ov6650_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
- 
- 	/* select color matrix configuration for given color encoding */
- 	switch (code) {
--	case V4L2_MBUS_FMT_GREY8_1X8:
-+	case V4L2_MBUS_FMT_Y8_1X8:
- 		dev_dbg(&client->dev, "pixel format GREY8_1X8\n");
- 		coma_mask |= COMA_RGB | COMA_WORD_SWAP | COMA_BYTE_SWAP;
- 		coma_set |= COMA_BW;
-@@ -846,7 +846,7 @@ static int ov6650_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
- 	}
- 	priv->code = code;
- 
--	if (code == V4L2_MBUS_FMT_GREY8_1X8 ||
-+	if (code == V4L2_MBUS_FMT_Y8_1X8 ||
- 			code == V4L2_MBUS_FMT_SBGGR8_1X8) {
- 		coml_mask = COML_ONE_CHANNEL;
- 		coml_set = 0;
-@@ -936,8 +936,8 @@ static int ov6650_try_fmt(struct v4l2_subdev *sd,
- 
- 	switch (mf->code) {
- 	case V4L2_MBUS_FMT_Y10_1X10:
--		mf->code = V4L2_MBUS_FMT_GREY8_1X8;
--	case V4L2_MBUS_FMT_GREY8_1X8:
-+		mf->code = V4L2_MBUS_FMT_Y8_1X8;
-+	case V4L2_MBUS_FMT_Y8_1X8:
- 	case V4L2_MBUS_FMT_YVYU8_2X8:
- 	case V4L2_MBUS_FMT_YUYV8_2X8:
- 	case V4L2_MBUS_FMT_VYUY8_2X8:
-diff --git a/drivers/media/video/sh_mobile_csi2.c b/drivers/media/video/sh_mobile_csi2.c
-index 84a6468..dd1b81b 100644
---- a/drivers/media/video/sh_mobile_csi2.c
-+++ b/drivers/media/video/sh_mobile_csi2.c
-@@ -56,7 +56,7 @@ static int sh_csi2_try_fmt(struct v4l2_subdev *sd,
- 		switch (mf->code) {
- 		case V4L2_MBUS_FMT_UYVY8_2X8:		/* YUV422 */
- 		case V4L2_MBUS_FMT_YUYV8_1_5X8:		/* YUV420 */
--		case V4L2_MBUS_FMT_GREY8_1X8:		/* RAW8 */
-+		case V4L2_MBUS_FMT_Y8_1X8:		/* RAW8 */
- 		case V4L2_MBUS_FMT_SBGGR8_1X8:
- 		case V4L2_MBUS_FMT_SGRBG8_1X8:
- 			break;
-@@ -67,7 +67,7 @@ static int sh_csi2_try_fmt(struct v4l2_subdev *sd,
- 		break;
- 	case SH_CSI2I:
- 		switch (mf->code) {
--		case V4L2_MBUS_FMT_GREY8_1X8:		/* RAW8 */
-+		case V4L2_MBUS_FMT_Y8_1X8:		/* RAW8 */
- 		case V4L2_MBUS_FMT_SBGGR8_1X8:
- 		case V4L2_MBUS_FMT_SGRBG8_1X8:
- 		case V4L2_MBUS_FMT_SBGGR10_1X10:	/* RAW10 */
-@@ -111,7 +111,7 @@ static int sh_csi2_s_fmt(struct v4l2_subdev *sd,
- 	case V4L2_MBUS_FMT_RGB565_2X8_BE:
- 		tmp |= 0x22;	/* RGB565 */
- 		break;
--	case V4L2_MBUS_FMT_GREY8_1X8:
-+	case V4L2_MBUS_FMT_Y8_1X8:
- 	case V4L2_MBUS_FMT_SBGGR8_1X8:
- 	case V4L2_MBUS_FMT_SGRBG8_1X8:
- 		tmp |= 0x2a;	/* RAW8 */
-diff --git a/drivers/media/video/soc_mediabus.c b/drivers/media/video/soc_mediabus.c
-index 9139121..d9c297d 100644
---- a/drivers/media/video/soc_mediabus.c
-+++ b/drivers/media/video/soc_mediabus.c
-@@ -88,7 +88,7 @@ static const struct soc_mbus_pixelfmt mbus_fmt[] = {
- 		.packing		= SOC_MBUS_PACKING_EXTEND16,
- 		.order			= SOC_MBUS_ORDER_LE,
- 	},
--	[MBUS_IDX(GREY8_1X8)] = {
-+	[MBUS_IDX(Y8_1X8)] = {
- 		.fourcc			= V4L2_PIX_FMT_GREY,
- 		.name			= "Grey",
- 		.bits_per_sample	= 8,
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-index feeb88c..dc1d5c0 100644
---- a/include/linux/v4l2-mediabus.h
-+++ b/include/linux/v4l2-mediabus.h
-@@ -45,7 +45,7 @@ enum v4l2_mbus_pixelcode {
- 	V4L2_MBUS_FMT_BGR565_2X8_BE,
- 	V4L2_MBUS_FMT_SBGGR8_1X8,
- 	V4L2_MBUS_FMT_SBGGR10_1X10,
--	V4L2_MBUS_FMT_GREY8_1X8,
-+	V4L2_MBUS_FMT_Y8_1X8,
- 	V4L2_MBUS_FMT_Y10_1X10,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0023-v4l-Group-media-bus-pixel-codes-by-types-and-sort-th.patch b/recipes-kernel/linux/linux-omap/media/0023-v4l-Group-media-bus-pixel-codes-by-types-and-sort-th.patch
deleted file mode 100644
index aee5444..0000000
--- a/recipes-kernel/linux/linux-omap/media/0023-v4l-Group-media-bus-pixel-codes-by-types-and-sort-th.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 9a13751e47503b4c966538e194a5027e5e7d9c5d Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 1 Sep 2010 17:58:22 +0200
-Subject: [PATCH 23/43] v4l: Group media bus pixel codes by types and sort them alphabetically
-
-Adding new pixel codes at the end of the enumeration will soon create a
-mess, so group the pixel codes by type and sort them by bus_width, bits
-per component, samples per pixel and order of subsamples.
-
-As the codes are part of the kernel ABI their value can't change when a
-new code is inserted in the enumeration, so they are given an explicit
-numerical value. When inserting a new pixel code developers must use and
-update the next free value.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/linux/v4l2-mediabus.h |   77 ++++++++++++++++++++++++----------------
- 1 files changed, 46 insertions(+), 31 deletions(-)
-
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-index dc1d5c0..cccfa34 100644
---- a/include/linux/v4l2-mediabus.h
-+++ b/include/linux/v4l2-mediabus.h
-@@ -24,39 +24,54 @@
-  * transferred first, "BE" means that the most significant bits are transferred
-  * first, and "PADHI" and "PADLO" define which bits - low or high, in the
-  * incomplete high byte, are filled with padding bits.
-+ *
-+ * The pixel codes are grouped by type, bus_width, bits per component, samples
-+ * per pixel and order of subsamples. Numerical values are sorted using generic
-+ * numerical sort order (8 thus comes before 10).
-+ *
-+ * As their value can't change when a new pixel code is inserted in the
-+ * enumeration, the pixel codes are explicitly given a numerical value. The next
-+ * free values for each category are listed below, update them when inserting
-+ * new pixel codes.
-  */
- enum v4l2_mbus_pixelcode {
--	V4L2_MBUS_FMT_FIXED = 1,
--	V4L2_MBUS_FMT_YUYV8_2X8,
--	V4L2_MBUS_FMT_YVYU8_2X8,
--	V4L2_MBUS_FMT_UYVY8_2X8,
--	V4L2_MBUS_FMT_VYUY8_2X8,
--	V4L2_MBUS_FMT_YVYU10_2X10,
--	V4L2_MBUS_FMT_YUYV10_2X10,
--	V4L2_MBUS_FMT_YVYU10_1X20,
--	V4L2_MBUS_FMT_YUYV10_1X20,
--	V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE,
--	V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE,
--	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
--	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
--	V4L2_MBUS_FMT_RGB565_2X8_LE,
--	V4L2_MBUS_FMT_RGB565_2X8_BE,
--	V4L2_MBUS_FMT_BGR565_2X8_LE,
--	V4L2_MBUS_FMT_BGR565_2X8_BE,
--	V4L2_MBUS_FMT_SBGGR8_1X8,
--	V4L2_MBUS_FMT_SBGGR10_1X10,
--	V4L2_MBUS_FMT_Y8_1X8,
--	V4L2_MBUS_FMT_Y10_1X10,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE,
--	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE,
--	V4L2_MBUS_FMT_SGRBG8_1X8,
--	V4L2_MBUS_FMT_SBGGR12_1X12,
--	V4L2_MBUS_FMT_YUYV8_1_5X8,
--	V4L2_MBUS_FMT_YVYU8_1_5X8,
--	V4L2_MBUS_FMT_UYVY8_1_5X8,
--	V4L2_MBUS_FMT_VYUY8_1_5X8,
-+	V4L2_MBUS_FMT_FIXED = 0x0001,
-+
-+	/* RGB - next is 0x1009 */
-+	V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE = 0x1001,
-+	V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE = 0x1002,
-+	V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE = 0x1003,
-+	V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE = 0x1004,
-+	V4L2_MBUS_FMT_BGR565_2X8_BE = 0x1005,
-+	V4L2_MBUS_FMT_BGR565_2X8_LE = 0x1006,
-+	V4L2_MBUS_FMT_RGB565_2X8_BE = 0x1007,
-+	V4L2_MBUS_FMT_RGB565_2X8_LE = 0x1008,
-+
-+	/* YUV (including grey) - next is 0x200f */
-+	V4L2_MBUS_FMT_Y8_1X8 = 0x2001,
-+	V4L2_MBUS_FMT_UYVY8_1_5X8 = 0x2002,
-+	V4L2_MBUS_FMT_VYUY8_1_5X8 = 0x2003,
-+	V4L2_MBUS_FMT_YUYV8_1_5X8 = 0x2004,
-+	V4L2_MBUS_FMT_YVYU8_1_5X8 = 0x2005,
-+	V4L2_MBUS_FMT_UYVY8_2X8 = 0x2006,
-+	V4L2_MBUS_FMT_VYUY8_2X8 = 0x2007,
-+	V4L2_MBUS_FMT_YUYV8_2X8 = 0x2008,
-+	V4L2_MBUS_FMT_YVYU8_2X8 = 0x2009,
-+	V4L2_MBUS_FMT_Y10_1X10 = 0x200a,
-+	V4L2_MBUS_FMT_YUYV10_2X10 = 0x200b,
-+	V4L2_MBUS_FMT_YVYU10_2X10 = 0x200c,
-+	V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d,
-+	V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e,
-+
-+	/* Bayer - next is 0x3009 */
-+	V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001,
-+	V4L2_MBUS_FMT_SGRBG8_1X8 = 0x3002,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE = 0x3003,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE = 0x3004,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE = 0x3005,
-+	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE = 0x3006,
-+	V4L2_MBUS_FMT_SBGGR10_1X10 = 0x3007,
-+	V4L2_MBUS_FMT_SBGGR12_1X12 = 0x3008,
- };
- 
- /**
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0024-v4l-Create-v4l2-subdev-file-handle-structure.patch b/recipes-kernel/linux/linux-omap/media/0024-v4l-Create-v4l2-subdev-file-handle-structure.patch
deleted file mode 100644
index 726af5d..0000000
--- a/recipes-kernel/linux/linux-omap/media/0024-v4l-Create-v4l2-subdev-file-handle-structure.patch
+++ /dev/null
@@ -1,243 +0,0 @@
-From 47f7677adda05f6d85a35047c4aac940c46a123c Mon Sep 17 00:00:00 2001
-From: Stanimir Varbanov <svarbanov at mm-sol.com>
-Date: Fri, 21 May 2010 12:04:24 +0300
-Subject: [PATCH 24/43] v4l: Create v4l2 subdev file handle structure
-
-Used for storing subdev information per file handle and hold V4L2 file
-handle.
-
-Signed-off-by: Stanimir Varbanov <svarbanov at mm-sol.com>
-Signed-off-by: Antti Koskipaa <antti.koskipaa at nokia.com>
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/Kconfig             |    9 ++++
- drivers/media/video/v4l2-subdev.c |   85 +++++++++++++++++++++++++------------
- include/media/v4l2-subdev.h       |   29 +++++++++++++
- 3 files changed, 96 insertions(+), 27 deletions(-)
-
-diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
-index 6b946e6..eaf4734 100644
---- a/drivers/media/Kconfig
-+++ b/drivers/media/Kconfig
-@@ -82,6 +82,15 @@ config VIDEO_V4L1_COMPAT
- 
- 	  If you are unsure as to whether this is required, answer Y.
- 
-+config VIDEO_V4L2_SUBDEV_API
-+	bool "V4L2 sub-device userspace API (EXPERIMENTAL)"
-+	depends on VIDEO_DEV && MEDIA_CONTROLLER && EXPERIMENTAL
-+	---help---
-+	  Enables the V4L2 sub-device pad-level userspace API used to configure
-+	  video format, size and frame rate between hardware blocks.
-+
-+	  This API is mostly used by camera interfaces in embedded platforms.
-+
- #
- # DVB Core
- #
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index a49856a..15449fc 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -31,39 +31,69 @@
- #include <media/v4l2-fh.h>
- #include <media/v4l2-event.h>
- 
-+static int subdev_fh_init(struct v4l2_subdev_fh *fh, struct v4l2_subdev *sd)
-+{
-+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-+	/* Allocate try format and crop in the same memory block */
-+	fh->try_fmt = kzalloc((sizeof(*fh->try_fmt) + sizeof(*fh->try_crop))
-+			      * sd->entity.num_pads, GFP_KERNEL);
-+	if (fh->try_fmt == NULL)
-+		return -ENOMEM;
-+
-+	fh->try_crop = (struct v4l2_rect *)
-+		(fh->try_fmt + sd->entity.num_pads);
-+#endif
-+	return 0;
-+}
-+
-+static void subdev_fh_free(struct v4l2_subdev_fh *fh)
-+{
-+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-+	kfree(fh->try_fmt);
-+	fh->try_fmt = NULL;
-+	fh->try_crop = NULL;
-+#endif
-+}
-+
- static int subdev_open(struct file *file)
- {
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
-+	struct v4l2_subdev_fh *subdev_fh;
- #if defined(CONFIG_MEDIA_CONTROLLER)
- 	struct media_entity *entity;
- #endif
--	struct v4l2_fh *vfh = NULL;
- 	int ret;
- 
- 	if (!sd->initialized)
- 		return -EAGAIN;
- 
--	if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) {
--		vfh = kzalloc(sizeof(*vfh), GFP_KERNEL);
--		if (vfh == NULL)
--			return -ENOMEM;
-+	subdev_fh = kzalloc(sizeof(*subdev_fh), GFP_KERNEL);
-+	if (subdev_fh == NULL)
-+		return -ENOMEM;
- 
--		ret = v4l2_fh_init(vfh, vdev);
--		if (ret)
--			goto err;
-+	ret = subdev_fh_init(subdev_fh, sd);
-+	if (ret) {
-+		kfree(subdev_fh);
-+		return ret;
-+	}
-+
-+	ret = v4l2_fh_init(&subdev_fh->vfh, vdev);
-+	if (ret)
-+		goto err;
- 
--		ret = v4l2_event_init(vfh);
-+	if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) {
-+		ret = v4l2_event_init(&subdev_fh->vfh);
- 		if (ret)
- 			goto err;
- 
--		ret = v4l2_event_alloc(vfh, sd->nevents);
-+		ret = v4l2_event_alloc(&subdev_fh->vfh, sd->nevents);
- 		if (ret)
- 			goto err;
--
--		v4l2_fh_add(vfh);
--		file->private_data = vfh;
- 	}
-+
-+	v4l2_fh_add(&subdev_fh->vfh);
-+	file->private_data = &subdev_fh->vfh;
- #if defined(CONFIG_MEDIA_CONTROLLER)
- 	if (sd->v4l2_dev->mdev) {
- 		entity = media_entity_get(&sd->entity);
-@@ -73,14 +103,14 @@ static int subdev_open(struct file *file)
- 		}
- 	}
- #endif
-+
- 	return 0;
- 
- err:
--	if (vfh != NULL) {
--		v4l2_fh_del(vfh);
--		v4l2_fh_exit(vfh);
--		kfree(vfh);
--	}
-+	v4l2_fh_del(&subdev_fh->vfh);
-+	v4l2_fh_exit(&subdev_fh->vfh);
-+	subdev_fh_free(subdev_fh);
-+	kfree(subdev_fh);
- 
- 	return ret;
- }
-@@ -92,16 +122,17 @@ static int subdev_close(struct file *file)
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
- #endif
- 	struct v4l2_fh *vfh = file->private_data;
-+	struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh);
- 
- #if defined(CONFIG_MEDIA_CONTROLLER)
- 	if (sd->v4l2_dev->mdev)
- 		media_entity_put(&sd->entity);
- #endif
--	if (vfh != NULL) {
--		v4l2_fh_del(vfh);
--		v4l2_fh_exit(vfh);
--		kfree(vfh);
--	}
-+	v4l2_fh_del(vfh);
-+	v4l2_fh_exit(vfh);
-+	subdev_fh_free(subdev_fh);
-+	kfree(subdev_fh);
-+	file->private_data = NULL;
- 
- 	return 0;
- }
-@@ -110,7 +141,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- {
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
--	struct v4l2_fh *fh = file->private_data;
-+	struct v4l2_fh *vfh = file->private_data;
- 
- 	switch (cmd) {
- 	case VIDIOC_QUERYCTRL:
-@@ -138,13 +169,13 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 		if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS))
- 			return -ENOIOCTLCMD;
- 
--		return v4l2_event_dequeue(fh, arg, file->f_flags & O_NONBLOCK);
-+		return v4l2_event_dequeue(vfh, arg, file->f_flags & O_NONBLOCK);
- 
- 	case VIDIOC_SUBSCRIBE_EVENT:
--		return v4l2_subdev_call(sd, core, subscribe_event, fh, arg);
-+		return v4l2_subdev_call(sd, core, subscribe_event, vfh, arg);
- 
- 	case VIDIOC_UNSUBSCRIBE_EVENT:
--		return v4l2_subdev_call(sd, core, unsubscribe_event, fh, arg);
-+		return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg);
- 
- 	default:
- 		return -ENOIOCTLCMD;
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index 7d55b0c..f8704ff 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -24,6 +24,7 @@
- #include <media/media-entity.h>
- #include <media/v4l2-common.h>
- #include <media/v4l2-dev.h>
-+#include <media/v4l2-fh.h>
- #include <media/v4l2-mediabus.h>
- 
- /* generic v4l2_device notify callback notification values */
-@@ -467,6 +468,34 @@ struct v4l2_subdev {
- #define vdev_to_v4l2_subdev(vdev) \
- 	container_of(vdev, struct v4l2_subdev, devnode)
- 
-+/*
-+ * Used for storing subdev information per file handle
-+ */
-+struct v4l2_subdev_fh {
-+	struct v4l2_fh vfh;
-+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-+	struct v4l2_mbus_framefmt *try_fmt;
-+	struct v4l2_rect *try_crop;
-+#endif
-+};
-+
-+#define to_v4l2_subdev_fh(fh)	\
-+	container_of(fh, struct v4l2_subdev_fh, vfh)
-+
-+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-+static inline struct v4l2_mbus_framefmt *
-+v4l2_subdev_get_try_format(struct v4l2_subdev_fh *fh, unsigned int pad)
-+{
-+	return &fh->try_fmt[pad];
-+}
-+
-+static inline struct v4l2_rect *
-+v4l2_subdev_get_try_crop(struct v4l2_subdev_fh *fh, unsigned int pad)
-+{
-+	return &fh->try_crop[pad];
-+}
-+#endif
-+
- extern const struct v4l2_file_operations v4l2_subdev_fops;
- 
- static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0025-v4l-subdev-Add-a-new-file-operations-class.patch b/recipes-kernel/linux/linux-omap/media/0025-v4l-subdev-Add-a-new-file-operations-class.patch
deleted file mode 100644
index cf631c8..0000000
--- a/recipes-kernel/linux/linux-omap/media/0025-v4l-subdev-Add-a-new-file-operations-class.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 4dc43ce10d8b66537a680635d4f2dbe0a1daa1d9 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Mon, 2 Aug 2010 00:05:09 +0200
-Subject: [PATCH 25/43] v4l: subdev: Add a new file operations class
-
-V4L2 sub-devices store pad formats and crop settings in the file handle.
-To let drivers initialize those settings properly, add a file::open
-operation that is called when the subdev is opened as well as a
-corresponding file::close operation.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- drivers/media/video/v4l2-subdev.c |   13 ++++++++++---
- include/media/v4l2-subdev.h       |   10 ++++++++++
- 2 files changed, 20 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index 15449fc..0f904e2 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -61,7 +61,7 @@ static int subdev_open(struct file *file)
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
- 	struct v4l2_subdev_fh *subdev_fh;
- #if defined(CONFIG_MEDIA_CONTROLLER)
--	struct media_entity *entity;
-+	struct media_entity *entity = NULL;
- #endif
- 	int ret;
- 
-@@ -104,9 +104,17 @@ static int subdev_open(struct file *file)
- 	}
- #endif
- 
-+	ret = v4l2_subdev_call(sd, file, open, subdev_fh);
-+	if (ret < 0 && ret != -ENOIOCTLCMD)
-+		goto err;
-+
- 	return 0;
- 
- err:
-+#if defined(CONFIG_MEDIA_CONTROLLER)
-+	if (entity)
-+		media_entity_put(entity);
-+#endif
- 	v4l2_fh_del(&subdev_fh->vfh);
- 	v4l2_fh_exit(&subdev_fh->vfh);
- 	subdev_fh_free(subdev_fh);
-@@ -117,13 +125,12 @@ err:
- 
- static int subdev_close(struct file *file)
- {
--#if defined(CONFIG_MEDIA_CONTROLLER)
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
--#endif
- 	struct v4l2_fh *vfh = file->private_data;
- 	struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh);
- 
-+	v4l2_subdev_call(sd, file, close, subdev_fh);
- #if defined(CONFIG_MEDIA_CONTROLLER)
- 	if (sd->v4l2_dev->mdev)
- 		media_entity_put(&sd->entity);
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index f8704ff..af704df 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -175,6 +175,15 @@ struct v4l2_subdev_core_ops {
- 				 struct v4l2_event_subscription *sub);
- };
- 
-+/* open: called when the subdev device node is opened by an application.
-+
-+   close: called when the subdev device node is close.
-+ */
-+struct v4l2_subdev_file_ops {
-+	int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
-+	int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
-+};
-+
- /* s_mode: switch the tuner to a specific tuner mode. Replacement of s_radio.
- 
-    s_radio: v4l device was opened in Radio mode, to be replaced by s_mode.
-@@ -416,6 +425,7 @@ struct v4l2_subdev_ir_ops {
- 
- struct v4l2_subdev_ops {
- 	const struct v4l2_subdev_core_ops	*core;
-+	const struct v4l2_subdev_file_ops	*file;
- 	const struct v4l2_subdev_tuner_ops	*tuner;
- 	const struct v4l2_subdev_audio_ops	*audio;
- 	const struct v4l2_subdev_video_ops	*video;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0026-v4l-v4l2_subdev-pad-level-operations.patch b/recipes-kernel/linux/linux-omap/media/0026-v4l-v4l2_subdev-pad-level-operations.patch
deleted file mode 100644
index 6376245..0000000
--- a/recipes-kernel/linux/linux-omap/media/0026-v4l-v4l2_subdev-pad-level-operations.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 7a089b741d5c2ca3881d61e81971a1a0e464aa27 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 9 Dec 2009 12:39:52 +0100
-Subject: [PATCH 26/43] v4l: v4l2_subdev pad-level operations
-
-Add a v4l2_subdev_pad_ops structure for the operations that need to be
-performed at the pad level such as format-related operations.
-
-Pad format-related operations use v4l2_mbus_framefmt instead of
-v4l2_format.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/media/v4l2-subdev.h |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
-
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index af704df..4f6ddba 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -42,6 +42,7 @@ struct v4l2_ctrl_handler;
- struct v4l2_event_subscription;
- struct v4l2_fh;
- struct v4l2_subdev;
-+struct v4l2_subdev_fh;
- struct tuner_setup;
- 
- /* decode_vbi_line */
-@@ -423,6 +424,9 @@ struct v4l2_subdev_ir_ops {
- 				struct v4l2_subdev_ir_parameters *params);
- };
- 
-+struct v4l2_subdev_pad_ops {
-+};
-+
- struct v4l2_subdev_ops {
- 	const struct v4l2_subdev_core_ops	*core;
- 	const struct v4l2_subdev_file_ops	*file;
-@@ -432,6 +436,7 @@ struct v4l2_subdev_ops {
- 	const struct v4l2_subdev_vbi_ops	*vbi;
- 	const struct v4l2_subdev_ir_ops		*ir;
- 	const struct v4l2_subdev_sensor_ops	*sensor;
-+	const struct v4l2_subdev_pad_ops	*pad;
- };
- 
- #define V4L2_SUBDEV_NAME_SIZE 32
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0028-v4l-v4l2_subdev-userspace-format-API.patch b/recipes-kernel/linux/linux-omap/media/0028-v4l-v4l2_subdev-userspace-format-API.patch
deleted file mode 100644
index 2b851d6..0000000
--- a/recipes-kernel/linux/linux-omap/media/0028-v4l-v4l2_subdev-userspace-format-API.patch
+++ /dev/null
@@ -1,3546 +0,0 @@
-From 58fa3ca8af541e6704ac11703fc3091d856e0700 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Tue, 16 Mar 2010 00:26:04 +0100
-Subject: [PATCH 28/43] v4l: v4l2_subdev userspace format API
-
-Add a userspace API to get, set and enumerate the media format on a
-subdev pad.
-
-The format at the output of a subdev usually depends on the format at
-its input(s). The try format operation is thus not suitable for probing
-format at individual pads, as it can't modify the device state and thus
-can't remember the format tried at the input to compute the output
-format.
-
-To fix the problem, pass an extra argument to the get/set format
-operations to select the 'try' or 'active' format.
-
-The try format is used when probing the subdev. Setting the try format
-must not change the device configuration but can store data for later
-reuse. Data storage is provided at the file-handle level so applications
-probing the subdev concurently won't interfere with each other.
-
-The active format is used when configuring the subdev. It's identical to
-the format handled by the usual get/set operations.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Stanimir Varbanov <svarbanov at mm-sol.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/DocBook/Makefile                     |    5 +-
- Documentation/DocBook/media-entities.tmpl          |   16 +
- Documentation/DocBook/v4l/dev-subdev.xml           |  274 +++
- Documentation/DocBook/v4l/subdev-formats.xml       | 2416 ++++++++++++++++++++
- Documentation/DocBook/v4l/v4l2.xml                 |    4 +
- Documentation/DocBook/v4l/vidioc-streamon.xml      |    9 +
- .../DocBook/v4l/vidioc-subdev-enum-frame-size.xml  |  148 ++
- .../DocBook/v4l/vidioc-subdev-enum-mbus-code.xml   |  113 +
- Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml  |  174 ++
- drivers/media/video/v4l2-subdev.c                  |   49 +
- include/linux/Kbuild                               |    1 +
- include/linux/v4l2-subdev.h                        |   90 +
- include/media/v4l2-subdev.h                        |   10 +
- 13 files changed, 3308 insertions(+), 1 deletions(-)
- create mode 100644 Documentation/DocBook/v4l/dev-subdev.xml
- create mode 100644 Documentation/DocBook/v4l/subdev-formats.xml
- create mode 100644 Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
- create mode 100644 Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
- create mode 100644 Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
- create mode 100644 include/linux/v4l2-subdev.h
-
-diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
-index 8b6e00a..2deb069 100644
---- a/Documentation/DocBook/Makefile
-+++ b/Documentation/DocBook/Makefile
-@@ -53,7 +53,10 @@ MAN := $(patsubst %.xml, %.9, $(BOOKS))
- mandocs: $(MAN)
- 
- build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \
--	       cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(objtree)/Documentation/DocBook/media/
-+	       cp $(srctree)/Documentation/DocBook/dvb/*.png \
-+	          $(srctree)/Documentation/DocBook/v4l/*.gif \
-+	          $(srctree)/Documentation/DocBook/v4l/*.png \
-+		  $(objtree)/Documentation/DocBook/media/
- 
- xmldoclinks:
- ifneq ($(objtree),$(srctree))
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index 679c585..538f8fe 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -86,6 +86,10 @@
- <!ENTITY VIDIOC-S-PRIORITY "<link linkend='vidioc-g-priority'><constant>VIDIOC_S_PRIORITY</constant></link>">
- <!ENTITY VIDIOC-S-STD "<link linkend='vidioc-g-std'><constant>VIDIOC_S_STD</constant></link>">
- <!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>">
- <!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>">
- <!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>">
- <!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>">
-@@ -107,6 +111,7 @@
- <!ENTITY v4l2-field "enum <link linkend='v4l2-field'>v4l2_field</link>">
- <!ENTITY v4l2-frmivaltypes "enum <link linkend='v4l2-frmivaltypes'>v4l2_frmivaltypes</link>">
- <!ENTITY v4l2-frmsizetypes "enum <link linkend='v4l2-frmsizetypes'>v4l2_frmsizetypes</link>">
-+<!ENTITY v4l2-mbus-pixelcode "enum <link linkend='v4l2-mbus-pixelcode'>v4l2_mbus_pixelcode</link>">
- <!ENTITY v4l2-memory "enum <link linkend='v4l2-memory'>v4l2_memory</link>">
- <!ENTITY v4l2-mpeg-audio-ac3-bitrate "enum <link linkend='v4l2-mpeg-audio-ac3-bitrate'>v4l2_mpeg_audio_ac3_bitrate</link>">
- <!ENTITY v4l2-mpeg-audio-crc "enum <link linkend='v4l2-mpeg-audio-crc'>v4l2_mpeg_audio_crc</link>">
-@@ -130,6 +135,7 @@
- <!ENTITY v4l2-mpeg-video-encoding "enum <link linkend='v4l2-mpeg-video-encoding'>v4l2_mpeg_video_encoding</link>">
- <!ENTITY v4l2-power-line-frequency "enum <link linkend='v4l2-power-line-frequency'>v4l2_power_line_frequency</link>">
- <!ENTITY v4l2-priority "enum <link linkend='v4l2-priority'>v4l2_priority</link>">
-+<!ENTITY v4l2-subdev-format-whence "enum <link linkend='v4l2-subdev-format-whence'>v4l2_subdev_format_whence</link>">
- <!ENTITY v4l2-tuner-type "enum <link linkend='v4l2-tuner-type'>v4l2_tuner_type</link>">
- <!ENTITY v4l2-preemphasis "enum <link linkend='v4l2-preemphasis'>v4l2_preemphasis</link>">
- 
-@@ -171,6 +177,7 @@
- <!ENTITY v4l2-hw-freq-seek "struct <link linkend='v4l2-hw-freq-seek'>v4l2_hw_freq_seek</link>">
- <!ENTITY v4l2-input "struct <link linkend='v4l2-input'>v4l2_input</link>">
- <!ENTITY v4l2-jpegcompression "struct <link linkend='v4l2-jpegcompression'>v4l2_jpegcompression</link>">
-+<!ENTITY v4l2-mbus-framefmt "struct <link linkend='v4l2-mbus-framefmt'>v4l2_mbus_framefmt</link>">
- <!ENTITY v4l2-modulator "struct <link linkend='v4l2-modulator'>v4l2_modulator</link>">
- <!ENTITY v4l2-mpeg-vbi-fmt-ivtv "struct <link linkend='v4l2-mpeg-vbi-fmt-ivtv'>v4l2_mpeg_vbi_fmt_ivtv</link>">
- <!ENTITY v4l2-output "struct <link linkend='v4l2-output'>v4l2_output</link>">
-@@ -183,6 +190,9 @@
- <!ENTITY v4l2-sliced-vbi-cap "struct <link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>">
- <!ENTITY v4l2-sliced-vbi-data "struct <link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>">
- <!ENTITY v4l2-sliced-vbi-format "struct <link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>">
-+<!ENTITY v4l2-subdev-frame-size-enum "struct <link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>">
-+<!ENTITY v4l2-subdev-format "struct <link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>">
-+<!ENTITY v4l2-subdev-mbus-code-enum "struct <link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>">
- <!ENTITY v4l2-standard "struct <link linkend='v4l2-standard'>v4l2_standard</link>">
- <!ENTITY v4l2-streamparm "struct <link linkend='v4l2-streamparm'>v4l2_streamparm</link>">
- <!ENTITY v4l2-timecode "struct <link linkend='v4l2-timecode'>v4l2_timecode</link>">
-@@ -212,6 +222,7 @@
- <!ENTITY ENXIO "<errorcode>ENXIO</errorcode> error code">
- <!ENTITY EMFILE "<errorcode>EMFILE</errorcode> error code">
- <!ENTITY EPERM "<errorcode>EPERM</errorcode> error code">
-+<!ENTITY EPIPE "<errorcode>EPIPE</errorcode> error code">
- <!ENTITY ERANGE "<errorcode>ERANGE</errorcode> error code">
- 
- <!-- Subsections -->
-@@ -230,6 +241,7 @@
- <!ENTITY sub-dev-raw-vbi SYSTEM "v4l/dev-raw-vbi.xml">
- <!ENTITY sub-dev-rds SYSTEM "v4l/dev-rds.xml">
- <!ENTITY sub-dev-sliced-vbi SYSTEM "v4l/dev-sliced-vbi.xml">
-+<!ENTITY sub-dev-subdev SYSTEM "v4l/dev-subdev.xml">
- <!ENTITY sub-dev-teletext SYSTEM "v4l/dev-teletext.xml">
- <!ENTITY sub-driver SYSTEM "v4l/driver.xml">
- <!ENTITY sub-libv4l SYSTEM "v4l/libv4l.xml">
-@@ -313,6 +325,10 @@
- <!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml">
- <!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml">
- <!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml">
-+<!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml">
-+<!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml">
-+<!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml">
-+<!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml">
- <!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml">
- <!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml">
- <!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml">
-diff --git a/Documentation/DocBook/v4l/dev-subdev.xml b/Documentation/DocBook/v4l/dev-subdev.xml
-new file mode 100644
-index 0000000..12fdca4
---- /dev/null
-+++ b/Documentation/DocBook/v4l/dev-subdev.xml
-@@ -0,0 +1,274 @@
-+  <title>Sub-device Interface</title>
-+
-+  <para>The complex nature of V4L2 devices, where hardware is often made of
-+  several integrated circuits that need to interact with each other in a
-+  controlled way, leads to complex V4L2 drivers. The drivers usually reflect
-+  the hardware model in software, and model the different hardware components
-+  as software blocks called sub-devices.</para>
-+
-+  <para>V4L2 sub-devices are usually kernel-only objects. If the V4L2 driver
-+  implements the media device API, they will automatically inherit from media
-+  entities. Applications will be able to enumerate the sub-devices and discover
-+  the hardware topology using the media entities, pads and links enumeration
-+  API.</para>
-+
-+  <para>In addition to make sub-devices discoverable, drivers can also choose
-+  to make them directly configurable by applications. When both the sub-device
-+  driver and the V4L2 device driver support this, sub-devices will feature a
-+  character device node on which ioctls can be called to
-+  <itemizedlist>
-+    <listitem>query, read and write sub-devices controls</listitem>
-+    <listitem>subscribe and unsubscribe to events and retrieve them</listitem>
-+    <listitem>negotiate image formats on individual pads</listitem>
-+  </itemizedlist>
-+  </para>
-+
-+  <para>Sub-device character device nodes, conventionally named
-+  <filename>/dev/v4l-subdev*</filename>, use major number 81.</para>
-+
-+  <section>
-+    <title>Controls</title>
-+    <para>Most V4L2 controls are implemented by sub-device hardware. Drivers
-+    usually merge all controls and expose them through video device nodes.
-+    Applications can control all sub-devices through a single interface.</para>
-+
-+    <para>Complex devices sometimes implement the same control in different
-+    pieces of hardware. This situation is common in embedded platforms, where
-+    both sensors and image processing hardware implement identical functions,
-+    such as contrast adjustment, white balance or faulty pixels correction. As
-+    the V4L2 controls API doesn't support several identical controls in a single
-+    device, all but one of the identical controls are hidden.</para>
-+
-+    <para>Applications can access those hidden controls through the sub-device
-+    node with the V4L2 control API described in <xref linkend="control" />. The
-+    ioctls behave identically as when issued on V4L2 device nodes, with the
-+    exception that they deal only with controls implemented in the sub-device.
-+    </para>
-+
-+    <para>Depending on the driver, those controls might also be exposed through
-+    one (or several) V4L2 device nodes.</para>
-+  </section>
-+
-+  <section>
-+    <title>Events</title>
-+    <para>V4L2 sub-devices can notify applications of events as described in
-+    <xref linkend="event" />. The API behaves identically as when used on V4L2
-+    device nodes, with the exception that it only deals with events generated by
-+    the sub-device. Depending on the driver, those events might also be reported
-+    on one (or several) V4L2 device nodes.</para>
-+  </section>
-+
-+  <section id="pad-level-formats">
-+    <title>Pad-level Formats</title>
-+
-+    <warning>Pad-level formats are only applicable to very complex device that
-+    need to expose low-level format configuration to user space. Generic V4L2
-+    applications do <emphasis>not</emphasis> need to use the API described in
-+    this section.</warning>
-+
-+    <note>For the purpose of this section, the term
-+    <wordasword>format</wordasword> means the combination of media bus data
-+    format, frame width and frame height.</note>
-+
-+    <para>Image formats are typically negotiated on video capture and output
-+    devices using the <link linkend="crop">cropping and scaling</link> ioctls.
-+    The driver is responsible for configuring every block in the video pipeline
-+    according to the requested format at the pipeline input and/or
-+    output.</para>
-+
-+    <para>For complex devices, such as often found in embedded systems,
-+    identical image sizes at the output of a pipeline can be achieved using
-+    different hardware configurations. One such exemple is shown on
-+    <xref linkend="pipeline-scaling" xrefstyle="template: Figure %n" />, where
-+    image scaling can be performed on both the video sensor and the host image
-+    processing hardware.</para>
-+
-+    <figure id="pipeline-scaling">
-+      <title>Image Format Negotation on Pipelines</title>
-+      <mediaobject>
-+	<imageobject>
-+	  <imagedata fileref="pipeline.pdf" format="PS" />
-+	</imageobject>
-+	<imageobject>
-+	  <imagedata fileref="pipeline.png" format="PNG" />
-+	</imageobject>
-+	<textobject>
-+	  <phrase>High quality and high speed pipeline configuration</phrase>
-+	</textobject>
-+      </mediaobject>
-+    </figure>
-+
-+    <para>The sensor scaler is usually of less quality than the host scaler, but
-+    scaling on the sensor is required to achieve higher frame rates. Depending
-+    on the use case (quality vs. speed), the pipeline must be configured
-+    differently. Applications need to configure the formats at every point in
-+    the pipeline explicitly.</para>
-+
-+    <para>Drivers that implement the <link linkend="media-controller-intro">media
-+    API</link> can expose pad-level image format configuration to applications.
-+    When they do, applications can use the &VIDIOC-SUBDEV-G-FMT; and
-+    &VIDIOC-SUBDEV-S-FMT; ioctls. to negotiate formats on a per-pad basis.</para>
-+
-+    <para>Applications are responsible for configuring coherent parameters on
-+    the whole pipeline and making sure that connected pads have compatible
-+    formats. The pipeline is checked for formats mismatch at &VIDIOC-STREAMON;
-+    time, and an &EPIPE; is then returned if the configuration is
-+    invalid.</para>
-+
-+    <para>Pad-level image format configuration support can be tested by calling
-+    the &VIDIOC-SUBDEV-G-FMT; ioctl on pad 0. If the driver returns an &EINVAL;
-+    pad-level format configuration is not supported by the sub-device.</para>
-+
-+    <section>
-+      <title>Format Negotiation</title>
-+
-+      <para>Acceptable formats on pads can (and usually do) depend on a number
-+      of external parameters, such as formats on other pads, active links, or
-+      even controls. Finding a combination of formats on all pads in a video
-+      pipeline, acceptable to both application and driver, can't rely on formats
-+      enumeration only. A format negotiation mechanism is required.</para>
-+
-+      <para>Central to the format negotiation mechanism are the get/set format
-+      operations. When called with the <structfield>which</structfield> argument
-+      set to <constant>V4L2_SUBDEV_FORMAT_TRY</constant>, the
-+      &VIDIOC-SUBDEV-G-FMT; and &VIDIOC-SUBDEV-S-FMT; ioctls operate on a set of
-+      formats parameters that are not connected to the hardware configuration.
-+      Modifying those 'try' formats leaves the device state untouched (this
-+      applies to both the software state stored in the driver and the hardware
-+      state stored in the device itself).</para>
-+
-+      <para>While not kept as part of the device state, try formats are stored
-+      in the sub-device file handles. A &VIDIOC-SUBDEV-G-FMT; call will return
-+      the last try format set <emphasis>on the same sub-device file
-+      handle</emphasis>. Several applications querying the same sub-device at
-+      the same time will thus not interact with each other.</para>
-+
-+      <para>To find out whether a particular format is supported by the device,
-+      applications use the &VIDIOC-SUBDEV-S-FMT; ioctl. Drivers verify and, if
-+      needed, change the requested <structfield>format</structfield> based on
-+      device requirements and return the possibly modified value. Applications
-+      can then choose to try a different format or accept the returned value and
-+      continue.</para>
-+
-+      <para>Formats returned by the driver during a negotiation iteration are
-+      guaranteed to be supported by the device. In particular, drivers guarantee
-+      that a returned format will not be further changed if passed to an
-+      &VIDIOC-SUBDEV-S-FMT; call as-is (as long as external parameters, such as
-+      formats on other pads or links' configuration are not changed).</para>
-+
-+      <para>Drivers automatically propagate formats inside sub-devices. When a
-+      try or active format is set on a pad, corresponding formats on other pads
-+      of the same sub-device can be modified by the driver. Drivers are free to
-+      modify formats as required by the device. However, they should comply with
-+      the following rules when possible:
-+      <itemizedlist>
-+        <listitem>Formats should be propagated from sink pads to source pads.
-+	Modifying a format on a source pad should not modify the format on any
-+	sink pad.</listitem>
-+        <listitem>Sub-devices that scale frames using variable scaling factors
-+	should reset the scale factors to default values when sink pads formats
-+	are modified. If the 1:1 scaling ratio is supported, this means that
-+	source pads formats should be reset to the sink pads formats.</listitem>
-+      </itemizedlist>
-+      </para>
-+
-+      <para>Formats are not propagated across links, as that would involve
-+      propagating them from one sub-device file handle to another. Applications
-+      must then take care to configure both ends of every link explicitly with
-+      compatible formats. Identical formats on the two ends of a link are
-+      guaranteed to be compatible. Drivers are free to accept different formats
-+      matching device requirements as being compatible.</para>
-+
-+      <para><xref linkend="sample-pipeline-config" xrefstyle="template:Table %n"/>
-+      shows a sample configuration sequence for the pipeline described in
-+      <xref linkend="pipeline-scaling" xrefstyle="template:Figure %n"/> (table
-+      columns list entity names and pad numbers).</para>
-+
-+      <table pgwide="0" frame="none" id="sample-pipeline-config">
-+	<title>Sample Pipeline Configuration</title>
-+	<tgroup cols="3">
-+	  <colspec colname="what"/>
-+	  <colspec colname="sensor-0" />
-+	  <colspec colname="frontend-0" />
-+	  <colspec colname="frontend-1" />
-+	  <colspec colname="scaler-0" />
-+	  <colspec colname="scaler-1" />
-+	  <thead>
-+	    <row>
-+	      <entry></entry>
-+	      <entry>Sensor/0</entry>
-+	      <entry>Frontend/0</entry>
-+	      <entry>Frontend/1</entry>
-+	      <entry>Scaler/0</entry>
-+	      <entry>Scaler/1</entry>
-+	    </row>
-+	  </thead>
-+	  <tbody valign="top">
-+	    <row>
-+	      <entry>Initial state</entry>
-+	      <entry>2048x1536</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	    </row>
-+	    <row>
-+	      <entry>Configure frontend input</entry>
-+	      <entry>2048x1536</entry>
-+	      <entry><emphasis>2048x1536</emphasis></entry>
-+	      <entry><emphasis>2046x1534</emphasis></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	    </row>
-+	    <row>
-+	      <entry>Configure scaler input</entry>
-+	      <entry>2048x1536</entry>
-+	      <entry>2048x1536</entry>
-+	      <entry>2046x1534</entry>
-+	      <entry><emphasis>2046x1534</emphasis></entry>
-+	      <entry><emphasis>2046x1534</emphasis></entry>
-+	    </row>
-+	    <row>
-+	      <entry>Configure scaler output</entry>
-+	      <entry>2048x1536</entry>
-+	      <entry>2048x1536</entry>
-+	      <entry>2046x1534</entry>
-+	      <entry>2046x1534</entry>
-+	      <entry><emphasis>1280x960</emphasis></entry>
-+	    </row>
-+	  </tbody>
-+	</tgroup>
-+      </table>
-+
-+      <para>
-+      <orderedlist>
-+	<listitem>Initial state. The sensor output is set to its native 3MP
-+	resolution. Resolutions on the host frontend and scaler input and output
-+	pads are undefined.</listitem>
-+	<listitem>The application configures the frontend input pad resolution to
-+	2048x1536. The driver propagates the format to the frontend output pad.
-+	Note that the propagated output format can be different, as in this case,
-+	than the input format, as the hardware might need to crop pixels (for
-+	instance when converting a Bayer filter pattern to RGB or YUV).</listitem>
-+	<listitem>The application configures the scaler input pad resolution to
-+	2046x1534 to match the frontend output resolution. The driver propagates
-+	the format to the scaler output pad.</listitem>
-+	<listitem>The application configures the scaler output pad resolution to
-+	1280x960.</listitem>
-+      </orderedlist>
-+      </para>
-+
-+      <para>When satisfied with the try results, applications can set the active
-+      formats by setting the <structfield>which</structfield> argument to
-+      <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. Active formats are changed
-+      exactly as try formats by drivers. To avoid modifying the hardware state
-+      during format negotiation, applications should negotiate try formats first
-+      and then modify the active settings using the try formats returned during
-+      the last negotiation iteration. This guarantees that the active format
-+      will be applied as-is by the driver without being modified.
-+      </para>
-+    </section>
-+
-+  </section>
-+
-+  &sub-subdev-formats;
-diff --git a/Documentation/DocBook/v4l/subdev-formats.xml b/Documentation/DocBook/v4l/subdev-formats.xml
-new file mode 100644
-index 0000000..0cae572
---- /dev/null
-+++ b/Documentation/DocBook/v4l/subdev-formats.xml
-@@ -0,0 +1,2416 @@
-+<section id="v4l2-mbus-format">
-+  <title>Media Bus Formats</title>
-+
-+  <table pgwide="1" frame="none" id="v4l2-mbus-framefmt">
-+    <title>struct <structname>v4l2_mbus_framefmt</structname></title>
-+    <tgroup cols="3">
-+      &cs-str;
-+      <tbody valign="top">
-+	<row>
-+	  <entry>__u32</entry>
-+	  <entry><structfield>width</structfield></entry>
-+	  <entry>Image width, in pixels.</entry>
-+	</row>
-+	<row>
-+	  <entry>__u32</entry>
-+	  <entry><structfield>height</structfield></entry>
-+	  <entry>Image height, in pixels.</entry>
-+	</row>
-+	<row>
-+	  <entry>__u32</entry>
-+	  <entry><structfield>code</structfield></entry>
-+	  <entry>Format code, from &v4l2-mbus-pixelcode;.</entry>
-+	</row>
-+	<row>
-+	  <entry>__u32</entry>
-+	  <entry><structfield>field</structfield></entry>
-+	  <entry>Field order, from &v4l2-field;. See
-+	  <xref linkend="field-order" /> for details.</entry>
-+	</row>
-+	<row>
-+	  <entry>__u32</entry>
-+	  <entry><structfield>colorspace</structfield></entry>
-+	  <entry>Image colorspace, from &v4l2-colorspace;. See
-+	  <xref linkend="colorspaces" /> for details.</entry>
-+	</row>
-+	<row>
-+	  <entry>__u32</entry>
-+	  <entry><structfield>reserved</structfield>[7]</entry>
-+	  <entry>Reserved for future extensions. Applications and drivers must
-+	  set the array to zero.</entry>
-+	</row>
-+      </tbody>
-+    </tgroup>
-+  </table>
-+
-+  <section id="v4l2-mbus-pixelcode">
-+    <title>Media Bus Pixel Codes</title>
-+
-+    <para>The media bus pixel codes describe image formats as flowing over
-+    physical busses (both between separate physical components and inside SoC
-+    devices). This should not be confused with the V4L2 pixel formats that
-+    describe, using four character codes, image formats as stored in memory.
-+    </para>
-+
-+    <para>While there is a relationship between image formats on busses and
-+    image formats in memory (a raw Bayer image won't be magically converted to
-+    JPEG just by storing it to memory), there is no one-to-one correspondance
-+    between them.</para>
-+
-+    <section>
-+      <title>Packed RGB Formats</title>
-+
-+      <para>Those formats transfer pixel data as red, green and blue components.
-+      The format code is made of the following information.
-+      <itemizedlist>
-+	<listitem>The red, green and blue components order code, as encoded in a
-+	pixel sample. Possible values are RGB and BGR.</listitem>
-+	<listitem>The number of bits per component, for each component. The values
-+	can be different for all components. Common values are 555 and 565.
-+	</listitem>
-+	<listitem>The number of bus samples per pixel. Pixels that are wider than
-+	the bus width must be transferred in multiple samples. Common values are
-+	1 and 2.</listitem>
-+	<listitem>The bus width.</listitem>
-+	<listitem>For formats where the total number of bits per pixel is smaller
-+	than the number of bus samples per pixel times the bus width, a padding
-+	value stating if the bytes are padded in their most high order bits
-+	(PADHI) or low order bits (PADLO).</listitem>
-+	<listitem>For formats where the number of bus samples per pixel is larger
-+	than 1, an endianness value stating if the pixel is transferred MSB first
-+	(BE) or LSB first (LE).</listitem>
-+      </itemizedlist>
-+      </para>
-+
-+      <para>For instance, a format where pixels are encoded as 5-bits red, 5-bits
-+      green and 5-bit blue values padded on the high bit, transferred as 2 8-bit
-+      samples per pixel with the most significant bits (padding, red and half of
-+      the green value) transferred first will be named
-+      <constant>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</constant>.
-+      </para>
-+
-+      <para>The following tables list existing packet RGB formats.</para>
-+
-+      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-rgb">
-+	<title>RGB formats</title>
-+	<tgroup cols="11">
-+	  <colspec colname="id" align="left" />
-+	  <colspec colname="code" align="center"/>
-+	  <colspec colname="bit" />
-+	  <colspec colnum="4" colname="b07" align="center" />
-+	  <colspec colnum="5" colname="b06" align="center" />
-+	  <colspec colnum="6" colname="b05" align="center" />
-+	  <colspec colnum="7" colname="b04" align="center" />
-+	  <colspec colnum="8" colname="b03" align="center" />
-+	  <colspec colnum="9" colname="b02" align="center" />
-+	  <colspec colnum="10" colname="b01" align="center" />
-+	  <colspec colnum="11" colname="b00" align="center" />
-+	  <spanspec namest="b07" nameend="b00" spanname="b0" />
-+	  <thead>
-+	    <row>
-+	      <entry>Identifier</entry>
-+	      <entry>Code</entry>
-+	      <entry></entry>
-+	      <entry spanname="b0">Data organization</entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>Bit</entry>
-+	      <entry>7</entry>
-+	      <entry>6</entry>
-+	      <entry>5</entry>
-+	      <entry>4</entry>
-+	      <entry>3</entry>
-+	      <entry>2</entry>
-+	      <entry>1</entry>
-+	      <entry>0</entry>
-+	    </row>
-+	  </thead>
-+	  <tbody valign="top">
-+	    <row id="V4L2-MBUS-FMT-RGB444-2X8-PADHI-BE">
-+	      <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE</entry>
-+	      <entry>0x1001</entry>
-+	      <entry></entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-RGB444-2X8-PADHI-LE">
-+	      <entry>V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE</entry>
-+	      <entry>0x1002</entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-RGB555-2X8-PADHI-BE">
-+	      <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE</entry>
-+	      <entry>0x1003</entry>
-+	      <entry></entry>
-+	      <entry>0</entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-RGB555-2X8-PADHI-LE">
-+	      <entry>V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE</entry>
-+	      <entry>0x1004</entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>0</entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-BGR565-2X8-BE">
-+	      <entry>V4L2_MBUS_FMT_BGR565_2X8_BE</entry>
-+	      <entry>0x1005</entry>
-+	      <entry></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-BGR565-2X8-LE">
-+	      <entry>V4L2_MBUS_FMT_BGR565_2X8_LE</entry>
-+	      <entry>0x1006</entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-RGB565-2X8-BE">
-+	      <entry>V4L2_MBUS_FMT_RGB565_2X8_BE</entry>
-+	      <entry>0x1007</entry>
-+	      <entry></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-RGB565-2X8-LE">
-+	      <entry>V4L2_MBUS_FMT_RGB565_2X8_LE</entry>
-+	      <entry>0x1008</entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	    </row>
-+	  </tbody>
-+	</tgroup>
-+      </table>
-+    </section>
-+
-+    <section>
-+      <title>Bayer Formats</title>
-+
-+      <para>Those formats transfer pixel data as red, green and blue components.
-+      The format code is made of the following information.
-+      <itemizedlist>
-+	<listitem>The red, green and blue components order code, as encoded in a
-+	pixel sample. The possible values are shown in <xref
-+	linkend="bayer-patterns" />.</listitem>
-+	<listitem>The number of bits per pixel component. All components are
-+	transferred on the same number of bits. Common values are 8, 10 and 12.
-+	</listitem>
-+	<listitem>If the pixel components are DPCM-compressed, a mention of the
-+	DPCM compression and the number of bits per compressed pixel component.
-+	</listitem>
-+	<listitem>The number of bus samples per pixel. Pixels that are wider than
-+	the bus width must be transferred in multiple samples. Common values are
-+	1 and 2.</listitem>
-+	<listitem>The bus width.</listitem>
-+	<listitem>For formats where the total number of bits per pixel is smaller
-+	than the number of bus samples per pixel times the bus width, a padding
-+	value stating if the bytes are padded in their most high order bits
-+	(PADHI) or low order bits (PADLO).</listitem>
-+	<listitem>For formats where the number of bus samples per pixel is larger
-+	than 1, an endianness value stating if the pixel is transferred MSB first
-+	(BE) or LSB first (LE).</listitem>
-+      </itemizedlist>
-+      </para>
-+
-+      <para>For instance, a format with uncompressed 10-bit Bayer components
-+      arranged in a red, green, green, blue pattern transferred as 2 8-bit
-+      samples per pixel with the least significant bits transferred first will
-+      be named <constant>V4L2_MBUS_FMT_SRGGB10_2X8_PADHI_LE</constant>.
-+      </para>
-+
-+      <figure id="bayer-patterns">
-+	<title>Bayer Patterns</title>
-+	<mediaobject>
-+	  <imageobject>
-+	    <imagedata fileref="bayer.pdf" format="PS" />
-+	  </imageobject>
-+	  <imageobject>
-+	    <imagedata fileref="bayer.png" format="PNG" />
-+	  </imageobject>
-+	  <textobject>
-+	    <phrase>Bayer filter color patterns</phrase>
-+	  </textobject>
-+	</mediaobject>
-+      </figure>
-+
-+      <para>The following table lists existing packet Bayer formats. The data
-+      organization is given as an example for the first pixel only.</para>
-+
-+      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-bayer">
-+	<title>Bayer Formats</title>
-+	<tgroup cols="15">
-+	  <colspec colname="id" align="left" />
-+	  <colspec colname="code" align="center"/>
-+	  <colspec colname="bit" />
-+	  <colspec colnum="4" colname="b11" align="center" />
-+	  <colspec colnum="5" colname="b10" align="center" />
-+	  <colspec colnum="6" colname="b09" align="center" />
-+	  <colspec colnum="7" colname="b08" align="center" />
-+	  <colspec colnum="8" colname="b07" align="center" />
-+	  <colspec colnum="9" colname="b06" align="center" />
-+	  <colspec colnum="10" colname="b05" align="center" />
-+	  <colspec colnum="11" colname="b04" align="center" />
-+	  <colspec colnum="12" colname="b03" align="center" />
-+	  <colspec colnum="13" colname="b02" align="center" />
-+	  <colspec colnum="14" colname="b01" align="center" />
-+	  <colspec colnum="15" colname="b00" align="center" />
-+	  <spanspec namest="b11" nameend="b00" spanname="b0" />
-+	  <thead>
-+	    <row>
-+	      <entry>Identifier</entry>
-+	      <entry>Code</entry>
-+	      <entry></entry>
-+	      <entry spanname="b0">Data organization</entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>Bit</entry>
-+	      <entry>11</entry>
-+	      <entry>10</entry>
-+	      <entry>9</entry>
-+	      <entry>8</entry>
-+	      <entry>7</entry>
-+	      <entry>6</entry>
-+	      <entry>5</entry>
-+	      <entry>4</entry>
-+	      <entry>3</entry>
-+	      <entry>2</entry>
-+	      <entry>1</entry>
-+	      <entry>0</entry>
-+	    </row>
-+	  </thead>
-+	  <tbody valign="top">
-+	    <row id="V4L2-MBUS-FMT-SBGGR8-1X8">
-+	      <entry>V4L2_MBUS_FMT_SBGGR8_1X8</entry>
-+	      <entry>0x3001</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGRBG8-1X8">
-+	      <entry>V4L2_MBUS_FMT_SGRBG8_1X8</entry>
-+	      <entry>0x3002</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR10-DPCM8-1X8">
-+	      <entry>V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8</entry>
-+	      <entry>0x300b</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGBRG10-DPCM8-1X8">
-+	      <entry>V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8</entry>
-+	      <entry>0x300c</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGRBG10-DPCM8-1X8">
-+	      <entry>V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8</entry>
-+	      <entry>0x3009</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SRGGB10-DPCM8-1X8">
-+	      <entry>V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8</entry>
-+	      <entry>0x300d</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>r<subscript>7</subscript></entry>
-+	      <entry>r<subscript>6</subscript></entry>
-+	      <entry>r<subscript>5</subscript></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADHI-BE">
-+	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE</entry>
-+	      <entry>0x3003</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>b<subscript>9</subscript></entry>
-+	      <entry>b<subscript>8</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADHI-LE">
-+	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE</entry>
-+	      <entry>0x3004</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>b<subscript>9</subscript></entry>
-+	      <entry>b<subscript>8</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADLO-BE">
-+	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE</entry>
-+	      <entry>0x3005</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>9</subscript></entry>
-+	      <entry>b<subscript>8</subscript></entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR10-2X8-PADLO-LE">
-+	      <entry>V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE</entry>
-+	      <entry>0x3006</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	      <entry>0</entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>9</subscript></entry>
-+	      <entry>b<subscript>8</subscript></entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR10-1X10">
-+	      <entry>V4L2_MBUS_FMT_SBGGR10_1X10</entry>
-+	      <entry>0x3007</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>b<subscript>9</subscript></entry>
-+	      <entry>b<subscript>8</subscript></entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGBRG10-1X10">
-+	      <entry>V4L2_MBUS_FMT_SGBRG10_1X10</entry>
-+	      <entry>0x300e</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>g<subscript>9</subscript></entry>
-+	      <entry>g<subscript>8</subscript></entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGRBG10-1X10">
-+	      <entry>V4L2_MBUS_FMT_SGRBG10_1X10</entry>
-+	      <entry>0x300a</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>g<subscript>9</subscript></entry>
-+	      <entry>g<subscript>8</subscript></entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SRGGB10-1X10">
-+	      <entry>V4L2_MBUS_FMT_SRGGB10_1X10</entry>
-+	      <entry>0x300f</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>r<subscript>9</subscript></entry>
-+	      <entry>r<subscript>8</subscript></entry>
-+	      <entry>r<subscript>7</subscript></entry>
-+	      <entry>r<subscript>6</subscript></entry>
-+	      <entry>r<subscript>5</subscript></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SBGGR12-1X12">
-+	      <entry>V4L2_MBUS_FMT_SBGGR12_1X12</entry>
-+	      <entry>0x3008</entry>
-+	      <entry></entry>
-+	      <entry>b<subscript>11</subscript></entry>
-+	      <entry>b<subscript>10</subscript></entry>
-+	      <entry>b<subscript>9</subscript></entry>
-+	      <entry>b<subscript>8</subscript></entry>
-+	      <entry>b<subscript>7</subscript></entry>
-+	      <entry>b<subscript>6</subscript></entry>
-+	      <entry>b<subscript>5</subscript></entry>
-+	      <entry>b<subscript>4</subscript></entry>
-+	      <entry>b<subscript>3</subscript></entry>
-+	      <entry>b<subscript>2</subscript></entry>
-+	      <entry>b<subscript>1</subscript></entry>
-+	      <entry>b<subscript>0</subscript></entry>
-+	    </row>
-+	  </tbody>
-+	</tgroup>
-+      </table>
-+    </section>
-+
-+    <section>
-+      <title>Packed YUV Formats</title>
-+
-+      <para>Those data formats transfer pixel data as (possibly downsampled) Y, U
-+      and V components. The format code is made of the following information.
-+      <itemizedlist>
-+	<listitem>The Y, U and V components order code, as transferred on the
-+	bus. Possible values are YUYV, UYVY, YVYU and VYUY.</listitem>
-+	<listitem>The number of bits per pixel component. All components are
-+	transferred on the same number of bits. Common values are 8, 10 and 12.
-+	</listitem>
-+	<listitem>The number of bus samples per pixel. Pixels that are wider than
-+	the bus width must be transferred in multiple samples. Common values are
-+	1, 1.5 (encoded as 1_5) and 2.</listitem>
-+	<listitem>The bus width. When the bus width is larger than the number of
-+	bits per pixel component, several components are packed in a single bus
-+	sample. The components are ordered as specified by the order code, with
-+	components on the left of the code transferred in the high order bits.
-+	Common values are 8 and 16.
-+	</listitem>
-+      </itemizedlist>
-+      </para>
-+
-+      <para>For instance, a format where pixels are encoded as 8-bit YUV values
-+      downsampled to 4:2:2 and transferred as 2 8-bit bus samples per pixel in the
-+      U, Y, V, Y order will be named <constant>V4L2_MBUS_FMT_UYVY8_2X8</constant>.
-+      </para>
-+
-+      <para>The following table lisst existing packet YUV formats.</para>
-+
-+      <table pgwide="0" frame="none" id="v4l2-mbus-pixelcode-yuv8">
-+	<title>YUV Formats</title>
-+	<tgroup cols="23">
-+	  <colspec colname="id" align="left" />
-+	  <colspec colname="code" align="center"/>
-+	  <colspec colname="bit" />
-+	  <colspec colnum="4" colname="b19" align="center" />
-+	  <colspec colnum="5" colname="b18" align="center" />
-+	  <colspec colnum="6" colname="b17" align="center" />
-+	  <colspec colnum="7" colname="b16" align="center" />
-+	  <colspec colnum="8" colname="b15" align="center" />
-+	  <colspec colnum="9" colname="b14" align="center" />
-+	  <colspec colnum="10" colname="b13" align="center" />
-+	  <colspec colnum="11" colname="b12" align="center" />
-+	  <colspec colnum="12" colname="b11" align="center" />
-+	  <colspec colnum="13" colname="b10" align="center" />
-+	  <colspec colnum="14" colname="b09" align="center" />
-+	  <colspec colnum="15" colname="b08" align="center" />
-+	  <colspec colnum="16" colname="b07" align="center" />
-+	  <colspec colnum="17" colname="b06" align="center" />
-+	  <colspec colnum="18" colname="b05" align="center" />
-+	  <colspec colnum="19" colname="b04" align="center" />
-+	  <colspec colnum="20" colname="b03" align="center" />
-+	  <colspec colnum="21" colname="b02" align="center" />
-+	  <colspec colnum="22" colname="b01" align="center" />
-+	  <colspec colnum="23" colname="b00" align="center" />
-+	  <spanspec namest="b19" nameend="b00" spanname="b0" />
-+	  <thead>
-+	    <row>
-+	      <entry>Identifier</entry>
-+	      <entry>Code</entry>
-+	      <entry></entry>
-+	      <entry spanname="b0">Data organization</entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>Bit</entry>
-+	      <entry>19</entry>
-+	      <entry>18</entry>
-+	      <entry>17</entry>
-+	      <entry>16</entry>
-+	      <entry>15</entry>
-+	      <entry>14</entry>
-+	      <entry>13</entry>
-+	      <entry>12</entry>
-+	      <entry>11</entry>
-+	      <entry>10</entry>
-+	      <entry>9</entry>
-+	      <entry>8</entry>
-+	      <entry>7</entry>
-+	      <entry>6</entry>
-+	      <entry>5</entry>
-+	      <entry>4</entry>
-+	      <entry>3</entry>
-+	      <entry>2</entry>
-+	      <entry>1</entry>
-+	      <entry>0</entry>
-+	    </row>
-+	  </thead>
-+	  <tbody valign="top">
-+	    <row id="V4L2-MBUS-FMT-Y8-1X8">
-+	      <entry>V4L2_MBUS_FMT_Y8_1X8</entry>
-+	      <entry>0x2001</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-UYVY8-1_5X8">
-+	      <entry>V4L2_MBUS_FMT_UYVY8_1_5X8</entry>
-+	      <entry>0x2002</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-VYUY8-1_5X8">
-+	      <entry>V4L2_MBUS_FMT_VYUY8_1_5X8</entry>
-+	      <entry>0x2003</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YUYV8-1_5X8">
-+	      <entry>V4L2_MBUS_FMT_YUYV8_1_5X8</entry>
-+	      <entry>0x2004</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YVYU8-1_5X8">
-+	      <entry>V4L2_MBUS_FMT_YVYU8_1_5X8</entry>
-+	      <entry>0x2005</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-UYVY8-2X8">
-+	      <entry>V4L2_MBUS_FMT_UYVY8_2X8</entry>
-+	      <entry>0x2006</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-VYUY8-2X8">
-+	      <entry>V4L2_MBUS_FMT_VYUY8_2X8</entry>
-+	      <entry>0x2007</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YUYV8-2X8">
-+	      <entry>V4L2_MBUS_FMT_YUYV8_2X8</entry>
-+	      <entry>0x2008</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YVYU8-2X8">
-+	      <entry>V4L2_MBUS_FMT_YVYU8_2X8</entry>
-+	      <entry>0x2009</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-Y10-1X10">
-+	      <entry>V4L2_MBUS_FMT_Y10_1X10</entry>
-+	      <entry>0x200a</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YUYV10-2X10">
-+	      <entry>V4L2_MBUS_FMT_YUYV10_2X10</entry>
-+	      <entry>0x200b</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>9</subscript></entry>
-+	      <entry>u<subscript>8</subscript></entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>9</subscript></entry>
-+	      <entry>v<subscript>8</subscript></entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YVYU10-2X10">
-+	      <entry>V4L2_MBUS_FMT_YVYU10_2X10</entry>
-+	      <entry>0x200c</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>9</subscript></entry>
-+	      <entry>v<subscript>8</subscript></entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>9</subscript></entry>
-+	      <entry>u<subscript>8</subscript></entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-UYVY8-1X16">
-+	      <entry>V4L2_MBUS_FMT_UYVY8_1X16</entry>
-+	      <entry>0x200f</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-VYUY8-1X16">
-+	      <entry>V4L2_MBUS_FMT_VYUY8_1X16</entry>
-+	      <entry>0x2010</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YUYV8-1X16">
-+	      <entry>V4L2_MBUS_FMT_YUYV8_1X16</entry>
-+	      <entry>0x2011</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YVYU8-1X16">
-+	      <entry>V4L2_MBUS_FMT_YVYU8_1X16</entry>
-+	      <entry>0x2012</entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>-</entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YUYV10-1X20">
-+	      <entry>V4L2_MBUS_FMT_YUYV10_1X20</entry>
-+	      <entry>0x200d</entry>
-+	      <entry></entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>u<subscript>9</subscript></entry>
-+	      <entry>u<subscript>8</subscript></entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>v<subscript>9</subscript></entry>
-+	      <entry>v<subscript>8</subscript></entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-YVYU10-1X20">
-+	      <entry>V4L2_MBUS_FMT_YVYU10_1X20</entry>
-+	      <entry>0x200e</entry>
-+	      <entry></entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>v<subscript>9</subscript></entry>
-+	      <entry>v<subscript>8</subscript></entry>
-+	      <entry>v<subscript>7</subscript></entry>
-+	      <entry>v<subscript>6</subscript></entry>
-+	      <entry>v<subscript>5</subscript></entry>
-+	      <entry>v<subscript>4</subscript></entry>
-+	      <entry>v<subscript>3</subscript></entry>
-+	      <entry>v<subscript>2</subscript></entry>
-+	      <entry>v<subscript>1</subscript></entry>
-+	      <entry>v<subscript>0</subscript></entry>
-+	    </row>
-+	    <row>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry></entry>
-+	      <entry>y<subscript>9</subscript></entry>
-+	      <entry>y<subscript>8</subscript></entry>
-+	      <entry>y<subscript>7</subscript></entry>
-+	      <entry>y<subscript>6</subscript></entry>
-+	      <entry>y<subscript>5</subscript></entry>
-+	      <entry>y<subscript>4</subscript></entry>
-+	      <entry>y<subscript>3</subscript></entry>
-+	      <entry>y<subscript>2</subscript></entry>
-+	      <entry>y<subscript>1</subscript></entry>
-+	      <entry>y<subscript>0</subscript></entry>
-+	      <entry>u<subscript>9</subscript></entry>
-+	      <entry>u<subscript>8</subscript></entry>
-+	      <entry>u<subscript>7</subscript></entry>
-+	      <entry>u<subscript>6</subscript></entry>
-+	      <entry>u<subscript>5</subscript></entry>
-+	      <entry>u<subscript>4</subscript></entry>
-+	      <entry>u<subscript>3</subscript></entry>
-+	      <entry>u<subscript>2</subscript></entry>
-+	      <entry>u<subscript>1</subscript></entry>
-+	      <entry>u<subscript>0</subscript></entry>
-+	    </row>
-+	  </tbody>
-+	</tgroup>
-+      </table>
-+    </section>
-+  </section>
-+</section>
-diff --git a/Documentation/DocBook/v4l/v4l2.xml b/Documentation/DocBook/v4l/v4l2.xml
-index 839e93e..695e3bf 100644
---- a/Documentation/DocBook/v4l/v4l2.xml
-+++ b/Documentation/DocBook/v4l/v4l2.xml
-@@ -410,6 +410,7 @@ and discussions on the V4L mailing list.</revremark>
-     <section id="radio"> &sub-dev-radio; </section>
-     <section id="rds"> &sub-dev-rds; </section>
-     <section id="event"> &sub-dev-event; </section>
-+    <section id="subdev"> &sub-dev-subdev; </section>
-   </chapter>
- 
-   <chapter id="driver">
-@@ -477,6 +478,9 @@ and discussions on the V4L mailing list.</revremark>
-     &sub-reqbufs;
-     &sub-s-hw-freq-seek;
-     &sub-streamon;
-+    &sub-subdev-enum-frame-size;
-+    &sub-subdev-enum-mbus-code;
-+    &sub-subdev-g-fmt;
-     &sub-subscribe-event;
-     <!-- End of ioctls. -->
-     &sub-mmap;
-diff --git a/Documentation/DocBook/v4l/vidioc-streamon.xml b/Documentation/DocBook/v4l/vidioc-streamon.xml
-index e42bff1..75ed39b 100644
---- a/Documentation/DocBook/v4l/vidioc-streamon.xml
-+++ b/Documentation/DocBook/v4l/vidioc-streamon.xml
-@@ -93,6 +93,15 @@ synchronize with other events.</para>
- been allocated (memory mapping) or enqueued (output) yet.</para>
- 	</listitem>
-       </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EPIPE</errorcode></term>
-+	<listitem>
-+	  <para>The driver implements <link
-+	  linkend="pad-level-formats">pad-level format configuration</link> and
-+	  the pipeline configuration is invalid.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-     </variablelist>
-   </refsect1>
- </refentry>
-diff --git a/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml b/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
-new file mode 100644
-index 0000000..209e983
---- /dev/null
-+++ b/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-size.xml
-@@ -0,0 +1,148 @@
-+<refentry id="vidioc-subdev-enum-frame-size">
-+  <refmeta>
-+    <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</refname>
-+    <refpurpose>Enumerate media bus frame sizes</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct v4l2_subdev_frame_size_enum *
-+	<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>This ioctl allows applications to enumerate all frame sizes
-+    supported by a sub-device on the given pad for the given media bus format.
-+    Supported formats can be retrieved with the &VIDIOC-SUBDEV-ENUM-MBUS-CODE;
-+    ioctl.</para>
-+
-+    <para>To enumerate frame sizes applications initialize the
-+    <structfield>pad</structfield>, <structfield>code</structfield> and
-+    <structfield>index</structfield> fields of the
-+    &v4l2-subdev-mbus-code-enum; and call the
-+    <constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant> ioctl with a pointer to
-+    the structure. Drivers fill the minimum and maximum frame sizes or return
-+    an &EINVAL; if one of the input parameters is invalid.</para>
-+
-+    <para>Sub-devices that only support discrete frame sizes (such as most
-+    sensors) will return one or more frame sizes with identical minimum and
-+    maximum values.</para>
-+
-+    <para>Not all possible sizes in given [minimum, maximum] ranges need to be
-+    supported. For instance, a scaler that uses a fixed-point scaling ratio
-+    might not be able to produce every frame size between the minimum and
-+    maximum values. Applications must use the &VIDIOC-SUBDEV-S-FMT; ioctl to
-+    try the sub-device for an exact supported frame size.</para>
-+
-+    <para>Available frame sizes may depend on the current 'try' formats at other
-+    pads of the sub-device, as well as on the current active links and the
-+    current values of V4L2 controls. See &VIDIOC-SUBDEV-G-FMT; for more
-+    information about try formats.</para>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-frame-size-enum">
-+      <title>struct <structname>v4l2_subdev_frame_size_enum</structname></title>
-+      <tgroup cols="3">
-+	&cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>index</structfield></entry>
-+	    <entry>Number of the format in the enumeration, set by the
-+	    application.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>pad</structfield></entry>
-+	    <entry>Pad number as reported by the media controller API.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>code</structfield></entry>
-+	    <entry>The media bus format code, as defined in
-+	    <xref linkend="v4l2-mbus-format" />.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>min_width</structfield></entry>
-+	    <entry>Minimum frame width, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>max_width</structfield></entry>
-+	    <entry>Maximum frame width, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>min_height</structfield></entry>
-+	    <entry>Minimum frame height, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>max_height</structfield></entry>
-+	    <entry>Maximum frame height, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[9]</entry>
-+	    <entry>Reserved for future extensions. Applications and drivers must
-+	    set the array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &v4l2-subdev-frame-size-enum; <structfield>pad</structfield>
-+	  references a non-existing pad, the <structfield>code</structfield> is
-+	  invalid for the given pad or the <structfield>index</structfield>
-+	  field is out of bounds.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml b/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
-new file mode 100644
-index 0000000..763dbc7
---- /dev/null
-+++ b/Documentation/DocBook/v4l/vidioc-subdev-enum-mbus-code.xml
-@@ -0,0 +1,113 @@
-+<refentry id="vidioc-subdev-enum-mbus-code">
-+  <refmeta>
-+    <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_MBUS_CODE</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>VIDIOC_SUBDEV_ENUM_MBUS_CODE</refname>
-+    <refpurpose>Enumerate media bus formats</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct v4l2_subdev_mbus_code_enum *
-+	<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>VIDIOC_SUBDEV_ENUM_MBUS_CODE</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>To enumerate media bus formats available at a given sub-device pad
-+    applications initialize the <structfield>pad</structfield> and
-+    <structfield>index</structfield> fields of &v4l2-subdev-mbus-code-enum; and
-+    call the <constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant> ioctl with a
-+    pointer to this structure. Drivers fill the rest of the structure or return
-+    an &EINVAL; if either the <structfield>pad</structfield> or
-+    <structfield>index</structfield> are invalid. All media bus formats are
-+    enumerable by beginning at index zero and incrementing by one until
-+    <errorcode>EINVAL</errorcode> is returned.</para>
-+
-+    <para>Available media bus formats may depend on the current 'try' formats
-+    at other pads of the sub-device, as well as on the current active links. See
-+    &VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-mbus-code-enum">
-+      <title>struct <structname>v4l2_subdev_mbus_code_enum</structname></title>
-+      <tgroup cols="3">
-+	&cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>pad</structfield></entry>
-+	    <entry>Pad number as reported by the media controller API.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>index</structfield></entry>
-+	    <entry>Number of the format in the enumeration, set by the
-+	    application.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>code</structfield></entry>
-+	    <entry>The media bus format code, as defined in
-+	    <xref linkend="v4l2-mbus-format" />.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[9]</entry>
-+	    <entry>Reserved for future extensions. Applications and drivers must
-+	    set the array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &v4l2-subdev-mbus-code-enum; <structfield>pad</structfield>
-+	  references a non-existing pad, or the <structfield>index</structfield>
-+	  field is out of bounds.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml b/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
-new file mode 100644
-index 0000000..f06c41b
---- /dev/null
-+++ b/Documentation/DocBook/v4l/vidioc-subdev-g-fmt.xml
-@@ -0,0 +1,174 @@
-+<refentry id="vidioc-subdev-g-fmt">
-+  <refmeta>
-+    <refentrytitle>ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>VIDIOC_SUBDEV_G_FMT</refname>
-+    <refname>VIDIOC_SUBDEV_S_FMT</refname>
-+    <refpurpose>Get or set the data format on a subdev pad</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct v4l2_subdev_format *<parameter>argp</parameter>
-+	</paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>These ioctls are used to negotiate the frame format at specific
-+    subdev pads in the image pipeline.</para>
-+
-+    <para>To retrieve the current format applications set the
-+    <structfield>pad</structfield> field of a &v4l2-subdev-format; to the
-+    desired pad number as reported by the media API and the
-+    <structfield>which</structfield> field to
-+    <constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. When they call the
-+    <constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl with a pointer to this
-+    structure the driver fills the members of the <structfield>format</structfield>
-+    field.</para>
-+
-+    <para>To change the current format applications set both the
-+    <structfield>pad</structfield> and <structfield>which</structfield> fields
-+    and all members of the <structfield>format</structfield> field. When they
-+    call the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl with a pointer to this
-+    structure the driver verifies the requested format, adjusts it based on the
-+    hardware capabilities and configures the device. Upon return the
-+    &v4l2-subdev-format; contains the current format as would be returned by a
-+    <constant>VIDIOC_SUBDEV_G_FMT</constant> call.</para>
-+
-+    <para>Applications can query the device capabilities by setting the
-+    <structfield>which</structfield> to
-+    <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' formats are not
-+    applied to the device by the driver, but are changed exactly as active
-+    formats and stored in the sub-device file handle. Two applications querying
-+    the same sub-device would thus not interact with each other.</para>
-+
-+    <para>For instance, to try a format at the output pad of a sub-device,
-+    applications would first set the try format at the sub-device input with the
-+    <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl. They would then either
-+    retrieve the default format at the output pad with the
-+    <constant>VIDIOC_SUBDEV_G_FMT</constant> ioctl, or set the desired output
-+    pad format with the <constant>VIDIOC_SUBDEV_S_FMT</constant> ioctl and check
-+    the returned value.</para>
-+
-+    <para>Try formats do not depend on active formats, but can depend on the
-+    current links configuration or sub-device controls value. For instance, a
-+    low-pass noise filter might crop pixels at the frame boundaries, modifying
-+    its output frame size.</para>
-+
-+    <para>Drivers must not return an error solely because the requested format
-+    doesn't match the device capabilities. They must instead modify the format
-+    to match what the hardware can provide. The modified format should be as
-+    close as possible to the original request.</para>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-format">
-+      <title>struct <structname>v4l2_subdev_format</structname></title>
-+      <tgroup cols="3">
-+        &cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>pad</structfield></entry>
-+	    <entry>Pad number as reported by the media controller API.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>which</structfield></entry>
-+	    <entry>Format to modified, from &v4l2-subdev-format-whence;.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>&v4l2-mbus-framefmt;</entry>
-+	    <entry><structfield>format</structfield></entry>
-+	    <entry>Definition of an image format, see <xref
-+	    linkend="v4l2-mbus-framefmt" /> for details.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[8]</entry>
-+	    <entry>Reserved for future extensions. Applications and drivers must
-+	    set the array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-format-whence">
-+      <title>enum <structname>v4l2_subdev_format_whence</structname></title>
-+      <tgroup cols="3">
-+        &cs-def;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>V4L2_SUBDEV_FORMAT_TRY</entry>
-+	    <entry>0</entry>
-+	    <entry>Try formats, used for querying device capabilities.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>V4L2_SUBDEV_FORMAT_ACTIVE</entry>
-+	    <entry>1</entry>
-+	    <entry>Active formats, applied to the hardware.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EBUSY</errorcode></term>
-+	<listitem>
-+	  <para>The format can't be changed because the pad is currently busy.
-+	  This can be caused, for instance, by an active video stream on the
-+	  pad. The ioctl must not be retried without performing another action
-+	  to fix the problem first. Only returned by
-+	  <constant>VIDIOC_SUBDEV_S_FMT</constant></para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &v4l2-subdev-format; <structfield>pad</structfield>
-+	  references a non-existing pad, or the <structfield>which</structfield>
-+	  field references a non-existing format.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index 0f904e2..73aae00 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -149,6 +149,9 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 	struct video_device *vdev = video_devdata(file);
- 	struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
- 	struct v4l2_fh *vfh = file->private_data;
-+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-+	struct v4l2_subdev_fh *subdev_fh = to_v4l2_subdev_fh(vfh);
-+#endif
- 
- 	switch (cmd) {
- 	case VIDIOC_QUERYCTRL:
-@@ -183,7 +186,53 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 
- 	case VIDIOC_UNSUBSCRIBE_EVENT:
- 		return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg);
-+#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-+	case VIDIOC_SUBDEV_G_FMT: {
-+		struct v4l2_subdev_format *format = arg;
-+
-+		if (format->which != V4L2_SUBDEV_FORMAT_TRY &&
-+		    format->which != V4L2_SUBDEV_FORMAT_ACTIVE)
-+			return -EINVAL;
-+
-+		if (format->pad >= sd->entity.num_pads)
-+			return -EINVAL;
-+
-+		return v4l2_subdev_call(sd, pad, get_fmt, subdev_fh, format);
-+	}
-+
-+	case VIDIOC_SUBDEV_S_FMT: {
-+		struct v4l2_subdev_format *format = arg;
-+
-+		if (format->which != V4L2_SUBDEV_FORMAT_TRY &&
-+		    format->which != V4L2_SUBDEV_FORMAT_ACTIVE)
-+			return -EINVAL;
-+
-+		if (format->pad >= sd->entity.num_pads)
-+			return -EINVAL;
- 
-+		return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh, format);
-+	}
-+
-+	case VIDIOC_SUBDEV_ENUM_MBUS_CODE: {
-+		struct v4l2_subdev_mbus_code_enum *code = arg;
-+
-+		if (code->pad >= sd->entity.num_pads)
-+			return -EINVAL;
-+
-+		return v4l2_subdev_call(sd, pad, enum_mbus_code, subdev_fh,
-+					code);
-+	}
-+
-+	case VIDIOC_SUBDEV_ENUM_FRAME_SIZE: {
-+		struct v4l2_subdev_frame_size_enum *fse = arg;
-+
-+		if (fse->pad >= sd->entity.num_pads)
-+			return -EINVAL;
-+
-+		return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh,
-+					fse);
-+	}
-+#endif
- 	default:
- 		return -ENOIOCTLCMD;
- 	}
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index 796e1d8..c0db7f4 100644
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -367,6 +367,7 @@ header-y += usbdevice_fs.h
- header-y += utime.h
- header-y += utsname.h
- header-y += v4l2-mediabus.h
-+header-y += v4l2-subdev.h
- header-y += veth.h
- header-y += vhost.h
- header-y += videodev.h
-diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h
-new file mode 100644
-index 0000000..38d0eda
---- /dev/null
-+++ b/include/linux/v4l2-subdev.h
-@@ -0,0 +1,90 @@
-+/*
-+ * V4L2 subdev userspace API
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+
-+#ifndef __LINUX_V4L2_SUBDEV_H
-+#define __LINUX_V4L2_SUBDEV_H
-+
-+#include <linux/ioctl.h>
-+#include <linux/types.h>
-+#include <linux/v4l2-mediabus.h>
-+
-+/**
-+ * enum v4l2_subdev_format_whence - Media bus format type
-+ * @V4L2_SUBDEV_FORMAT_TRY: try format, for negotiation only
-+ * @V4L2_SUBDEV_FORMAT_ACTIVE: active format, applied to the device
-+ */
-+enum v4l2_subdev_format_whence {
-+	V4L2_SUBDEV_FORMAT_TRY = 0,
-+	V4L2_SUBDEV_FORMAT_ACTIVE = 1,
-+};
-+
-+/**
-+ * struct v4l2_subdev_format - Pad-level media bus format
-+ * @which: format type (from enum v4l2_subdev_format_whence)
-+ * @pad: pad number, as reported by the media API
-+ * @format: media bus format (format code and frame size)
-+ */
-+struct v4l2_subdev_format {
-+	__u32 which;
-+	__u32 pad;
-+	struct v4l2_mbus_framefmt format;
-+	__u32 reserved[8];
-+};
-+
-+/**
-+ * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
-+ * @pad: pad number, as reported by the media API
-+ * @index: format index during enumeration
-+ * @code: format code (from enum v4l2_mbus_pixelcode)
-+ */
-+struct v4l2_subdev_mbus_code_enum {
-+	__u32 pad;
-+	__u32 index;
-+	__u32 code;
-+	__u32 reserved[9];
-+};
-+
-+/**
-+ * struct v4l2_subdev_frame_size_enum - Media bus format enumeration
-+ * @pad: pad number, as reported by the media API
-+ * @index: format index during enumeration
-+ * @code: format code (from enum v4l2_mbus_pixelcode)
-+ */
-+struct v4l2_subdev_frame_size_enum {
-+	__u32 index;
-+	__u32 pad;
-+	__u32 code;
-+	__u32 min_width;
-+	__u32 max_width;
-+	__u32 min_height;
-+	__u32 max_height;
-+	__u32 reserved[9];
-+};
-+
-+#define VIDIOC_SUBDEV_G_FMT	_IOWR('V',  4, struct v4l2_subdev_format)
-+#define VIDIOC_SUBDEV_S_FMT	_IOWR('V',  5, struct v4l2_subdev_format)
-+#define VIDIOC_SUBDEV_ENUM_MBUS_CODE \
-+			_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
-+#define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
-+			_IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
-+
-+#endif
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index 4f6ddba..f5611c2 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -21,6 +21,7 @@
- #ifndef _V4L2_SUBDEV_H
- #define _V4L2_SUBDEV_H
- 
-+#include <linux/v4l2-subdev.h>
- #include <media/media-entity.h>
- #include <media/v4l2-common.h>
- #include <media/v4l2-dev.h>
-@@ -425,6 +426,15 @@ struct v4l2_subdev_ir_ops {
- };
- 
- struct v4l2_subdev_pad_ops {
-+	int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_mbus_code_enum *code);
-+	int (*enum_frame_size)(struct v4l2_subdev *sd,
-+			       struct v4l2_subdev_fh *fh,
-+			       struct v4l2_subdev_frame_size_enum *fse);
-+	int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+		       struct v4l2_subdev_format *format);
-+	int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+		       struct v4l2_subdev_format *format);
- };
- 
- struct v4l2_subdev_ops {
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0029-v4l-v4l2_subdev-userspace-frame-interval-API.patch b/recipes-kernel/linux/linux-omap/media/0029-v4l-v4l2_subdev-userspace-frame-interval-API.patch
deleted file mode 100644
index 8de33fd..0000000
--- a/recipes-kernel/linux/linux-omap/media/0029-v4l-v4l2_subdev-userspace-frame-interval-API.patch
+++ /dev/null
@@ -1,479 +0,0 @@
-From b137f96a198afb39c8457e2c5d28c1c4bca129a3 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 5 May 2010 16:38:35 +0200
-Subject: [PATCH 29/43] v4l: v4l2_subdev userspace frame interval API
-
-The three new ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL,
-VIDIOC_SUBDEV_G_FRAME_INTERVAL and VIDIOC_SUBDEV_S_FRAME_INTERVAL can be
-used to enumerate and configure a subdev's frame rate from userspace.
-
-Two new video::g/s_frame_interval subdev operations are introduced to
-support those ioctls. The existing video::g/s_parm operations are
-deprecated and shouldn't be used anymore.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
----
- Documentation/DocBook/media-entities.tmpl          |    6 +
- Documentation/DocBook/v4l/v4l2.xml                 |    2 +
- .../v4l/vidioc-subdev-enum-frame-interval.xml      |  146 ++++++++++++++++++++
- .../DocBook/v4l/vidioc-subdev-g-frame-interval.xml |  135 ++++++++++++++++++
- drivers/media/video/v4l2-subdev.c                  |   16 ++
- include/linux/v4l2-subdev.h                        |   36 +++++
- include/media/v4l2-subdev.h                        |    7 +
- 7 files changed, 348 insertions(+), 0 deletions(-)
- create mode 100644 Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml
- create mode 100644 Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml
-
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index 538f8fe..4af3c2e 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -89,7 +89,9 @@
- <!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-G-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-S-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></link>">
- <!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>">
- <!ENTITY VIDIOC-TRY-EXT-CTRLS "<link linkend='vidioc-g-ext-ctrls'><constant>VIDIOC_TRY_EXT_CTRLS</constant></link>">
- <!ENTITY VIDIOC-TRY-FMT "<link linkend='vidioc-g-fmt'><constant>VIDIOC_TRY_FMT</constant></link>">
-@@ -190,6 +192,8 @@
- <!ENTITY v4l2-sliced-vbi-cap "struct <link linkend='v4l2-sliced-vbi-cap'>v4l2_sliced_vbi_cap</link>">
- <!ENTITY v4l2-sliced-vbi-data "struct <link linkend='v4l2-sliced-vbi-data'>v4l2_sliced_vbi_data</link>">
- <!ENTITY v4l2-sliced-vbi-format "struct <link linkend='v4l2-sliced-vbi-format'>v4l2_sliced_vbi_format</link>">
-+<!ENTITY v4l2-subdev-frame-interval "struct <link linkend='v4l2-subdev-frame-interval'>v4l2_subdev_frame_interval</link>">
-+<!ENTITY v4l2-subdev-frame-interval-enum "struct <link linkend='v4l2-subdev-frame-interval-enum'>v4l2_subdev_frame_interval_enum</link>">
- <!ENTITY v4l2-subdev-frame-size-enum "struct <link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>">
- <!ENTITY v4l2-subdev-format "struct <link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>">
- <!ENTITY v4l2-subdev-mbus-code-enum "struct <link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>">
-@@ -325,10 +329,12 @@
- <!ENTITY sub-reqbufs SYSTEM "v4l/vidioc-reqbufs.xml">
- <!ENTITY sub-s-hw-freq-seek SYSTEM "v4l/vidioc-s-hw-freq-seek.xml">
- <!ENTITY sub-streamon SYSTEM "v4l/vidioc-streamon.xml">
-+<!ENTITY sub-subdev-enum-frame-interval SYSTEM "v4l/vidioc-subdev-enum-frame-interval.xml">
- <!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml">
- <!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml">
- <!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml">
- <!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml">
-+<!ENTITY sub-subdev-g-frame-interval SYSTEM "v4l/vidioc-subdev-g-frame-interval.xml">
- <!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml">
- <!ENTITY sub-keytable-c SYSTEM "v4l/keytable.c.xml">
- <!ENTITY sub-v4l2grab-c SYSTEM "v4l/v4l2grab.c.xml">
-diff --git a/Documentation/DocBook/v4l/v4l2.xml b/Documentation/DocBook/v4l/v4l2.xml
-index 695e3bf..e6225e0 100644
---- a/Documentation/DocBook/v4l/v4l2.xml
-+++ b/Documentation/DocBook/v4l/v4l2.xml
-@@ -478,9 +478,11 @@ and discussions on the V4L mailing list.</revremark>
-     &sub-reqbufs;
-     &sub-s-hw-freq-seek;
-     &sub-streamon;
-+    &sub-subdev-enum-frame-interval;
-     &sub-subdev-enum-frame-size;
-     &sub-subdev-enum-mbus-code;
-     &sub-subdev-g-fmt;
-+    &sub-subdev-g-frame-interval;
-     &sub-subscribe-event;
-     <!-- End of ioctls. -->
-     &sub-mmap;
-diff --git a/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml b/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml
-new file mode 100644
-index 0000000..bcea9d4
---- /dev/null
-+++ b/Documentation/DocBook/v4l/vidioc-subdev-enum-frame-interval.xml
-@@ -0,0 +1,146 @@
-+<refentry id="vidioc-subdev-enum-frame-interval">
-+  <refmeta>
-+    <refentrytitle>ioctl VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</refname>
-+    <refpurpose>Enumerate frame intervals</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct v4l2_subdev_frame_interval_enum *
-+	<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>This ioctl lets applications enumerate available frame intervals on a
-+    given sub-device pad. Frame intervals only makes sense for sub-devices that
-+    can control the frame period on their own. This includes, for instance,
-+    image sensors and TV tuners.</para>
-+
-+    <para>For the common use case of image sensors, the frame intervals
-+    available on the sub-device output pad depend on the frame format and size
-+    on the same pad. Applications must thus specify the desired format and size
-+    when enumerating frame intervals.</para>
-+
-+    <para>To enumerate frame intervals applications initialize the
-+    <structfield>index</structfield>, <structfield>pad</structfield>,
-+    <structfield>code</structfield>, <structfield>width</structfield> and
-+    <structfield>height</structfield> fields of
-+    &v4l2-subdev-frame-interval-enum; and call the
-+    <constant>VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL</constant> ioctl with a pointer
-+    to this structure. Drivers fill the rest of the structure or return
-+    an &EINVAL; if one of the input fields is invalid. All frame intervals are
-+    enumerable by beginning at index zero and incrementing by one until
-+    <errorcode>EINVAL</errorcode> is returned.</para>
-+
-+    <para>Available frame intervals may depend on the current 'try' formats
-+    at other pads of the sub-device, as well as on the current active links. See
-+    &VIDIOC-SUBDEV-G-FMT; for more information about the try formats.</para>
-+
-+    <para>Sub-devices that support the frame interval enumeration ioctl should
-+    implemented it on a single pad only. Its behaviour when supported on
-+    multiple pads of the same sub-device is not defined.</para>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-frame-interval-enum">
-+      <title>struct <structname>v4l2_subdev_frame_interval_enum</structname></title>
-+      <tgroup cols="3">
-+	&cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>index</structfield></entry>
-+	    <entry>Number of the format in the enumeration, set by the
-+	    application.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>pad</structfield></entry>
-+	    <entry>Pad number as reported by the media controller API.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>code</structfield></entry>
-+	    <entry>The media bus format code, as defined in
-+	    <xref linkend="v4l2-mbus-format" />.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>width</structfield></entry>
-+	    <entry>Frame width, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>height</structfield></entry>
-+	    <entry>Frame height, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>&v4l2-fract;</entry>
-+	    <entry><structfield>interval</structfield></entry>
-+	    <entry>Period, in seconds, between consecutive video frames.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[9]</entry>
-+	    <entry>Reserved for future extensions. Applications and drivers must
-+	    set the array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &v4l2-subdev-frame-interval-enum;
-+	  <structfield>pad</structfield> references a non-existing pad, one of
-+	  the <structfield>code</structfield>, <structfield>width</structfield>
-+	  or <structfield>height</structfield> fields are invalid for the given
-+	  pad or the <structfield>index</structfield> field is out of bounds.
-+	  </para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml b/Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml
-new file mode 100644
-index 0000000..848ec78
---- /dev/null
-+++ b/Documentation/DocBook/v4l/vidioc-subdev-g-frame-interval.xml
-@@ -0,0 +1,135 @@
-+<refentry id="vidioc-subdev-g-frame-interval">
-+  <refmeta>
-+    <refentrytitle>ioctl VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>VIDIOC_SUBDEV_G_FRAME_INTERVAL</refname>
-+    <refname>VIDIOC_SUBDEV_S_FRAME_INTERVAL</refname>
-+    <refpurpose>Get or set the frame interval on a subdev pad</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct v4l2_subdev_frame_interval *<parameter>argp</parameter>
-+	</paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>VIDIOC_SUBDEV_G_FRAME_INTERVAL, VIDIOC_SUBDEV_S_FRAME_INTERVAL</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>These ioctls are used to get and set the frame interval at specific
-+    subdev pads in the image pipeline. The frame interval only makes sense for
-+    sub-devices that can control the frame period on their own. This includes,
-+    for instance, image sensors and TV tuners. Sub-devices that don't support
-+    frame intervals must not implement these ioctls.</para>
-+
-+    <para>To retrieve the current frame interval applications set the
-+    <structfield>pad</structfield> field of a &v4l2-subdev-frame-interval; to
-+    the desired pad number as reported by the media controller API. When they
-+    call the <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> ioctl with a
-+    pointer to this structure the driver fills the members of the
-+    <structfield>interval</structfield> field.</para>
-+
-+    <para>To change the current frame interval applications set both the
-+    <structfield>pad</structfield> field and all members of the
-+    <structfield>interval</structfield> field. When they call the
-+    <constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant> ioctl with a pointer to
-+    this structure the driver verifies the requested interval, adjusts it based
-+    on the hardware capabilities and configures the device. Upon return the
-+    &v4l2-subdev-frame-interval; contains the current frame interval as would be
-+    returned by a <constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant> call.
-+    </para>
-+
-+    <para>Drivers must not return an error solely because the requested interval
-+    doesn't match the device capabilities. They must instead modify the interval
-+    to match what the hardware can provide. The modified interval should be as
-+    close as possible to the original request.</para>
-+
-+    <para>Sub-devices that support the frame interval ioctls should implement
-+    them on a single pad only. Their behaviour when supported on multiple pads
-+    of the same sub-device is not defined.</para>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-frame-interval">
-+      <title>struct <structname>v4l2_subdev_frame_interval</structname></title>
-+      <tgroup cols="3">
-+        &cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>pad</structfield></entry>
-+	    <entry>Pad number as reported by the media controller API.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>&v4l2-fract;</entry>
-+	    <entry><structfield>interval</structfield></entry>
-+	    <entry>Period, in seconds, between consecutive video frames.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[9]</entry>
-+	    <entry>Reserved for future extensions. Applications and drivers must
-+	    set the array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EBUSY</errorcode></term>
-+	<listitem>
-+	  <para>The frame interval can't be changed because the pad is currently
-+	  busy. This can be caused, for instance, by an active video stream on
-+	  the pad. The ioctl must not be retried without performing another
-+	  action to fix the problem first. Only returned by
-+	  <constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &v4l2-subdev-frame-interval; <structfield>pad</structfield>
-+	  references a non-existing pad, or the pad doesn't support frame
-+	  intervals.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index 73aae00..316a08a 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -232,6 +232,22 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 		return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh,
- 					fse);
- 	}
-+
-+	case VIDIOC_SUBDEV_G_FRAME_INTERVAL:
-+		return v4l2_subdev_call(sd, video, g_frame_interval, arg);
-+
-+	case VIDIOC_SUBDEV_S_FRAME_INTERVAL:
-+		return v4l2_subdev_call(sd, video, s_frame_interval, arg);
-+
-+	case VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL: {
-+		struct v4l2_subdev_frame_interval_enum *fie = arg;
-+
-+		if (fie->pad >= sd->entity.num_pads)
-+			return -EINVAL;
-+
-+		return v4l2_subdev_call(sd, pad, enum_frame_interval, subdev_fh,
-+					fie);
-+	}
- #endif
- 	default:
- 		return -ENOIOCTLCMD;
-diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h
-index 38d0eda..bf9f3e9 100644
---- a/include/linux/v4l2-subdev.h
-+++ b/include/linux/v4l2-subdev.h
-@@ -80,11 +80,47 @@ struct v4l2_subdev_frame_size_enum {
- 	__u32 reserved[9];
- };
- 
-+/**
-+ * struct v4l2_subdev_frame_interval - Pad-level frame rate
-+ * @pad: pad number, as reported by the media API
-+ * @interval: frame interval in seconds
-+ */
-+struct v4l2_subdev_frame_interval {
-+	__u32 pad;
-+	struct v4l2_fract interval;
-+	__u32 reserved[9];
-+};
-+
-+/**
-+ * struct v4l2_subdev_frame_interval_enum - Frame interval enumeration
-+ * @pad: pad number, as reported by the media API
-+ * @index: frame interval index during enumeration
-+ * @code: format code (from enum v4l2_mbus_pixelcode)
-+ * @width: frame width in pixels
-+ * @height: frame height in pixels
-+ * @interval: frame interval in seconds
-+ */
-+struct v4l2_subdev_frame_interval_enum {
-+	__u32 index;
-+	__u32 pad;
-+	__u32 code;
-+	__u32 width;
-+	__u32 height;
-+	struct v4l2_fract interval;
-+	__u32 reserved[9];
-+};
-+
- #define VIDIOC_SUBDEV_G_FMT	_IOWR('V',  4, struct v4l2_subdev_format)
- #define VIDIOC_SUBDEV_S_FMT	_IOWR('V',  5, struct v4l2_subdev_format)
-+#define VIDIOC_SUBDEV_G_FRAME_INTERVAL \
-+			_IOWR('V', 21, struct v4l2_subdev_frame_interval)
-+#define VIDIOC_SUBDEV_S_FRAME_INTERVAL \
-+			_IOWR('V', 22, struct v4l2_subdev_frame_interval)
- #define VIDIOC_SUBDEV_ENUM_MBUS_CODE \
- 			_IOWR('V',  2, struct v4l2_subdev_mbus_code_enum)
- #define VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
- 			_IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
-+#define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
-+			_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
- 
- #endif
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index f5611c2..9c8bcd3 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -281,6 +281,10 @@ struct v4l2_subdev_video_ops {
- 	int (*s_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop);
- 	int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
- 	int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
-+	int (*g_frame_interval)(struct v4l2_subdev *sd,
-+				struct v4l2_subdev_frame_interval *interval);
-+	int (*s_frame_interval)(struct v4l2_subdev *sd,
-+				struct v4l2_subdev_frame_interval *interval);
- 	int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize);
- 	int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival);
- 	int (*enum_dv_presets) (struct v4l2_subdev *sd,
-@@ -431,6 +435,9 @@ struct v4l2_subdev_pad_ops {
- 	int (*enum_frame_size)(struct v4l2_subdev *sd,
- 			       struct v4l2_subdev_fh *fh,
- 			       struct v4l2_subdev_frame_size_enum *fse);
-+	int (*enum_frame_interval)(struct v4l2_subdev *sd,
-+				   struct v4l2_subdev_fh *fh,
-+				   struct v4l2_subdev_frame_interval_enum *fie);
- 	int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
- 		       struct v4l2_subdev_format *format);
- 	int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0030-v4l-v4l2_subdev-userspace-crop-API.patch b/recipes-kernel/linux/linux-omap/media/0030-v4l-v4l2_subdev-userspace-crop-API.patch
deleted file mode 100644
index d1a3aae..0000000
--- a/recipes-kernel/linux/linux-omap/media/0030-v4l-v4l2_subdev-userspace-crop-API.patch
+++ /dev/null
@@ -1,350 +0,0 @@
-From 9e87e6d59dc364ec78717fb91cbe9bad7df14223 Mon Sep 17 00:00:00 2001
-From: Antti Koskipaa <antti.koskipaa at nokia.com>
-Date: Wed, 23 Jun 2010 11:03:42 +0300
-Subject: [PATCH 30/43] v4l: v4l2_subdev userspace crop API
-
-This patch adds the VIDIOC_SUBDEV_S_CROP and G_CROP ioctls to the
-userland API. CROPCAP is not implemented because it's redundant.
-
-Signed-off-by: Antti Koskipaa <antti.koskipaa at nokia.com>
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/DocBook/media-entities.tmpl          |    4 +
- Documentation/DocBook/v4l/dev-subdev.xml           |   33 +++++
- Documentation/DocBook/v4l/v4l2.xml                 |    1 +
- Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml |  149 ++++++++++++++++++++
- drivers/media/video/v4l2-subdev.c                  |   26 ++++
- include/linux/v4l2-subdev.h                        |   15 ++
- include/media/v4l2-subdev.h                        |    4 +
- 7 files changed, 232 insertions(+), 0 deletions(-)
- create mode 100644 Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml
-
-diff --git a/Documentation/DocBook/media-entities.tmpl b/Documentation/DocBook/media-entities.tmpl
-index 4af3c2e..157d147 100644
---- a/Documentation/DocBook/media-entities.tmpl
-+++ b/Documentation/DocBook/media-entities.tmpl
-@@ -88,8 +88,10 @@
- <!ENTITY VIDIOC-S-TUNER "<link linkend='vidioc-g-tuner'><constant>VIDIOC_S_TUNER</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-ENUM-FRAME-SIZE "<link linkend='vidioc-subdev-enum-frame-size'><constant>VIDIOC_SUBDEV_ENUM_FRAME_SIZE</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-ENUM-MBUS-CODE "<link linkend='vidioc-subdev-enum-mbus-code'><constant>VIDIOC_SUBDEV_ENUM_MBUS_CODE</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-G-CROP "<link linkend='vidioc-subdev-g-crop'><constant>VIDIOC_SUBDEV_G_CROP</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-G-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_G_FMT</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-G-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_G_FRAME_INTERVAL</constant></link>">
-+<!ENTITY VIDIOC-SUBDEV-S-CROP "<link linkend='vidioc-subdev-g-crop'><constant>VIDIOC_SUBDEV_S_CROP</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-S-FMT "<link linkend='vidioc-subdev-g-fmt'><constant>VIDIOC_SUBDEV_S_FMT</constant></link>">
- <!ENTITY VIDIOC-SUBDEV-S-FRAME-INTERVAL "<link linkend='vidioc-subdev-g-frame-interval'><constant>VIDIOC_SUBDEV_S_FRAME_INTERVAL</constant></link>">
- <!ENTITY VIDIOC-TRY-ENCODER-CMD "<link linkend='vidioc-encoder-cmd'><constant>VIDIOC_TRY_ENCODER_CMD</constant></link>">
-@@ -195,6 +197,7 @@
- <!ENTITY v4l2-subdev-frame-interval "struct <link linkend='v4l2-subdev-frame-interval'>v4l2_subdev_frame_interval</link>">
- <!ENTITY v4l2-subdev-frame-interval-enum "struct <link linkend='v4l2-subdev-frame-interval-enum'>v4l2_subdev_frame_interval_enum</link>">
- <!ENTITY v4l2-subdev-frame-size-enum "struct <link linkend='v4l2-subdev-frame-size-enum'>v4l2_subdev_frame_size_enum</link>">
-+<!ENTITY v4l2-subdev-crop "struct <link linkend='v4l2-subdev-crop'>v4l2_subdev_crop</link>">
- <!ENTITY v4l2-subdev-format "struct <link linkend='v4l2-subdev-format'>v4l2_subdev_format</link>">
- <!ENTITY v4l2-subdev-mbus-code-enum "struct <link linkend='v4l2-subdev-mbus-code-enum'>v4l2_subdev_mbus_code_enum</link>">
- <!ENTITY v4l2-standard "struct <link linkend='v4l2-standard'>v4l2_standard</link>">
-@@ -333,6 +336,7 @@
- <!ENTITY sub-subdev-enum-frame-size SYSTEM "v4l/vidioc-subdev-enum-frame-size.xml">
- <!ENTITY sub-subdev-enum-mbus-code SYSTEM "v4l/vidioc-subdev-enum-mbus-code.xml">
- <!ENTITY sub-subdev-formats SYSTEM "v4l/subdev-formats.xml">
-+<!ENTITY sub-subdev-g-crop SYSTEM "v4l/vidioc-subdev-g-crop.xml">
- <!ENTITY sub-subdev-g-fmt SYSTEM "v4l/vidioc-subdev-g-fmt.xml">
- <!ENTITY sub-subdev-g-frame-interval SYSTEM "v4l/vidioc-subdev-g-frame-interval.xml">
- <!ENTITY sub-capture-c SYSTEM "v4l/capture.c.xml">
-diff --git a/Documentation/DocBook/v4l/dev-subdev.xml b/Documentation/DocBook/v4l/dev-subdev.xml
-index 12fdca4..a8da916 100644
---- a/Documentation/DocBook/v4l/dev-subdev.xml
-+++ b/Documentation/DocBook/v4l/dev-subdev.xml
-@@ -269,6 +269,39 @@
-       </para>
-     </section>
- 
-+    <section>
-+      <title>Cropping and scaling</title>
-+
-+      <para>Many sub-devices support cropping frames on their input or output
-+      pads (or possible even on both). Cropping is used to select the area of
-+      interest in an image, typically on a video sensor or video decoder. It can
-+      also be used as part of digital zoom implementations to select the area of
-+      the image that will be scaled up.</para>
-+
-+      <para>Crop settings are defined by a crop rectangle and represented in a
-+      &v4l2-rect; by the coordinates of the top left corner and the rectangle
-+      size. Both the coordinates and sizes are expressed in pixels.</para>
-+
-+      <para>The crop rectangle is retrieved and set using the
-+      &VIDIOC-SUBDEV-G-CROP; and &VIDIOC-SUBDEV-S-CROP; ioctls. Like for pad
-+      formats, drivers store try and active crop rectangles. The format
-+      negotiation mechanism applies to crop settings as well.</para>
-+
-+      <para>On input pads, cropping is applied relatively to the current pad
-+      format. The pad format represents the image size as received by the
-+      sub-device from the previous block in the pipeline, and the crop rectangle
-+      represents the sub-image that will be transmitted further inside the
-+      sub-device for processing. The crop rectangle be entirely containted
-+      inside the input image size.</para>
-+
-+      <para>Input crop rectangle are reset to their default value when the input
-+      image format is modified. Drivers should use the input image size as the
-+      crop rectangle default value, but hardware requirements may prevent this.
-+      </para>
-+
-+      <para>Cropping behaviour on output pads is not defined.</para>
-+
-+    </section>
-   </section>
- 
-   &sub-subdev-formats;
-diff --git a/Documentation/DocBook/v4l/v4l2.xml b/Documentation/DocBook/v4l/v4l2.xml
-index e6225e0..5e640ca 100644
---- a/Documentation/DocBook/v4l/v4l2.xml
-+++ b/Documentation/DocBook/v4l/v4l2.xml
-@@ -481,6 +481,7 @@ and discussions on the V4L mailing list.</revremark>
-     &sub-subdev-enum-frame-interval;
-     &sub-subdev-enum-frame-size;
-     &sub-subdev-enum-mbus-code;
-+    &sub-subdev-g-crop;
-     &sub-subdev-g-fmt;
-     &sub-subdev-g-frame-interval;
-     &sub-subscribe-event;
-diff --git a/Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml b/Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml
-new file mode 100644
-index 0000000..cef127f
---- /dev/null
-+++ b/Documentation/DocBook/v4l/vidioc-subdev-g-crop.xml
-@@ -0,0 +1,149 @@
-+<refentry id="vidioc-subdev-g-crop">
-+  <refmeta>
-+    <refentrytitle>ioctl VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP</refentrytitle>
-+    &manvol;
-+  </refmeta>
-+
-+  <refnamediv>
-+    <refname>VIDIOC_SUBDEV_G_CROP</refname>
-+    <refname>VIDIOC_SUBDEV_S_CROP</refname>
-+    <refpurpose>Get or set the crop rectangle on a subdev pad</refpurpose>
-+  </refnamediv>
-+
-+  <refsynopsisdiv>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>struct v4l2_subdev_crop *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+    <funcsynopsis>
-+      <funcprototype>
-+	<funcdef>int <function>ioctl</function></funcdef>
-+	<paramdef>int <parameter>fd</parameter></paramdef>
-+	<paramdef>int <parameter>request</parameter></paramdef>
-+	<paramdef>const struct v4l2_subdev_crop *<parameter>argp</parameter></paramdef>
-+      </funcprototype>
-+    </funcsynopsis>
-+  </refsynopsisdiv>
-+
-+  <refsect1>
-+    <title>Arguments</title>
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><parameter>fd</parameter></term>
-+	<listitem>
-+	  <para>&fd;</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>request</parameter></term>
-+	<listitem>
-+	  <para>VIDIOC_SUBDEV_G_CROP, VIDIOC_SUBDEV_S_CROP</para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><parameter>argp</parameter></term>
-+	<listitem>
-+	  <para></para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+
-+  <refsect1>
-+    <title>Description</title>
-+
-+    <para>To retrieve the current crop rectangle applications set the
-+    <structfield>pad</structfield> field of a &v4l2-subdev-crop; to the
-+    desired pad number as reported by the media API and the
-+    <structfield>which</structfield> field to
-+    <constant>V4L2_SUBDEV_FORMAT_ACTIVE</constant>. They then call the
-+    <constant>VIDIOC_SUBDEV_G_CROP</constant> ioctl with a pointer to this
-+    structure. The driver fills the members of the <structfield>rect</structfield>
-+    field or returns &EINVAL; if the input arguments are invalid, or if cropping
-+    is not supported on the given pad.</para>
-+
-+    <para>To change the current crop rectangle applications set both the
-+    <structfield>pad</structfield> and <structfield>which</structfield> fields
-+    and all members of the <structfield>rect</structfield> field. They then call
-+    the <constant>VIDIOC_SUBDEV_S_CROP</constant> ioctl with a pointer to this
-+    structure. The driver verifies the requested crop rectangle, adjusts it
-+    based on the hardware capabilities and configures the device. Upon return
-+    the &v4l2-subdev-crop; contains the current format as would be returned
-+    by a <constant>VIDIOC_SUBDEV_G_CROP</constant> call.</para>
-+
-+    <para>Applications can query the device capabilities by setting the
-+    <structfield>which</structfield> to
-+    <constant>V4L2_SUBDEV_FORMAT_TRY</constant>. When set, 'try' crop
-+    rectangles are not applied to the device by the driver, but are mangled
-+    exactly as active crop rectangles and stored in the sub-device file handle.
-+    Two applications querying the same sub-device would thus not interact with
-+    each other.</para>
-+
-+    <para>Drivers must not return an error solely because the requested crop
-+    rectangle doesn't match the device capabilities. They must instead modify
-+    the rectangle to match what the hardware can provide. The modified format
-+    should be as close as possible to the original request.</para>
-+
-+    <table pgwide="1" frame="none" id="v4l2-subdev-crop">
-+      <title>struct <structname>v4l2_subdev_crop</structname></title>
-+      <tgroup cols="3">
-+        &cs-str;
-+	<tbody valign="top">
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>pad</structfield></entry>
-+	    <entry>Pad number as reported by the media framework.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>which</structfield></entry>
-+	    <entry>Crop rectangle to get or set, from
-+	    &v4l2-subdev-format-whence;.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>&v4l2-rect;</entry>
-+	    <entry><structfield>rect</structfield></entry>
-+	    <entry>Crop rectangle boundaries, in pixels.</entry>
-+	  </row>
-+	  <row>
-+	    <entry>__u32</entry>
-+	    <entry><structfield>reserved</structfield>[8]</entry>
-+	    <entry>Reserved for future extensions. Applications and drivers must
-+	    set the array to zero.</entry>
-+	  </row>
-+	</tbody>
-+      </tgroup>
-+    </table>
-+  </refsect1>
-+
-+  <refsect1>
-+    &return-value;
-+
-+    <variablelist>
-+      <varlistentry>
-+	<term><errorcode>EBUSY</errorcode></term>
-+	<listitem>
-+	  <para>The crop rectangle can't be changed because the pad is currently
-+	  busy. This can be caused, for instance, by an active video stream on
-+	  the pad. The ioctl must not be retried without performing another
-+	  action to fix the problem first. Only returned by
-+	  <constant>VIDIOC_SUBDEV_S_CROP</constant></para>
-+	</listitem>
-+      </varlistentry>
-+      <varlistentry>
-+	<term><errorcode>EINVAL</errorcode></term>
-+	<listitem>
-+	  <para>The &v4l2-subdev-crop; <structfield>pad</structfield>
-+	  references a non-existing pad, the <structfield>which</structfield>
-+	  field references a non-existing format, or cropping is not supported
-+	  on the given subdev pad.</para>
-+	</listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsect1>
-+</refentry>
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index 316a08a..e706c4c 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -213,6 +213,32 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 		return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh, format);
- 	}
- 
-+	case VIDIOC_SUBDEV_G_CROP: {
-+		struct v4l2_subdev_crop *crop = arg;
-+
-+		if (crop->which != V4L2_SUBDEV_FORMAT_TRY &&
-+		    crop->which != V4L2_SUBDEV_FORMAT_ACTIVE)
-+			return -EINVAL;
-+
-+		if (crop->pad >= sd->entity.num_pads)
-+			return -EINVAL;
-+
-+		return v4l2_subdev_call(sd, pad, get_crop, subdev_fh, crop);
-+	}
-+
-+	case VIDIOC_SUBDEV_S_CROP: {
-+		struct v4l2_subdev_crop *crop = arg;
-+
-+		if (crop->which != V4L2_SUBDEV_FORMAT_TRY &&
-+		    crop->which != V4L2_SUBDEV_FORMAT_ACTIVE)
-+			return -EINVAL;
-+
-+		if (crop->pad >= sd->entity.num_pads)
-+			return -EINVAL;
-+
-+		return v4l2_subdev_call(sd, pad, set_crop, subdev_fh, crop);
-+	}
-+
- 	case VIDIOC_SUBDEV_ENUM_MBUS_CODE: {
- 		struct v4l2_subdev_mbus_code_enum *code = arg;
- 
-diff --git a/include/linux/v4l2-subdev.h b/include/linux/v4l2-subdev.h
-index bf9f3e9..49ec1e0 100644
---- a/include/linux/v4l2-subdev.h
-+++ b/include/linux/v4l2-subdev.h
-@@ -51,6 +51,19 @@ struct v4l2_subdev_format {
- };
- 
- /**
-+ * struct v4l2_subdev_crop - Pad-level crop settings
-+ * @which: format type (from enum v4l2_subdev_format_whence)
-+ * @pad: pad number, as reported by the media API
-+ * @rect: pad crop rectangle boundaries
-+ */
-+struct v4l2_subdev_crop {
-+	__u32 which;
-+	__u32 pad;
-+	struct v4l2_rect rect;
-+	__u32 reserved[8];
-+};
-+
-+/**
-  * struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
-  * @pad: pad number, as reported by the media API
-  * @index: format index during enumeration
-@@ -122,5 +135,7 @@ struct v4l2_subdev_frame_interval_enum {
- 			_IOWR('V', 74, struct v4l2_subdev_frame_size_enum)
- #define VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
- 			_IOWR('V', 75, struct v4l2_subdev_frame_interval_enum)
-+#define VIDIOC_SUBDEV_G_CROP	_IOWR('V', 59, struct v4l2_subdev_crop)
-+#define VIDIOC_SUBDEV_S_CROP	_IOWR('V', 60, struct v4l2_subdev_crop)
- 
- #endif
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index 9c8bcd3..a02663e 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -442,6 +442,10 @@ struct v4l2_subdev_pad_ops {
- 		       struct v4l2_subdev_format *format);
- 	int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
- 		       struct v4l2_subdev_format *format);
-+	int (*set_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+		       struct v4l2_subdev_crop *crop);
-+	int (*get_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+		       struct v4l2_subdev_crop *crop);
- };
- 
- struct v4l2_subdev_ops {
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0031-v4l-subdev-Generic-ioctl-support.patch b/recipes-kernel/linux/linux-omap/media/0031-v4l-subdev-Generic-ioctl-support.patch
deleted file mode 100644
index d1bac03..0000000
--- a/recipes-kernel/linux/linux-omap/media/0031-v4l-subdev-Generic-ioctl-support.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 3378e81670a983f084f6d8e6be654234b258e482 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Fri, 26 Feb 2010 16:23:10 +0100
-Subject: [PATCH 31/43] v4l: subdev: Generic ioctl support
-
-Instead of returning an error when receiving an ioctl call with an
-unsupported command, forward the call to the subdev core::ioctl handler.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/video4linux/v4l2-framework.txt |    5 +++++
- drivers/media/video/v4l2-subdev.c            |    2 +-
- 2 files changed, 6 insertions(+), 1 deletions(-)
-
-diff --git a/Documentation/video4linux/v4l2-framework.txt b/Documentation/video4linux/v4l2-framework.txt
-index d0fb880..1bb5f22 100644
---- a/Documentation/video4linux/v4l2-framework.txt
-+++ b/Documentation/video4linux/v4l2-framework.txt
-@@ -407,6 +407,11 @@ VIDIOC_UNSUBSCRIBE_EVENT
- 	To properly support events, the poll() file operation is also
- 	implemented.
- 
-+Private ioctls
-+
-+	All ioctls not in the above list are passed directly to the sub-device
-+	driver through the core::ioctl operation.
-+
- 
- I2C sub-device drivers
- ----------------------
-diff --git a/drivers/media/video/v4l2-subdev.c b/drivers/media/video/v4l2-subdev.c
-index e706c4c..1710a64 100644
---- a/drivers/media/video/v4l2-subdev.c
-+++ b/drivers/media/video/v4l2-subdev.c
-@@ -276,7 +276,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
- 	}
- #endif
- 	default:
--		return -ENOIOCTLCMD;
-+		return v4l2_subdev_call(sd, core, ioctl, cmd, arg);
- 	}
- 
- 	return 0;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0032-v4l-Add-subdev-sensor-g_skip_frames-operation.patch b/recipes-kernel/linux/linux-omap/media/0032-v4l-Add-subdev-sensor-g_skip_frames-operation.patch
deleted file mode 100644
index bbfe847..0000000
--- a/recipes-kernel/linux/linux-omap/media/0032-v4l-Add-subdev-sensor-g_skip_frames-operation.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 80c35f54b7d24b5f05e1e510f87e2ad1b94efede Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Tue, 16 Nov 2010 06:21:06 +0200
-Subject: [PATCH 32/43] v4l: Add subdev sensor g_skip_frames operation
-
-Some buggy sensors generate corrupt frames when the stream is started.
-This new operation return the number of corrupt frames to skip when
-starting the stream.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/media/v4l2-subdev.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
-index a02663e..181de59 100644
---- a/include/media/v4l2-subdev.h
-+++ b/include/media/v4l2-subdev.h
-@@ -352,9 +352,13 @@ struct v4l2_subdev_vbi_ops {
-  *		      This is needed for some sensors, which always corrupt
-  *		      several top lines of the output image, or which send their
-  *		      metadata in them.
-+ * @g_skip_frames: number of frames to skip at stream start. This is needed for
-+ *		   buggy sensors that generate faulty frames when they are
-+ *		   turned on.
-  */
- struct v4l2_subdev_sensor_ops {
- 	int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines);
-+	int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames);
- };
- 
- /*
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0033-v4l-Include-linux-videodev2.h-in-media-v4l2-ctrls.h.patch b/recipes-kernel/linux/linux-omap/media/0033-v4l-Include-linux-videodev2.h-in-media-v4l2-ctrls.h.patch
deleted file mode 100644
index 92dfe0d..0000000
--- a/recipes-kernel/linux/linux-omap/media/0033-v4l-Include-linux-videodev2.h-in-media-v4l2-ctrls.h.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 70e40e24f3da31a0c29f6f6042da9a085aa9ba7f Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Fri, 19 Nov 2010 15:20:06 +0100
-Subject: [PATCH 33/43] v4l: Include linux/videodev2.h in media/v4l2-ctrls.h
-
-The later makes extensive use of structures defined in the former.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/media/v4l2-ctrls.h |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
-index 9b7bea9..3b133b7 100644
---- a/include/media/v4l2-ctrls.h
-+++ b/include/media/v4l2-ctrls.h
-@@ -23,6 +23,7 @@
- 
- #include <linux/list.h>
- #include <linux/device.h>
-+#include <linux/videodev2.h>
- 
- /* forward references */
- struct v4l2_ctrl_handler;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0034-v4l-Fix-a-use-before-set-in-the-control-framework.patch b/recipes-kernel/linux/linux-omap/media/0034-v4l-Fix-a-use-before-set-in-the-control-framework.patch
deleted file mode 100644
index adf8b4d..0000000
--- a/recipes-kernel/linux/linux-omap/media/0034-v4l-Fix-a-use-before-set-in-the-control-framework.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From d887b7e4224fa03f080ab6ede038eee8aac4c221 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Tue, 7 Dec 2010 12:57:25 +0100
-Subject: [PATCH 34/43] v4l: Fix a use-before-set in the control framework
-
-v4l2_queryctrl sets the step value based on the control type. That would
-be fine if it used the control type stored in the V4L2 kernel control
-object, not the one stored in the userspace ioctl structure that has
-just been memset to 0. Fix this.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Acked-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/video/v4l2-ctrls.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/media/video/v4l2-ctrls.c b/drivers/media/video/v4l2-ctrls.c
-index 9d2502c..5f74fec 100644
---- a/drivers/media/video/v4l2-ctrls.c
-+++ b/drivers/media/video/v4l2-ctrls.c
-@@ -1338,7 +1338,7 @@ int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
- 	qc->minimum = ctrl->minimum;
- 	qc->maximum = ctrl->maximum;
- 	qc->default_value = ctrl->default_value;
--	if (qc->type == V4L2_CTRL_TYPE_MENU)
-+	if (ctrl->type == V4L2_CTRL_TYPE_MENU)
- 		qc->step = 1;
- 	else
- 		qc->step = ctrl->step;
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0035-v4l-Add-8-bit-YUYV-on-16-bit-bus-and-SGRBG10-media-b.patch b/recipes-kernel/linux/linux-omap/media/0035-v4l-Add-8-bit-YUYV-on-16-bit-bus-and-SGRBG10-media-b.patch
deleted file mode 100644
index 8660a14..0000000
--- a/recipes-kernel/linux/linux-omap/media/0035-v4l-Add-8-bit-YUYV-on-16-bit-bus-and-SGRBG10-media-b.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 4ad2d8ab7eef4bc2a482c228f334cfbf30d71855 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Wed, 1 Sep 2010 17:59:36 +0200
-Subject: [PATCH 35/43] v4l: Add 8-bit YUYV on 16-bit bus and SGRBG10 media bus pixel codes
-
-Add the following media bus format code definitions:
-
-- V4L2_MBUS_FMT_SGRBG10_1X10 for 10-bit GRBG Bayer
-- V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 for 10-bit DPCM compressed GRBG Bayer
-- V4L2_MBUS_FMT_YUYV16_1X16 for 8-bit YUYV on 16-bit bus
-- V4L2_MBUS_FMT_UYVY16_1X16 for 8-bit UYVY on 16-bit bus
-- V4L2_MBUS_FMT_YVYU16_1X16 for 8-bit YVYU on 16-bit bus
-- V4L2_MBUS_FMT_VYUY16_1X16 for 8-bit VYUY on 16-bit bus
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/linux/v4l2-mediabus.h |   10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-index cccfa34..c4caca3 100644
---- a/include/linux/v4l2-mediabus.h
-+++ b/include/linux/v4l2-mediabus.h
-@@ -47,7 +47,7 @@ enum v4l2_mbus_pixelcode {
- 	V4L2_MBUS_FMT_RGB565_2X8_BE = 0x1007,
- 	V4L2_MBUS_FMT_RGB565_2X8_LE = 0x1008,
- 
--	/* YUV (including grey) - next is 0x200f */
-+	/* YUV (including grey) - next is 0x2013 */
- 	V4L2_MBUS_FMT_Y8_1X8 = 0x2001,
- 	V4L2_MBUS_FMT_UYVY8_1_5X8 = 0x2002,
- 	V4L2_MBUS_FMT_VYUY8_1_5X8 = 0x2003,
-@@ -60,17 +60,23 @@ enum v4l2_mbus_pixelcode {
- 	V4L2_MBUS_FMT_Y10_1X10 = 0x200a,
- 	V4L2_MBUS_FMT_YUYV10_2X10 = 0x200b,
- 	V4L2_MBUS_FMT_YVYU10_2X10 = 0x200c,
-+	V4L2_MBUS_FMT_UYVY8_1X16 = 0x200f,
-+	V4L2_MBUS_FMT_VYUY8_1X16 = 0x2010,
-+	V4L2_MBUS_FMT_YUYV8_1X16 = 0x2011,
-+	V4L2_MBUS_FMT_YVYU8_1X16 = 0x2012,
- 	V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d,
- 	V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e,
- 
--	/* Bayer - next is 0x3009 */
-+	/* Bayer - next is 0x300b */
- 	V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001,
- 	V4L2_MBUS_FMT_SGRBG8_1X8 = 0x3002,
-+	V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 = 0x3009,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE = 0x3003,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE = 0x3004,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE = 0x3005,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE = 0x3006,
- 	V4L2_MBUS_FMT_SBGGR10_1X10 = 0x3007,
-+	V4L2_MBUS_FMT_SGRBG10_1X10 = 0x300a,
- 	V4L2_MBUS_FMT_SBGGR12_1X12 = 0x3008,
- };
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0036-v4l-Add-remaining-RAW10-patterns-w-DPCM-pixel-code-v.patch b/recipes-kernel/linux/linux-omap/media/0036-v4l-Add-remaining-RAW10-patterns-w-DPCM-pixel-code-v.patch
deleted file mode 100644
index ec6c332..0000000
--- a/recipes-kernel/linux/linux-omap/media/0036-v4l-Add-remaining-RAW10-patterns-w-DPCM-pixel-code-v.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From a63be84f54298581d51efb8a4745747ca17a9d0d Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Fri, 3 Sep 2010 10:47:25 +0200
-Subject: [PATCH 36/43] v4l: Add remaining RAW10 patterns w DPCM pixel code variants
-
-This adds following formats:
-- V4L2_MBUS_FMT_SRGGB10_1X10
-- V4L2_MBUS_FMT_SGBRG10_1X10
-- V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8
-- V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8
-- V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8
-
-Signed-off-by: Sergio Aguirre <saaguirre at ti.com>
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/linux/v4l2-mediabus.h |    7 ++++++-
- 1 files changed, 6 insertions(+), 1 deletions(-)
-
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-index c4caca3..5c64924 100644
---- a/include/linux/v4l2-mediabus.h
-+++ b/include/linux/v4l2-mediabus.h
-@@ -67,16 +67,21 @@ enum v4l2_mbus_pixelcode {
- 	V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d,
- 	V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e,
- 
--	/* Bayer - next is 0x300b */
-+	/* Bayer - next is 0x3010 */
- 	V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001,
- 	V4L2_MBUS_FMT_SGRBG8_1X8 = 0x3002,
-+	V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8 = 0x300b,
-+	V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8 = 0x300c,
- 	V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 = 0x3009,
-+	V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8 = 0x300d,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_BE = 0x3003,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADHI_LE = 0x3004,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_BE = 0x3005,
- 	V4L2_MBUS_FMT_SBGGR10_2X8_PADLO_LE = 0x3006,
- 	V4L2_MBUS_FMT_SBGGR10_1X10 = 0x3007,
-+	V4L2_MBUS_FMT_SGBRG10_1X10 = 0x300e,
- 	V4L2_MBUS_FMT_SGRBG10_1X10 = 0x300a,
-+	V4L2_MBUS_FMT_SRGGB10_1X10 = 0x300f,
- 	V4L2_MBUS_FMT_SBGGR12_1X12 = 0x3008,
- };
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0037-v4l-Add-missing-12-bits-bayer-media-bus-formats.patch b/recipes-kernel/linux/linux-omap/media/0037-v4l-Add-missing-12-bits-bayer-media-bus-formats.patch
deleted file mode 100644
index 5644da5..0000000
--- a/recipes-kernel/linux/linux-omap/media/0037-v4l-Add-missing-12-bits-bayer-media-bus-formats.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From 6585f70cdd7cbe63e6618d06a10819d31c7009fe Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Thu, 23 Dec 2010 15:14:49 +0100
-Subject: [PATCH 37/43] v4l: Add missing 12 bits bayer media bus formats
-
-Add codes and documentation for the following media bus formats:
-
-- V4L2_MBUS_FMT_SGBRG12_1X12
-- V4L2_MBUS_FMT_SGRBG12_1X12
-- V4L2_MBUS_FMT_SRGGB12_1X12
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- Documentation/DocBook/v4l/subdev-formats.xml |   51 ++++++++++++++++++++++++++
- include/linux/v4l2-mediabus.h                |    5 ++-
- 2 files changed, 55 insertions(+), 1 deletions(-)
-
-diff --git a/Documentation/DocBook/v4l/subdev-formats.xml b/Documentation/DocBook/v4l/subdev-formats.xml
-index 0cae572..2fed9be 100644
---- a/Documentation/DocBook/v4l/subdev-formats.xml
-+++ b/Documentation/DocBook/v4l/subdev-formats.xml
-@@ -490,6 +490,57 @@
- 	      <entry>b<subscript>1</subscript></entry>
- 	      <entry>b<subscript>0</subscript></entry>
- 	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGBRG12-1X12">
-+	      <entry>V4L2_MBUS_FMT_SGBRG12_1X12</entry>
-+	      <entry>0x3010</entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>11</subscript></entry>
-+	      <entry>g<subscript>10</subscript></entry>
-+	      <entry>g<subscript>9</subscript></entry>
-+	      <entry>g<subscript>8</subscript></entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SGRBG12-1X12">
-+	      <entry>V4L2_MBUS_FMT_SGRBG12_1X12</entry>
-+	      <entry>0x3011</entry>
-+	      <entry></entry>
-+	      <entry>g<subscript>11</subscript></entry>
-+	      <entry>g<subscript>10</subscript></entry>
-+	      <entry>g<subscript>9</subscript></entry>
-+	      <entry>g<subscript>8</subscript></entry>
-+	      <entry>g<subscript>7</subscript></entry>
-+	      <entry>g<subscript>6</subscript></entry>
-+	      <entry>g<subscript>5</subscript></entry>
-+	      <entry>g<subscript>4</subscript></entry>
-+	      <entry>g<subscript>3</subscript></entry>
-+	      <entry>g<subscript>2</subscript></entry>
-+	      <entry>g<subscript>1</subscript></entry>
-+	      <entry>g<subscript>0</subscript></entry>
-+	    </row>
-+	    <row id="V4L2-MBUS-FMT-SRGGB12-1X12">
-+	      <entry>V4L2_MBUS_FMT_SRGGB12_1X12</entry>
-+	      <entry>0x3012</entry>
-+	      <entry></entry>
-+	      <entry>r<subscript>11</subscript></entry>
-+	      <entry>r<subscript>10</subscript></entry>
-+	      <entry>r<subscript>9</subscript></entry>
-+	      <entry>r<subscript>8</subscript></entry>
-+	      <entry>r<subscript>7</subscript></entry>
-+	      <entry>r<subscript>6</subscript></entry>
-+	      <entry>r<subscript>5</subscript></entry>
-+	      <entry>r<subscript>4</subscript></entry>
-+	      <entry>r<subscript>3</subscript></entry>
-+	      <entry>r<subscript>2</subscript></entry>
-+	      <entry>r<subscript>1</subscript></entry>
-+	      <entry>r<subscript>0</subscript></entry>
-+	    </row>
- 	    <row id="V4L2-MBUS-FMT-SGBRG10-DPCM8-1X8">
- 	      <entry>V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8</entry>
- 	      <entry>0x300c</entry>
-diff --git a/include/linux/v4l2-mediabus.h b/include/linux/v4l2-mediabus.h
-index 5c64924..7054a7a 100644
---- a/include/linux/v4l2-mediabus.h
-+++ b/include/linux/v4l2-mediabus.h
-@@ -67,7 +67,7 @@ enum v4l2_mbus_pixelcode {
- 	V4L2_MBUS_FMT_YUYV10_1X20 = 0x200d,
- 	V4L2_MBUS_FMT_YVYU10_1X20 = 0x200e,
- 
--	/* Bayer - next is 0x3010 */
-+	/* Bayer - next is 0x3013 */
- 	V4L2_MBUS_FMT_SBGGR8_1X8 = 0x3001,
- 	V4L2_MBUS_FMT_SGRBG8_1X8 = 0x3002,
- 	V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8 = 0x300b,
-@@ -83,6 +83,9 @@ enum v4l2_mbus_pixelcode {
- 	V4L2_MBUS_FMT_SGRBG10_1X10 = 0x300a,
- 	V4L2_MBUS_FMT_SRGGB10_1X10 = 0x300f,
- 	V4L2_MBUS_FMT_SBGGR12_1X12 = 0x3008,
-+	V4L2_MBUS_FMT_SGBRG12_1X12 = 0x3010,
-+	V4L2_MBUS_FMT_SGRBG12_1X12 = 0x3011,
-+	V4L2_MBUS_FMT_SRGGB12_1X12 = 0x3012,
- };
- 
- /**
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0038-v4l-Add-12-bits-bayer-pixel-formats.patch b/recipes-kernel/linux/linux-omap/media/0038-v4l-Add-12-bits-bayer-pixel-formats.patch
deleted file mode 100644
index 9deb0ee..0000000
--- a/recipes-kernel/linux/linux-omap/media/0038-v4l-Add-12-bits-bayer-pixel-formats.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 859b5c38e30c3d41e7987a6bb46f7d062f7e02ad Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Thu, 23 Dec 2010 15:14:50 +0100
-Subject: [PATCH 38/43] v4l: Add 12 bits bayer pixel formats
-
-Add FCCs for the following pixel formats:
-
-- V4L2_PIX_FMT_SBGGR12
-- V4L2_PIX_FMT_SGBRG12
-- V4L2_PIX_FMT_SGRBG12
-- V4L2_PIX_FMT_SRGGB12
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- include/linux/videodev2.h |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
-index 5f6f470..02da9e7 100644
---- a/include/linux/videodev2.h
-+++ b/include/linux/videodev2.h
-@@ -328,6 +328,10 @@ struct v4l2_pix_format {
- #define V4L2_PIX_FMT_SGBRG10 v4l2_fourcc('G', 'B', '1', '0') /* 10  GBGB.. RGRG.. */
- #define V4L2_PIX_FMT_SGRBG10 v4l2_fourcc('B', 'A', '1', '0') /* 10  GRGR.. BGBG.. */
- #define V4L2_PIX_FMT_SRGGB10 v4l2_fourcc('R', 'G', '1', '0') /* 10  RGRG.. GBGB.. */
-+#define V4L2_PIX_FMT_SBGGR12 v4l2_fourcc('B', 'G', '1', '2') /* 12  BGBG.. GRGR.. */
-+#define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12  GBGB.. RGRG.. */
-+#define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12  GRGR.. BGBG.. */
-+#define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
- 	/* 10bit raw bayer DPCM compressed to 8 bits */
- #define V4L2_PIX_FMT_SGRBG10DPCM8 v4l2_fourcc('B', 'D', '1', '0')
- 	/*
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0039-ARM-OMAP3-Update-Camera-ISP-definitions-for-OMAP3630.patch b/recipes-kernel/linux/linux-omap/media/0039-ARM-OMAP3-Update-Camera-ISP-definitions-for-OMAP3630.patch
deleted file mode 100644
index 73f40d7..0000000
--- a/recipes-kernel/linux/linux-omap/media/0039-ARM-OMAP3-Update-Camera-ISP-definitions-for-OMAP3630.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 0fe8d5d2b4d1e48bf2ef9b5803636dc68c91b5f2 Mon Sep 17 00:00:00 2001
-From: Tuukka Toivonen <tuukka.o.toivonen at nokia.com>
-Date: Tue, 2 Feb 2010 16:17:33 +0200
-Subject: [PATCH 39/43] ARM: OMAP3: Update Camera ISP definitions for OMAP3630
-
-Add new/changed base address definitions and resources for
-OMAP3630 ISP.
-
-The OMAP3430 CSI2PHY block is same as the OMAP3630 CSIPHY2
-block. But the later name is chosen as it gives more symmetry
-to the names.
-
-Signed-off-by: Tuukka Toivonen <tuukka.o.toivonen at nokia.com>
-Signed-off-by: Vimarsh Zutshi <vimarsh.zutshi at nokia.com>
-Acked-by: Tony Lindgren <tony at atomide.com>
----
- arch/arm/mach-omap2/devices.c              |   28 ++++++++++++++++++++++++----
- arch/arm/plat-omap/include/plat/omap34xx.h |   16 ++++++++++++----
- 2 files changed, 36 insertions(+), 8 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
-index 381f4eb..40c64b9 100644
---- a/arch/arm/mach-omap2/devices.c
-+++ b/arch/arm/mach-omap2/devices.c
-@@ -109,13 +109,33 @@ static struct resource omap3isp_resources[] = {
- 		.flags		= IORESOURCE_MEM,
- 	},
- 	{
--		.start		= OMAP3430_ISP_CSI2A_BASE,
--		.end		= OMAP3430_ISP_CSI2A_END,
-+		.start		= OMAP3430_ISP_CSI2A_REGS1_BASE,
-+		.end		= OMAP3430_ISP_CSI2A_REGS1_END,
- 		.flags		= IORESOURCE_MEM,
- 	},
- 	{
--		.start		= OMAP3430_ISP_CSI2PHY_BASE,
--		.end		= OMAP3430_ISP_CSI2PHY_END,
-+		.start		= OMAP3430_ISP_CSIPHY2_BASE,
-+		.end		= OMAP3430_ISP_CSIPHY2_END,
-+		.flags		= IORESOURCE_MEM,
-+	},
-+	{
-+		.start		= OMAP3630_ISP_CSI2A_REGS2_BASE,
-+		.end		= OMAP3630_ISP_CSI2A_REGS2_END,
-+		.flags		= IORESOURCE_MEM,
-+	},
-+	{
-+		.start		= OMAP3630_ISP_CSI2C_REGS1_BASE,
-+		.end		= OMAP3630_ISP_CSI2C_REGS1_END,
-+		.flags		= IORESOURCE_MEM,
-+	},
-+	{
-+		.start		= OMAP3630_ISP_CSIPHY1_BASE,
-+		.end		= OMAP3630_ISP_CSIPHY1_END,
-+		.flags		= IORESOURCE_MEM,
-+	},
-+	{
-+		.start		= OMAP3630_ISP_CSI2C_REGS2_BASE,
-+		.end		= OMAP3630_ISP_CSI2C_REGS2_END,
- 		.flags		= IORESOURCE_MEM,
- 	},
- 	{
-diff --git a/arch/arm/plat-omap/include/plat/omap34xx.h b/arch/arm/plat-omap/include/plat/omap34xx.h
-index 98fc8b4..b9e8588 100644
---- a/arch/arm/plat-omap/include/plat/omap34xx.h
-+++ b/arch/arm/plat-omap/include/plat/omap34xx.h
-@@ -56,8 +56,12 @@
- #define OMAP3430_ISP_RESZ_BASE		(OMAP3430_ISP_BASE + 0x1000)
- #define OMAP3430_ISP_SBL_BASE		(OMAP3430_ISP_BASE + 0x1200)
- #define OMAP3430_ISP_MMU_BASE		(OMAP3430_ISP_BASE + 0x1400)
--#define OMAP3430_ISP_CSI2A_BASE		(OMAP3430_ISP_BASE + 0x1800)
--#define OMAP3430_ISP_CSI2PHY_BASE	(OMAP3430_ISP_BASE + 0x1970)
-+#define OMAP3430_ISP_CSI2A_REGS1_BASE	(OMAP3430_ISP_BASE + 0x1800)
-+#define OMAP3430_ISP_CSIPHY2_BASE	(OMAP3430_ISP_BASE + 0x1970)
-+#define OMAP3630_ISP_CSI2A_REGS2_BASE	(OMAP3430_ISP_BASE + 0x19C0)
-+#define OMAP3630_ISP_CSI2C_REGS1_BASE	(OMAP3430_ISP_BASE + 0x1C00)
-+#define OMAP3630_ISP_CSIPHY1_BASE	(OMAP3430_ISP_BASE + 0x1D70)
-+#define OMAP3630_ISP_CSI2C_REGS2_BASE	(OMAP3430_ISP_BASE + 0x1DC0)
- 
- #define OMAP3430_ISP_END		(OMAP3430_ISP_BASE         + 0x06F)
- #define OMAP3430_ISP_CBUFF_END		(OMAP3430_ISP_CBUFF_BASE   + 0x077)
-@@ -69,8 +73,12 @@
- #define OMAP3430_ISP_RESZ_END		(OMAP3430_ISP_RESZ_BASE    + 0x0AB)
- #define OMAP3430_ISP_SBL_END		(OMAP3430_ISP_SBL_BASE     + 0x0FB)
- #define OMAP3430_ISP_MMU_END		(OMAP3430_ISP_MMU_BASE     + 0x06F)
--#define OMAP3430_ISP_CSI2A_END		(OMAP3430_ISP_CSI2A_BASE   + 0x16F)
--#define OMAP3430_ISP_CSI2PHY_END	(OMAP3430_ISP_CSI2PHY_BASE + 0x007)
-+#define OMAP3430_ISP_CSI2A_REGS1_END	(OMAP3430_ISP_CSI2A_REGS1_BASE + 0x16F)
-+#define OMAP3430_ISP_CSIPHY2_END	(OMAP3430_ISP_CSIPHY2_BASE + 0x00B)
-+#define OMAP3630_ISP_CSI2A_REGS2_END	(OMAP3630_ISP_CSI2A_REGS2_BASE + 0x3F)
-+#define OMAP3630_ISP_CSI2C_REGS1_END	(OMAP3630_ISP_CSI2C_REGS1_BASE + 0x16F)
-+#define OMAP3630_ISP_CSIPHY1_END	(OMAP3630_ISP_CSIPHY1_BASE + 0x00B)
-+#define OMAP3630_ISP_CSI2C_REGS2_END	(OMAP3630_ISP_CSI2C_REGS2_BASE + 0x3F)
- 
- #define OMAP34XX_HSUSB_OTG_BASE	(L4_34XX_BASE + 0xAB000)
- #define OMAP34XX_USBTLL_BASE	(L4_34XX_BASE + 0x62000)
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0040-omap3-Remove-unusued-ISP-CBUFF-resource.patch b/recipes-kernel/linux/linux-omap/media/0040-omap3-Remove-unusued-ISP-CBUFF-resource.patch
deleted file mode 100644
index d48e0e6..0000000
--- a/recipes-kernel/linux/linux-omap/media/0040-omap3-Remove-unusued-ISP-CBUFF-resource.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 70b39450b2de8e96504332730c9b00c663cfeaf9 Mon Sep 17 00:00:00 2001
-From: Sergio Aguirre <saaguirre at ti.com>
-Date: Mon, 15 Nov 2010 08:29:56 -0600
-Subject: [PATCH 40/43] omap3: Remove unusued ISP CBUFF resource
-
-The ISP CBUFF module isn't use, its resource isn't needed.
-
-Signed-off-by: Sergio Aguirre <saaguirre at ti.com>
-Acked-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- arch/arm/mach-omap2/devices.c |    5 -----
- 1 files changed, 0 insertions(+), 5 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
-index 40c64b9..60cb86f 100644
---- a/arch/arm/mach-omap2/devices.c
-+++ b/arch/arm/mach-omap2/devices.c
-@@ -69,11 +69,6 @@ static struct resource omap3isp_resources[] = {
- 		.flags		= IORESOURCE_MEM,
- 	},
- 	{
--		.start		= OMAP3430_ISP_CBUFF_BASE,
--		.end		= OMAP3430_ISP_CBUFF_END,
--		.flags		= IORESOURCE_MEM,
--	},
--	{
- 		.start		= OMAP3430_ISP_CCP2_BASE,
- 		.end		= OMAP3430_ISP_CCP2_END,
- 		.flags		= IORESOURCE_MEM,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0041-omap3-Add-function-to-register-omap3isp-platform-dev.patch b/recipes-kernel/linux/linux-omap/media/0041-omap3-Add-function-to-register-omap3isp-platform-dev.patch
deleted file mode 100644
index 8bcbd73..0000000
--- a/recipes-kernel/linux/linux-omap/media/0041-omap3-Add-function-to-register-omap3isp-platform-dev.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From d59f7c080e1c0d35a71f788350b619e76cee5033 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Mon, 14 Dec 2009 13:09:07 +0200
-Subject: [PATCH 41/43] omap3: Add function to register omap3isp platform device structure
-
-The omap3isp platform device requires platform data. Instead of
-registering the device in omap2_init_devices(), export an
-omap3_init_camera() function to fill the device structure with the
-platform data pointer and register the device.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Acked-by: Tony Lindgren <tony at atomide.com>
----
- arch/arm/mach-omap2/devices.c |   20 +++++++++++---------
- arch/arm/mach-omap2/devices.h |   17 +++++++++++++++++
- 2 files changed, 28 insertions(+), 9 deletions(-)
- create mode 100644 arch/arm/mach-omap2/devices.h
-
-diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
-index 60cb86f..9b243be 100644
---- a/arch/arm/mach-omap2/devices.c
-+++ b/arch/arm/mach-omap2/devices.c
-@@ -34,6 +34,8 @@
- #include "mux.h"
- #include "control.h"
- 
-+#include "devices.h"
-+
- #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
- 
- static struct resource cam_resources[] = {
-@@ -59,8 +61,11 @@ static inline void omap_init_camera(void)
- {
- 	platform_device_register(&omap_cam_device);
- }
--
--#elif defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE)
-+#else
-+static inline void omap_init_camera(void)
-+{
-+}
-+#endif
- 
- static struct resource omap3isp_resources[] = {
- 	{
-@@ -146,15 +151,12 @@ static struct platform_device omap3isp_device = {
- 	.resource	= omap3isp_resources,
- };
- 
--static inline void omap_init_camera(void)
--{
--	platform_device_register(&omap3isp_device);
--}
--#else
--static inline void omap_init_camera(void)
-+int omap3_init_camera(void *pdata)
- {
-+	omap3isp_device.dev.platform_data = pdata;
-+	return platform_device_register(&omap3isp_device);
- }
--#endif
-+EXPORT_SYMBOL_GPL(omap3_init_camera);
- 
- #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
- 
-diff --git a/arch/arm/mach-omap2/devices.h b/arch/arm/mach-omap2/devices.h
-new file mode 100644
-index 0000000..12ddb8a
---- /dev/null
-+++ b/arch/arm/mach-omap2/devices.h
-@@ -0,0 +1,17 @@
-+/*
-+ * arch/arm/mach-omap2/devices.h
-+ *
-+ * OMAP2 platform device setup/initialization
-+ *
-+ * 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 __ARCH_ARM_MACH_OMAP_DEVICES_H
-+#define __ARCH_ARM_MACH_OMAP_DEVICES_H
-+
-+int omap3_init_camera(void *pdata);
-+
-+#endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0042-omap2-Fix-camera-resources-for-multiomap.patch b/recipes-kernel/linux/linux-omap/media/0042-omap2-Fix-camera-resources-for-multiomap.patch
deleted file mode 100644
index 273d6d0..0000000
--- a/recipes-kernel/linux/linux-omap/media/0042-omap2-Fix-camera-resources-for-multiomap.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 5cc262328a97b1d048ae42234909ac33c2fc342c Mon Sep 17 00:00:00 2001
-From: Sergio Aguirre <saaguirre at ti.com>
-Date: Mon, 15 Nov 2010 08:29:54 -0600
-Subject: [PATCH 42/43] omap2: Fix camera resources for multiomap
-
-Make sure the kernel can be compiled with both OMAP2 and OMAP3 camera
-support linked in, and give public symbols proper omap2/omap3 prefixes.
-
-Signed-off-by: Sergio Aguirre <saaguirre at ti.com>
-Acked-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
----
- arch/arm/mach-omap2/devices.c |   25 ++++++++++++-------------
- 1 files changed, 12 insertions(+), 13 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
-index 9b243be..c132c65 100644
---- a/arch/arm/mach-omap2/devices.c
-+++ b/arch/arm/mach-omap2/devices.c
-@@ -38,7 +38,7 @@
- 
- #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
- 
--static struct resource cam_resources[] = {
-+static struct resource omap2cam_resources[] = {
- 	{
- 		.start		= OMAP24XX_CAMERA_BASE,
- 		.end		= OMAP24XX_CAMERA_BASE + 0xfff,
-@@ -50,21 +50,12 @@ static struct resource cam_resources[] = {
- 	}
- };
- 
--static struct platform_device omap_cam_device = {
-+static struct platform_device omap2cam_device = {
- 	.name		= "omap24xxcam",
- 	.id		= -1,
--	.num_resources	= ARRAY_SIZE(cam_resources),
--	.resource	= cam_resources,
-+	.num_resources	= ARRAY_SIZE(omap2cam_resources),
-+	.resource	= omap2cam_resources,
- };
--
--static inline void omap_init_camera(void)
--{
--	platform_device_register(&omap_cam_device);
--}
--#else
--static inline void omap_init_camera(void)
--{
--}
- #endif
- 
- static struct resource omap3isp_resources[] = {
-@@ -158,6 +149,14 @@ int omap3_init_camera(void *pdata)
- }
- EXPORT_SYMBOL_GPL(omap3_init_camera);
- 
-+static inline void omap_init_camera(void)
-+{
-+#if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
-+	if (cpu_is_omap24xx())
-+		platform_device_register(&omap2cam_device);
-+#endif
-+}
-+
- #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
- 
- #define MBOX_REG_SIZE   0x120
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/media/0043-OMAP3-ISP-driver.patch b/recipes-kernel/linux/linux-omap/media/0043-OMAP3-ISP-driver.patch
deleted file mode 100644
index b4e9784..0000000
--- a/recipes-kernel/linux/linux-omap/media/0043-OMAP3-ISP-driver.patch
+++ /dev/null
@@ -1,21513 +0,0 @@
-From f12978691d5189949c9296bceb43c5b272c9c03c Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Date: Tue, 17 Feb 2009 09:23:45 -0600
-Subject: [PATCH 43/43] OMAP3 ISP driver
-
-Last 10 commits from upstream are
-
-omap3isp: Autoidle enabled for ISP
-omap3isp: enable AUTOIDLE through module parameter
-omap3isp: preview: Fix defect correct config function
-omap3isp: video: Replace BUG with WARN_ON in case of buffer queue error
-omap3isp: Add module device table
-omap3isp: csi2: Print registers on stream on
-v4l: OMAP3 ISP CCDC: Add support for 8bit greyscale sensors
-omap3isp: ccdc: Set default DC subtract value to 0
-omap3isp: Prefix all public symbols with omap3isp_
-omap3isp: Fix dependencies and mark as experimental
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-Signed-off-by: Sakari Ailus <sakari.ailus at nokia.com>
-Signed-off-by: David Cohen <david.cohen at nokia.com>
-Signed-off-by: Stanimir Varbanov <svarbanov at mm-sol.com>
-Signed-off-by: Vimarsh Zutshi <vimarsh.zutshi at nokia.com>
-Signed-off-by: Tuukka Toivonen <tuukka.o.toivonen at nokia.com>
-Signed-off-by: Sergio Aguirre <saaguirre at ti.com>
-Signed-off-by: Antti Koskipaa <antti.koskipaa at nokia.com>
-Signed-off-by: Ivan T. Ivanov <iivanov at mm-sol.com>
-Signed-off-by: RaniSuneela <r-m at ti.com>
-Signed-off-by: Atanas Filipov <afilipov at mm-sol.com>
-Signed-off-by: Gjorgji Rosikopulos <grosikopulos at mm-sol.com>
-Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU at nokia.com>
-Signed-off-by: Nayden Kanchev <nkanchev at mm-sol.com>
-Signed-off-by: Phil Carmody <ext-phil.2.carmody at nokia.com>
-Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy at nokia.com>
-Signed-off-by: Dominic Curran <dcurran at ti.com>
-Signed-off-by: Ilkka Myllyperkio <ilkka.myllyperkio at sofica.fi>
-Signed-off-by: Pallavi Kulkarni <p-kulkarni at ti.com>
-Signed-off-by: Vaibhav Hiremath <hvaibhav at ti.com>
----
- drivers/media/video/Kconfig                  |   13 +
- drivers/media/video/Makefile                 |    2 +
- drivers/media/video/isp/Makefile             |   13 +
- drivers/media/video/isp/cfa_coef_table.h     |  601 +++++++
- drivers/media/video/isp/gamma_table.h        |   90 +
- drivers/media/video/isp/isp.c                | 2221 +++++++++++++++++++++++++
- drivers/media/video/isp/isp.h                |  427 +++++
- drivers/media/video/isp/ispccdc.c            | 2280 ++++++++++++++++++++++++++
- drivers/media/video/isp/ispccdc.h            |  223 +++
- drivers/media/video/isp/ispccp2.c            | 1189 ++++++++++++++
- drivers/media/video/isp/ispccp2.h            |  101 ++
- drivers/media/video/isp/ispcsi2.c            | 1332 +++++++++++++++
- drivers/media/video/isp/ispcsi2.h            |  169 ++
- drivers/media/video/isp/ispcsiphy.c          |  247 +++
- drivers/media/video/isp/ispcsiphy.h          |   74 +
- drivers/media/video/isp/isph3a.h             |  117 ++
- drivers/media/video/isp/isph3a_aewb.c        |  374 +++++
- drivers/media/video/isp/isph3a_af.c          |  429 +++++
- drivers/media/video/isp/isphist.c            |  520 ++++++
- drivers/media/video/isp/isphist.h            |   40 +
- drivers/media/video/isp/isppreview.c         | 2120 ++++++++++++++++++++++++
- drivers/media/video/isp/isppreview.h         |  214 +++
- drivers/media/video/isp/ispqueue.c           | 1136 +++++++++++++
- drivers/media/video/isp/ispqueue.h           |  185 +++
- drivers/media/video/isp/ispreg.h             | 1589 ++++++++++++++++++
- drivers/media/video/isp/ispresizer.c         | 1710 +++++++++++++++++++
- drivers/media/video/isp/ispresizer.h         |  150 ++
- drivers/media/video/isp/ispstat.c            | 1100 +++++++++++++
- drivers/media/video/isp/ispstat.h            |  169 ++
- drivers/media/video/isp/ispvideo.c           | 1264 ++++++++++++++
- drivers/media/video/isp/ispvideo.h           |  202 +++
- drivers/media/video/isp/luma_enhance_table.h |  154 ++
- drivers/media/video/isp/noise_filter_table.h |   90 +
- include/linux/Kbuild                         |    1 +
- include/linux/omap3isp.h                     |  631 +++++++
- 35 files changed, 21177 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/video/isp/Makefile
- create mode 100644 drivers/media/video/isp/cfa_coef_table.h
- create mode 100644 drivers/media/video/isp/gamma_table.h
- create mode 100644 drivers/media/video/isp/isp.c
- create mode 100644 drivers/media/video/isp/isp.h
- create mode 100644 drivers/media/video/isp/ispccdc.c
- create mode 100644 drivers/media/video/isp/ispccdc.h
- create mode 100644 drivers/media/video/isp/ispccp2.c
- create mode 100644 drivers/media/video/isp/ispccp2.h
- create mode 100644 drivers/media/video/isp/ispcsi2.c
- create mode 100644 drivers/media/video/isp/ispcsi2.h
- create mode 100644 drivers/media/video/isp/ispcsiphy.c
- create mode 100644 drivers/media/video/isp/ispcsiphy.h
- create mode 100644 drivers/media/video/isp/isph3a.h
- create mode 100644 drivers/media/video/isp/isph3a_aewb.c
- create mode 100644 drivers/media/video/isp/isph3a_af.c
- create mode 100644 drivers/media/video/isp/isphist.c
- create mode 100644 drivers/media/video/isp/isphist.h
- create mode 100644 drivers/media/video/isp/isppreview.c
- create mode 100644 drivers/media/video/isp/isppreview.h
- create mode 100644 drivers/media/video/isp/ispqueue.c
- create mode 100644 drivers/media/video/isp/ispqueue.h
- create mode 100644 drivers/media/video/isp/ispreg.h
- create mode 100644 drivers/media/video/isp/ispresizer.c
- create mode 100644 drivers/media/video/isp/ispresizer.h
- create mode 100644 drivers/media/video/isp/ispstat.c
- create mode 100644 drivers/media/video/isp/ispstat.h
- create mode 100644 drivers/media/video/isp/ispvideo.c
- create mode 100644 drivers/media/video/isp/ispvideo.h
- create mode 100644 drivers/media/video/isp/luma_enhance_table.h
- create mode 100644 drivers/media/video/isp/noise_filter_table.h
- create mode 100644 include/linux/omap3isp.h
-
-diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
-index 6830d28..60c2bf0 100644
---- a/drivers/media/video/Kconfig
-+++ b/drivers/media/video/Kconfig
-@@ -722,6 +722,19 @@ config VIDEO_VIA_CAMERA
- 	   Chrome9 chipsets.  Currently only tested on OLPC xo-1.5 systems
- 	   with ov7670 sensors.
- 
-+config VIDEO_OMAP3
-+	tristate "OMAP 3 Camera support (EXPERIMENTAL)"
-+	select OMAP_IOMMU
-+	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API && ARCH_OMAP3 && EXPERIMENTAL
-+	---help---
-+	  Driver for an OMAP 3 camera controller.
-+
-+config VIDEO_OMAP3_DEBUG
-+	bool "OMAP 3 Camera debug messages"
-+	depends on VIDEO_OMAP3
-+	---help---
-+	  Enable debug messages on OMAP 3 camera controller driver.
-+
- config SOC_CAMERA
- 	tristate "SoC camera support"
- 	depends on VIDEO_V4L2 && HAS_DMA && I2C
-diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
-index adc1bd5..bd2f556 100644
---- a/drivers/media/video/Makefile
-+++ b/drivers/media/video/Makefile
-@@ -124,6 +124,8 @@ obj-$(CONFIG_VIDEO_CAFE_CCIC) += cafe_ccic.o
- 
- obj-$(CONFIG_VIDEO_VIA_CAMERA) += via-camera.o
- 
-+obj-$(CONFIG_VIDEO_OMAP3)	+= isp/
-+
- obj-$(CONFIG_USB_DABUSB)        += dabusb.o
- obj-$(CONFIG_USB_SE401)         += se401.o
- obj-$(CONFIG_USB_ZR364XX)       += zr364xx.o
-diff --git a/drivers/media/video/isp/Makefile b/drivers/media/video/isp/Makefile
-new file mode 100644
-index 0000000..b1b3447
---- /dev/null
-+++ b/drivers/media/video/isp/Makefile
-@@ -0,0 +1,13 @@
-+# Makefile for OMAP3 ISP driver
-+
-+ifdef CONFIG_VIDEO_OMAP3_DEBUG
-+EXTRA_CFLAGS += -DDEBUG
-+endif
-+
-+omap3-isp-objs += \
-+	isp.o ispqueue.o ispvideo.o \
-+	ispcsiphy.o ispccp2.o ispcsi2.o \
-+	ispccdc.o isppreview.o ispresizer.o \
-+	ispstat.o isph3a_aewb.o isph3a_af.o isphist.o
-+
-+obj-$(CONFIG_VIDEO_OMAP3) += omap3-isp.o
-diff --git a/drivers/media/video/isp/cfa_coef_table.h b/drivers/media/video/isp/cfa_coef_table.h
-new file mode 100644
-index 0000000..4ec3fff
---- /dev/null
-+++ b/drivers/media/video/isp/cfa_coef_table.h
-@@ -0,0 +1,601 @@
-+/*
-+ * cfa_coef_table.h
-+ *
-+ * TI OMAP3 ISP - CFA coefficients table
-+ *
-+ * Copyright (C) 2009-2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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
-+ */
-+
-+244,
-+0,
-+247,
-+0,
-+12,
-+27,
-+36,
-+247,
-+250,
-+0,
-+27,
-+0,
-+4,
-+250,
-+12,
-+244,
-+248,
-+0,
-+0,
-+0,
-+0,
-+40,
-+0,
-+0,
-+244,
-+12,
-+250,
-+4,
-+0,
-+27,
-+0,
-+250,
-+247,
-+36,
-+27,
-+12,
-+0,
-+247,
-+0,
-+244,
-+0,
-+0,
-+40,
-+0,
-+0,
-+0,
-+0,
-+248,
-+244,
-+0,
-+247,
-+0,
-+12,
-+27,
-+36,
-+247,
-+250,
-+0,
-+27,
-+0,
-+4,
-+250,
-+12,
-+244,
-+248,
-+0,
-+0,
-+0,
-+0,
-+40,
-+0,
-+0,
-+244,
-+12,
-+250,
-+4,
-+0,
-+27,
-+0,
-+250,
-+247,
-+36,
-+27,
-+12,
-+0,
-+247,
-+0,
-+244,
-+0,
-+0,
-+40,
-+0,
-+0,
-+0,
-+0,
-+248,
-+244,
-+0,
-+247,
-+0,
-+12,
-+27,
-+36,
-+247,
-+250,
-+0,
-+27,
-+0,
-+4,
-+250,
-+12,
-+244,
-+248,
-+0,
-+0,
-+0,
-+0,
-+40,
-+0,
-+0,
-+244,
-+12,
-+250,
-+4,
-+0,
-+27,
-+0,
-+250,
-+247,
-+36,
-+27,
-+12,
-+0,
-+247,
-+0,
-+244,
-+0,
-+0,
-+40,
-+0,
-+0,
-+0,
-+0,
-+248,
-+0,
-+247,
-+0,
-+244,
-+247,
-+36,
-+27,
-+12,
-+0,
-+27,
-+0,
-+250,
-+244,
-+12,
-+250,
-+4,
-+0,
-+0,
-+0,
-+248,
-+0,
-+0,
-+40,
-+0,
-+4,
-+250,
-+12,
-+244,
-+250,
-+0,
-+27,
-+0,
-+12,
-+27,
-+36,
-+247,
-+244,
-+0,
-+247,
-+0,
-+0,
-+40,
-+0,
-+0,
-+248,
-+0,
-+0,
-+0,
-+0,
-+247,
-+0,
-+244,
-+247,
-+36,
-+27,
-+12,
-+0,
-+27,
-+0,
-+250,
-+244,
-+12,
-+250,
-+4,
-+0,
-+0,
-+0,
-+248,
-+0,
-+0,
-+40,
-+0,
-+4,
-+250,
-+12,
-+244,
-+250,
-+0,
-+27,
-+0,
-+12,
-+27,
-+36,
-+247,
-+244,
-+0,
-+247,
-+0,
-+0,
-+40,
-+0,
-+0,
-+248,
-+0,
-+0,
-+0,
-+0,
-+247,
-+0,
-+244,
-+247,
-+36,
-+27,
-+12,
-+0,
-+27,
-+0,
-+250,
-+244,
-+12,
-+250,
-+4,
-+0,
-+0,
-+0,
-+248,
-+0,
-+0,
-+40,
-+0,
-+4,
-+250,
-+12,
-+244,
-+250,
-+0,
-+27,
-+0,
-+12,
-+27,
-+36,
-+247,
-+244,
-+0,
-+247,
-+0,
-+0,
-+40,
-+0,
-+0,
-+248,
-+0,
-+0,
-+0,
-+4,
-+250,
-+12,
-+244,
-+250,
-+0,
-+27,
-+0,
-+12,
-+27,
-+36,
-+247,
-+244,
-+0,
-+247,
-+0,
-+0,
-+0,
-+0,
-+248,
-+0,
-+0,
-+40,
-+0,
-+0,
-+247,
-+0,
-+244,
-+247,
-+36,
-+27,
-+12,
-+0,
-+27,
-+0,
-+250,
-+244,
-+12,
-+250,
-+4,
-+0,
-+40,
-+0,
-+0,
-+248,
-+0,
-+0,
-+0,
-+4,
-+250,
-+12,
-+244,
-+250,
-+0,
-+27,
-+0,
-+12,
-+27,
-+36,
-+247,
-+244,
-+0,
-+247,
-+0,
-+0,
-+0,
-+0,
-+248,
-+0,
-+0,
-+40,
-+0,
-+0,
-+247,
-+0,
-+244,
-+247,
-+36,
-+27,
-+12,
-+0,
-+27,
-+0,
-+250,
-+244,
-+12,
-+250,
-+4,
-+0,
-+40,
-+0,
-+0,
-+248,
-+0,
-+0,
-+0,
-+4,
-+250,
-+12,
-+244,
-+250,
-+0,
-+27,
-+0,
-+12,
-+27,
-+36,
-+247,
-+244,
-+0,
-+247,
-+0,
-+0,
-+0,
-+0,
-+248,
-+0,
-+0,
-+40,
-+0,
-+0,
-+247,
-+0,
-+244,
-+247,
-+36,
-+27,
-+12,
-+0,
-+27,
-+0,
-+250,
-+244,
-+12,
-+250,
-+4,
-+0,
-+40,
-+0,
-+0,
-+248,
-+0,
-+0,
-+0,
-+244,
-+12,
-+250,
-+4,
-+0,
-+27,
-+0,
-+250,
-+247,
-+36,
-+27,
-+12,
-+0,
-+247,
-+0,
-+244,
-+248,
-+0,
-+0,
-+0,
-+0,
-+40,
-+0,
-+0,
-+244,
-+0,
-+247,
-+0,
-+12,
-+27,
-+36,
-+247,
-+250,
-+0,
-+27,
-+0,
-+4,
-+250,
-+12,
-+244,
-+0,
-+0,
-+40,
-+0,
-+0,
-+0,
-+0,
-+248,
-+244,
-+12,
-+250,
-+4,
-+0,
-+27,
-+0,
-+250,
-+247,
-+36,
-+27,
-+12,
-+0,
-+247,
-+0,
-+244,
-+248,
-+0,
-+0,
-+0,
-+0,
-+40,
-+0,
-+0,
-+244,
-+0,
-+247,
-+0,
-+12,
-+27,
-+36,
-+247,
-+250,
-+0,
-+27,
-+0,
-+4,
-+250,
-+12,
-+244,
-+0,
-+0,
-+40,
-+0,
-+0,
-+0,
-+0,
-+248,
-+244,
-+12,
-+250,
-+4,
-+0,
-+27,
-+0,
-+250,
-+247,
-+36,
-+27,
-+12,
-+0,
-+247,
-+0,
-+244,
-+248,
-+0,
-+0,
-+0,
-+0,
-+40,
-+0,
-+0,
-+244,
-+0,
-+247,
-+0,
-+12,
-+27,
-+36,
-+247,
-+250,
-+0,
-+27,
-+0,
-+4,
-+250,
-+12,
-+244,
-+0,
-+0,
-+40,
-+0,
-+0,
-+0,
-+0,
-+248
-diff --git a/drivers/media/video/isp/gamma_table.h b/drivers/media/video/isp/gamma_table.h
-new file mode 100644
-index 0000000..c2f7ec1
---- /dev/null
-+++ b/drivers/media/video/isp/gamma_table.h
-@@ -0,0 +1,90 @@
-+/*
-+ * gamma_table.h
-+ *
-+ * TI OMAP3 ISP - Default gamma table for all components
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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
-+ */
-+
-+  0,   0,   1,   2,   3,   3,   4,   5,   6,   8,  10,  12,  14,  16,  18,  20,
-+ 22,  23,  25,  26,  28,  29,  31,  32,  34,  35,  36,  37,  39,  40,  41,  42,
-+ 43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  52,  53,  54,  55,  56,  57,
-+ 58,  59,  60,  61,  62,  63,  63,  64,  65,  66,  66,  67,  68,  69,  69,  70,
-+ 71,  72,  72,  73,  74,  75,  75,  76,  77,  78,  78,  79,  80,  81,  81,  82,
-+ 83,  84,  84,  85,  86,  87,  88,  88,  89,  90,  91,  91,  92,  93,  94,  94,
-+ 95,  96,  97,  97,  98,  98,  99,  99, 100, 100, 101, 101, 102, 103, 104, 104,
-+105, 106, 107, 108, 108, 109, 110, 111, 111, 112, 113, 114, 114, 115, 116, 117,
-+117, 118, 119, 119, 120, 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125,
-+126, 126, 127, 127, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133,
-+134, 134, 135, 135, 136, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141,
-+142, 142, 143, 143, 144, 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149,
-+150, 150, 151, 151, 152, 152, 153, 153, 153, 153, 154, 154, 154, 154, 155, 155,
-+156, 156, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 162,
-+162, 163, 163, 164, 164, 164, 164, 165, 165, 165, 165, 166, 166, 167, 167, 168,
-+168, 169, 169, 170, 170, 170, 170, 171, 171, 171, 171, 172, 172, 173, 173, 174,
-+174, 175, 175, 176, 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, 178, 179,
-+179, 179, 179, 180, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182, 182, 183,
-+183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 185, 186, 186, 186, 186, 187,
-+187, 187, 187, 188, 188, 188, 188, 189, 189, 189, 189, 190, 190, 190, 190, 191,
-+191, 191, 191, 192, 192, 192, 192, 193, 193, 193, 193, 194, 194, 194, 194, 195,
-+195, 195, 195, 196, 196, 196, 196, 197, 197, 197, 197, 198, 198, 198, 198, 199,
-+199, 199, 199, 200, 200, 200, 200, 201, 201, 201, 201, 202, 202, 202, 203, 203,
-+203, 203, 204, 204, 204, 204, 205, 205, 205, 205, 206, 206, 206, 206, 207, 207,
-+207, 207, 208, 208, 208, 208, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210,
-+210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
-+211, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
-+213, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
-+216, 216, 216, 216, 217, 217, 217, 217, 218, 218, 218, 218, 219, 219, 219, 219,
-+219, 219, 219, 219, 219, 219, 219, 219, 220, 220, 220, 220, 221, 221, 221, 221,
-+221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 223, 223, 223, 223, 223,
-+223, 223, 223, 223, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 225, 225,
-+225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 226, 226,
-+226, 226, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, 228,
-+228, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230,
-+230, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 232, 232, 232,
-+232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
-+233, 233, 233, 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 235,
-+235, 235, 235, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
-+236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238,
-+238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
-+238, 238, 238, 238, 238, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240,
-+240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
-+240, 240, 240, 240, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 242, 242,
-+242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
-+242, 242, 243, 243, 243, 243, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
-+244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
-+244, 245, 245, 245, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
-+246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
-+246, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 248, 248, 248, 248, 248,
-+248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
-+248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250,
-+250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
-+250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
-+250, 250, 250, 250, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 252, 252,
-+252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
-+252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
-+252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
-+252, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 253,
-+253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
-+253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
-+253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
-+253, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-+255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-diff --git a/drivers/media/video/isp/isp.c b/drivers/media/video/isp/isp.c
-new file mode 100644
-index 0000000..6f8527c
---- /dev/null
-+++ b/drivers/media/video/isp/isp.c
-@@ -0,0 +1,2221 @@
-+/*
-+ * isp.c
-+ *
-+ * TI OMAP3 ISP - Core
-+ *
-+ * Copyright (C) 2006-2010 Nokia Corporation
-+ * Copyright (C) 2007-2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.nokia.com>
-+ *
-+ * Contributors:
-+ *	Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	Sakari Ailus <sakari.ailus at nokia.com>
-+ *	David Cohen <david.cohen at nokia.com>
-+ *	Stanimir Varbanov <svarbanov at mm-sol.com>
-+ *	Vimarsh Zutshi <vimarsh.zutshi at nokia.com>
-+ *	Tuukka Toivonen <tuukka.o.toivonen at nokia.com>
-+ *	Sergio Aguirre <saaguirre at ti.com>
-+ *	Antti Koskipaa <antti.koskipaa at nokia.com>
-+ *	Ivan T. Ivanov <iivanov at mm-sol.com>
-+ *	RaniSuneela <r-m at ti.com>
-+ *	Atanas Filipov <afilipov at mm-sol.com>
-+ *	Gjorgji Rosikopulos <grosikopulos at mm-sol.com>
-+ *	Hiroshi DOYU <hiroshi.doyu at nokia.com>
-+ *	Nayden Kanchev <nkanchev at mm-sol.com>
-+ *	Phil Carmody <ext-phil.2.carmody at nokia.com>
-+ *	Artem Bityutskiy <artem.bityutskiy at nokia.com>
-+ *	Dominic Curran <dcurran at ti.com>
-+ *	Ilkka Myllyperkio <ilkka.myllyperkio at sofica.fi>
-+ *	Pallavi Kulkarni <p-kulkarni at ti.com>
-+ *	Vaibhav Hiremath <hvaibhav at ti.com>
-+ *	Mohit Jalori <mjalori at ti.com>
-+ *	Sameer Venkatraman <sameerv at ti.com>
-+ *	Senthilvadivu Guruswamy <svadivu at ti.com>
-+ *	Thara Gopinath <thara at ti.com>
-+ *	Toni Leinonen <toni.leinonen at nokia.com>
-+ *	Troy Laramy <t-laramy at ti.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 <asm/cacheflush.h>
-+
-+#include <linux/clk.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/i2c.h>
-+#include <linux/interrupt.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/regulator/consumer.h>
-+#include <linux/slab.h>
-+#include <linux/sched.h>
-+#include <linux/vmalloc.h>
-+
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-device.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "ispccdc.h"
-+#include "isppreview.h"
-+#include "ispresizer.h"
-+#include "ispcsi2.h"
-+#include "ispccp2.h"
-+#include "isph3a.h"
-+#include "isphist.h"
-+
-+static unsigned int autoidle;
-+module_param(autoidle, int, 0444);
-+MODULE_PARM_DESC(autoidle, "Enable OMAP3ISP AUTOIDLE support");
-+
-+static void isp_save_ctx(struct isp_device *isp);
-+
-+static void isp_restore_ctx(struct isp_device *isp);
-+
-+static const struct isp_res_mapping isp_res_maps[] = {
-+	{
-+		.isp_rev = ISP_REVISION_2_0,
-+		.map = 1 << OMAP3_ISP_IOMEM_MAIN |
-+		       1 << OMAP3_ISP_IOMEM_CCP2 |
-+		       1 << OMAP3_ISP_IOMEM_CCDC |
-+		       1 << OMAP3_ISP_IOMEM_HIST |
-+		       1 << OMAP3_ISP_IOMEM_H3A |
-+		       1 << OMAP3_ISP_IOMEM_PREV |
-+		       1 << OMAP3_ISP_IOMEM_RESZ |
-+		       1 << OMAP3_ISP_IOMEM_SBL |
-+		       1 << OMAP3_ISP_IOMEM_CSI2A_REGS1 |
-+		       1 << OMAP3_ISP_IOMEM_CSIPHY2,
-+	},
-+	{
-+		.isp_rev = ISP_REVISION_15_0,
-+		.map = 1 << OMAP3_ISP_IOMEM_MAIN |
-+		       1 << OMAP3_ISP_IOMEM_CCP2 |
-+		       1 << OMAP3_ISP_IOMEM_CCDC |
-+		       1 << OMAP3_ISP_IOMEM_HIST |
-+		       1 << OMAP3_ISP_IOMEM_H3A |
-+		       1 << OMAP3_ISP_IOMEM_PREV |
-+		       1 << OMAP3_ISP_IOMEM_RESZ |
-+		       1 << OMAP3_ISP_IOMEM_SBL |
-+		       1 << OMAP3_ISP_IOMEM_CSI2A_REGS1 |
-+		       1 << OMAP3_ISP_IOMEM_CSIPHY2 |
-+		       1 << OMAP3_ISP_IOMEM_CSI2A_REGS2 |
-+		       1 << OMAP3_ISP_IOMEM_CSI2C_REGS1 |
-+		       1 << OMAP3_ISP_IOMEM_CSIPHY1 |
-+		       1 << OMAP3_ISP_IOMEM_CSI2C_REGS2,
-+	},
-+};
-+
-+/* Structure for saving/restoring ISP module registers */
-+static struct isp_reg isp_reg_list[] = {
-+	{OMAP3_ISP_IOMEM_MAIN, ISP_SYSCONFIG, 0},
-+	{OMAP3_ISP_IOMEM_MAIN, ISP_CTRL, 0},
-+	{OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, 0},
-+	{0, ISP_TOK_TERM, 0}
-+};
-+
-+/*
-+ * omap3isp_flush - Post pending L3 bus writes by doing a register readback
-+ * @isp: OMAP3 ISP device
-+ *
-+ * In order to force posting of pending writes, we need to write and
-+ * readback the same register, in this case the revision register.
-+ *
-+ * See this link for reference:
-+ *   http://www.mail-archive.com/linux-omap@vger.kernel.org/msg08149.html
-+ */
-+void omap3isp_flush(struct isp_device *isp)
-+{
-+	isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION);
-+	isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION);
-+}
-+
-+/*
-+ * isp_enable_interrupts - Enable ISP interrupts.
-+ * @isp: OMAP3 ISP device
-+ */
-+static void isp_enable_interrupts(struct isp_device *isp)
-+{
-+	static const u32 irq = IRQ0ENABLE_CSIA_IRQ
-+			     | IRQ0ENABLE_CSIB_IRQ
-+			     | IRQ0ENABLE_CCDC_LSC_PREF_ERR_IRQ
-+			     | IRQ0ENABLE_CCDC_LSC_DONE_IRQ
-+			     | IRQ0ENABLE_CCDC_VD0_IRQ
-+			     | IRQ0ENABLE_CCDC_VD1_IRQ
-+			     | IRQ0ENABLE_HS_VS_IRQ
-+			     | IRQ0ENABLE_HIST_DONE_IRQ
-+			     | IRQ0ENABLE_H3A_AWB_DONE_IRQ
-+			     | IRQ0ENABLE_H3A_AF_DONE_IRQ
-+			     | IRQ0ENABLE_PRV_DONE_IRQ
-+			     | IRQ0ENABLE_RSZ_DONE_IRQ;
-+
-+	isp_reg_writel(isp, irq, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0STATUS);
-+	isp_reg_writel(isp, irq, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE);
-+}
-+
-+/*
-+ * isp_disable_interrupts - Disable ISP interrupts.
-+ * @isp: OMAP3 ISP device
-+ */
-+static void isp_disable_interrupts(struct isp_device *isp)
-+{
-+	isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE);
-+}
-+
-+/**
-+ * isp_set_xclk - Configures the specified cam_xclk to the desired frequency.
-+ * @isp: OMAP3 ISP device
-+ * @xclk: Desired frequency of the clock in Hz. 0 = stable low, 1 is stable high
-+ * @xclksel: XCLK to configure (0 = A, 1 = B).
-+ *
-+ * Configures the specified MCLK divisor in the ISP timing control register
-+ * (TCTRL_CTRL) to generate the desired xclk clock value.
-+ *
-+ * Divisor = cam_mclk_hz / xclk
-+ *
-+ * Returns the final frequency that is actually being generated
-+ **/
-+static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel)
-+{
-+	u32 divisor;
-+	u32 currentxclk;
-+	unsigned long mclk_hz;
-+
-+	if (!omap3isp_get(isp))
-+		return 0;
-+
-+	mclk_hz = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]);
-+
-+	if (xclk >= mclk_hz) {
-+		divisor = ISPTCTRL_CTRL_DIV_BYPASS;
-+		currentxclk = mclk_hz;
-+	} else if (xclk >= 2) {
-+		divisor = mclk_hz / xclk;
-+		if (divisor >= ISPTCTRL_CTRL_DIV_BYPASS)
-+			divisor = ISPTCTRL_CTRL_DIV_BYPASS - 1;
-+		currentxclk = mclk_hz / divisor;
-+	} else {
-+		divisor = xclk;
-+		currentxclk = 0;
-+	}
-+
-+	switch (xclksel) {
-+	case 0:
-+		isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
-+				ISPTCTRL_CTRL_DIVA_MASK,
-+				divisor << ISPTCTRL_CTRL_DIVA_SHIFT);
-+		dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n",
-+			currentxclk);
-+		break;
-+	case 1:
-+		isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
-+				ISPTCTRL_CTRL_DIVB_MASK,
-+				divisor << ISPTCTRL_CTRL_DIVB_SHIFT);
-+		dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n",
-+			currentxclk);
-+		break;
-+	default:
-+		omap3isp_put(isp);
-+		dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested "
-+			"xclk. Must be 0 (A) or 1 (B).\n");
-+		return -EINVAL;
-+	}
-+
-+	/* Do we go from stable whatever to clock? */
-+	if (divisor >= 2 && isp->xclk_divisor[xclksel] < 2)
-+		omap3isp_get(isp);
-+	/* Stopping the clock. */
-+	else if (divisor < 2 && isp->xclk_divisor[xclksel] >= 2)
-+		omap3isp_put(isp);
-+
-+	isp->xclk_divisor[xclksel] = divisor;
-+
-+	omap3isp_put(isp);
-+
-+	return currentxclk;
-+}
-+
-+/*
-+ * isp_power_settings - Sysconfig settings, for Power Management.
-+ * @isp: OMAP3 ISP device
-+ * @idle: Consider idle state.
-+ *
-+ * Sets the power settings for the ISP, and SBL bus.
-+ */
-+static void isp_power_settings(struct isp_device *isp, int idle)
-+{
-+	isp_reg_writel(isp,
-+		       ((idle ? ISP_SYSCONFIG_MIDLEMODE_SMARTSTANDBY :
-+				ISP_SYSCONFIG_MIDLEMODE_FORCESTANDBY) <<
-+			ISP_SYSCONFIG_MIDLEMODE_SHIFT) |
-+			((isp->revision == ISP_REVISION_15_0) ?
-+                          ISP_SYSCONFIG_AUTOIDLE : 0),
-+		       OMAP3_ISP_IOMEM_MAIN, ISP_SYSCONFIG);
-+
-+	if (isp->autoidle)
-+		isp_reg_writel(isp, ISPCTRL_SBL_AUTOIDLE, OMAP3_ISP_IOMEM_MAIN,
-+			       ISP_CTRL);
-+}
-+
-+/*
-+ * Configure the bridge and lane shifter. Valid inputs are
-+ *
-+ * CCDC_INPUT_PARALLEL: Parallel interface
-+ * CCDC_INPUT_CSI2A: CSI2a receiver
-+ * CCDC_INPUT_CCP2B: CCP2b receiver
-+ * CCDC_INPUT_CSI2C: CSI2c receiver
-+ *
-+ * The bridge and lane shifter are configured according to the selected input
-+ * and the ISP platform data.
-+ */
-+void omap3isp_configure_bridge(struct isp_device *isp,
-+			       enum ccdc_input_entity input,
-+			       const struct isp_parallel_platform_data *pdata)
-+{
-+	u32 ispctrl_val;
-+
-+	ispctrl_val  = isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL);
-+	ispctrl_val &= ~ISPCTRL_SHIFT_MASK;
-+	ispctrl_val &= ~ISPCTRL_PAR_CLK_POL_INV;
-+	ispctrl_val &= ~ISPCTRL_PAR_SER_CLK_SEL_MASK;
-+	ispctrl_val &= ~ISPCTRL_PAR_BRIDGE_MASK;
-+
-+	switch (input) {
-+	case CCDC_INPUT_PARALLEL:
-+		ispctrl_val |= ISPCTRL_PAR_SER_CLK_SEL_PARALLEL;
-+		ispctrl_val |= pdata->data_lane_shift << ISPCTRL_SHIFT_SHIFT;
-+		ispctrl_val |= pdata->clk_pol << ISPCTRL_PAR_CLK_POL_SHIFT;
-+		ispctrl_val |= pdata->bridge << ISPCTRL_PAR_BRIDGE_SHIFT;
-+		break;
-+
-+	case CCDC_INPUT_CSI2A:
-+		ispctrl_val |= ISPCTRL_PAR_SER_CLK_SEL_CSIA;
-+		break;
-+
-+	case CCDC_INPUT_CCP2B:
-+		ispctrl_val |= ISPCTRL_PAR_SER_CLK_SEL_CSIB;
-+		break;
-+
-+	case CCDC_INPUT_CSI2C:
-+		ispctrl_val |= ISPCTRL_PAR_SER_CLK_SEL_CSIC;
-+		break;
-+
-+	default:
-+		return;
-+	}
-+
-+	ispctrl_val &= ~ISPCTRL_SYNC_DETECT_MASK;
-+	ispctrl_val |= ISPCTRL_SYNC_DETECT_VSRISE;
-+
-+	isp_reg_writel(isp, ispctrl_val, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL);
-+}
-+
-+/**
-+ * isp_set_pixel_clock - Configures the ISP pixel clock
-+ * @isp: OMAP3 ISP device
-+ * @pixelclk: Average pixel clock in Hz
-+ *
-+ * Set the average pixel clock required by the sensor. The ISP will use the
-+ * lowest possible memory bandwidth settings compatible with the clock.
-+ **/
-+static void isp_set_pixel_clock(struct isp_device *isp, unsigned int pixelclk)
-+{
-+	isp->isp_ccdc.vpcfg.pixelclk = pixelclk;
-+}
-+
-+void omap3isp_hist_dma_done(struct isp_device *isp)
-+{
-+	if (omap3isp_ccdc_busy(&isp->isp_ccdc) ||
-+	    omap3isp_stat_pcr_busy(&isp->isp_hist)) {
-+		/* Histogram cannot be enabled in this frame anymore */
-+		atomic_set(&isp->isp_hist.buf_err, 1);
-+		dev_dbg(isp->dev, "hist: Out of synchronization with "
-+				  "CCDC. Ignoring next buffer.\n");
-+	}
-+}
-+
-+static inline void isp_isr_dbg(struct isp_device *isp, u32 irqstatus)
-+{
-+	static const char *name[] = {
-+		"CSIA_IRQ",
-+		"res1",
-+		"res2",
-+		"CSIB_LCM_IRQ",
-+		"CSIB_IRQ",
-+		"res5",
-+		"res6",
-+		"res7",
-+		"CCDC_VD0_IRQ",
-+		"CCDC_VD1_IRQ",
-+		"CCDC_VD2_IRQ",
-+		"CCDC_ERR_IRQ",
-+		"H3A_AF_DONE_IRQ",
-+		"H3A_AWB_DONE_IRQ",
-+		"res14",
-+		"res15",
-+		"HIST_DONE_IRQ",
-+		"CCDC_LSC_DONE",
-+		"CCDC_LSC_PREFETCH_COMPLETED",
-+		"CCDC_LSC_PREFETCH_ERROR",
-+		"PRV_DONE_IRQ",
-+		"CBUFF_IRQ",
-+		"res22",
-+		"res23",
-+		"RSZ_DONE_IRQ",
-+		"OVF_IRQ",
-+		"res26",
-+		"res27",
-+		"MMU_ERR_IRQ",
-+		"OCP_ERR_IRQ",
-+		"SEC_ERR_IRQ",
-+		"HS_VS_IRQ",
-+	};
-+	int i;
-+
-+	dev_dbg(isp->dev, "");
-+
-+	for (i = 0; i < ARRAY_SIZE(name); i++) {
-+		if ((1 << i) & irqstatus)
-+			printk(KERN_CONT "%s ", name[i]);
-+	}
-+	printk(KERN_CONT "\n");
-+}
-+
-+static void isp_isr_sbl(struct isp_device *isp)
-+{
-+	struct device *dev = isp->dev;
-+	u32 sbl_pcr;
-+
-+	/*
-+	 * Handle shared buffer logic overflows for video buffers.
-+	 * ISPSBL_PCR_CCDCPRV_2_RSZ_OVF can be safely ignored.
-+	 */
-+	sbl_pcr = isp_reg_readl(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_PCR);
-+	isp_reg_writel(isp, sbl_pcr, OMAP3_ISP_IOMEM_SBL, ISPSBL_PCR);
-+	sbl_pcr &= ~ISPSBL_PCR_CCDCPRV_2_RSZ_OVF;
-+
-+	if (sbl_pcr)
-+		dev_dbg(dev, "SBL overflow (PCR = 0x%08x)\n", sbl_pcr);
-+
-+	if (sbl_pcr & (ISPSBL_PCR_CCDC_WBL_OVF | ISPSBL_PCR_CSIA_WBL_OVF
-+		     | ISPSBL_PCR_CSIB_WBL_OVF)) {
-+		isp->isp_ccdc.error = 1;
-+		if (isp->isp_ccdc.output & CCDC_OUTPUT_PREVIEW)
-+			isp->isp_prev.error = 1;
-+		if (isp->isp_ccdc.output & CCDC_OUTPUT_RESIZER)
-+			isp->isp_res.error = 1;
-+	}
-+
-+	if (sbl_pcr & ISPSBL_PCR_PRV_WBL_OVF) {
-+		isp->isp_prev.error = 1;
-+		if (isp->isp_res.input == RESIZER_INPUT_VP &&
-+		    !(isp->isp_ccdc.output & CCDC_OUTPUT_RESIZER))
-+			isp->isp_res.error = 1;
-+	}
-+
-+	if (sbl_pcr & (ISPSBL_PCR_RSZ1_WBL_OVF
-+		       | ISPSBL_PCR_RSZ2_WBL_OVF
-+		       | ISPSBL_PCR_RSZ3_WBL_OVF
-+		       | ISPSBL_PCR_RSZ4_WBL_OVF))
-+		isp->isp_res.error = 1;
-+
-+	if (sbl_pcr & ISPSBL_PCR_H3A_AF_WBL_OVF)
-+		omap3isp_stat_sbl_overflow(&isp->isp_af);
-+
-+	if (sbl_pcr & ISPSBL_PCR_H3A_AEAWB_WBL_OVF)
-+		omap3isp_stat_sbl_overflow(&isp->isp_aewb);
-+}
-+
-+/*
-+ * isp_isr - Interrupt Service Routine for Camera ISP module.
-+ * @irq: Not used currently.
-+ * @_isp: Pointer to the OMAP3 ISP device
-+ *
-+ * Handles the corresponding callback if plugged in.
-+ *
-+ * Returns IRQ_HANDLED when IRQ was correctly handled, or IRQ_NONE when the
-+ * IRQ wasn't handled.
-+ */
-+static irqreturn_t isp_isr(int irq, void *_isp)
-+{
-+	static const u32 ccdc_events = IRQ0STATUS_CCDC_LSC_PREF_ERR_IRQ |
-+				       IRQ0STATUS_CCDC_LSC_DONE_IRQ |
-+				       IRQ0STATUS_CCDC_VD0_IRQ |
-+				       IRQ0STATUS_CCDC_VD1_IRQ |
-+				       IRQ0STATUS_HS_VS_IRQ;
-+	struct isp_device *isp = _isp;
-+	u32 irqstatus;
-+	int ret;
-+
-+	irqstatus = isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0STATUS);
-+	isp_reg_writel(isp, irqstatus, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0STATUS);
-+
-+	isp_isr_sbl(isp);
-+
-+	if (irqstatus & IRQ0STATUS_CSIA_IRQ) {
-+		ret = omap3isp_csi2_isr(&isp->isp_csi2a);
-+		if (ret)
-+			isp->isp_ccdc.error = 1;
-+	}
-+
-+	if (irqstatus & IRQ0STATUS_CSIB_IRQ) {
-+		ret = omap3isp_ccp2_isr(&isp->isp_ccp2);
-+		if (ret)
-+			isp->isp_ccdc.error = 1;
-+	}
-+
-+	if (irqstatus & IRQ0STATUS_CCDC_VD0_IRQ) {
-+		if (isp->isp_ccdc.output & CCDC_OUTPUT_PREVIEW)
-+			omap3isp_preview_isr_frame_sync(&isp->isp_prev);
-+		if (isp->isp_ccdc.output & CCDC_OUTPUT_RESIZER)
-+			omap3isp_resizer_isr_frame_sync(&isp->isp_res);
-+		omap3isp_stat_isr_frame_sync(&isp->isp_aewb);
-+		omap3isp_stat_isr_frame_sync(&isp->isp_af);
-+		omap3isp_stat_isr_frame_sync(&isp->isp_hist);
-+	}
-+
-+	if (irqstatus & ccdc_events)
-+		omap3isp_ccdc_isr(&isp->isp_ccdc, irqstatus & ccdc_events);
-+
-+	if (irqstatus & IRQ0STATUS_PRV_DONE_IRQ) {
-+		if (isp->isp_prev.output & PREVIEW_OUTPUT_RESIZER)
-+			omap3isp_resizer_isr_frame_sync(&isp->isp_res);
-+		omap3isp_preview_isr(&isp->isp_prev);
-+	}
-+
-+	if (irqstatus & IRQ0STATUS_RSZ_DONE_IRQ)
-+		omap3isp_resizer_isr(&isp->isp_res);
-+
-+	if (irqstatus & IRQ0STATUS_H3A_AWB_DONE_IRQ)
-+		omap3isp_stat_isr(&isp->isp_aewb);
-+
-+	if (irqstatus & IRQ0STATUS_H3A_AF_DONE_IRQ)
-+		omap3isp_stat_isr(&isp->isp_af);
-+
-+	if (irqstatus & IRQ0STATUS_HIST_DONE_IRQ)
-+		omap3isp_stat_isr(&isp->isp_hist);
-+
-+	omap3isp_flush(isp);
-+
-+#if defined(DEBUG) && defined(ISP_ISR_DEBUG)
-+	isp_isr_dbg(isp, irqstatus);
-+#endif
-+
-+	return IRQ_HANDLED;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Pipeline power management
-+ *
-+ * Entities must be powered up when part of a pipeline that contains at least
-+ * one open video device node.
-+ *
-+ * To achieve this use the entity use_count field to track the number of users.
-+ * For entities corresponding to video device nodes the use_count field stores
-+ * the users count of the node. For entities corresponding to subdevs the
-+ * use_count field stores the total number of users of all video device nodes
-+ * in the pipeline.
-+ *
-+ * The omap3isp_pipeline_pm_use() function must be called in the open() and
-+ * close() handlers of video device nodes. It increments or decrements the use
-+ * count of all subdev entities in the pipeline.
-+ *
-+ * To react to link management on powered pipelines, the link setup notification
-+ * callback updates the use count of all entities in the source and sink sides
-+ * of the link.
-+ */
-+
-+/*
-+ * isp_pipeline_pm_use_count - Count the number of users of a pipeline
-+ * @entity: The entity
-+ *
-+ * Return the total number of users of all video device nodes in the pipeline.
-+ */
-+static int isp_pipeline_pm_use_count(struct media_entity *entity)
-+{
-+	struct media_entity_graph graph;
-+	int use = 0;
-+
-+	media_entity_graph_walk_start(&graph, entity);
-+
-+	while ((entity = media_entity_graph_walk_next(&graph))) {
-+		if (media_entity_type(entity) == MEDIA_ENT_T_DEVNODE)
-+			use += entity->use_count;
-+	}
-+
-+	return use;
-+}
-+
-+/*
-+ * isp_pipeline_pm_power_one - Apply power change to an entity
-+ * @entity: The entity
-+ * @change: Use count change
-+ *
-+ * Change the entity use count by @change. If the entity is a subdev update its
-+ * power state by calling the core::s_power operation when the use count goes
-+ * from 0 to != 0 or from != 0 to 0.
-+ *
-+ * Return 0 on success or a negative error code on failure.
-+ */
-+static int isp_pipeline_pm_power_one(struct media_entity *entity, int change)
-+{
-+	struct v4l2_subdev *subdev;
-+	int ret;
-+
-+	subdev = media_entity_type(entity) == MEDIA_ENT_T_V4L2_SUBDEV
-+	       ? media_entity_to_v4l2_subdev(entity) : NULL;
-+
-+	if (entity->use_count == 0 && change > 0 && subdev != NULL) {
-+		ret = v4l2_subdev_call(subdev, core, s_power, 1);
-+		if (ret < 0 && ret != -ENOIOCTLCMD)
-+			return ret;
-+	}
-+
-+	entity->use_count += change;
-+	WARN_ON(entity->use_count < 0);
-+
-+	if (entity->use_count == 0 && change < 0 && subdev != NULL)
-+		v4l2_subdev_call(subdev, core, s_power, 0);
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_pipeline_pm_power - Apply power change to all entities in a pipeline
-+ * @entity: The entity
-+ * @change: Use count change
-+ *
-+ * Walk the pipeline to update the use count and the power state of all non-node
-+ * entities.
-+ *
-+ * Return 0 on success or a negative error code on failure.
-+ */
-+static int isp_pipeline_pm_power(struct media_entity *entity, int change)
-+{
-+	struct media_entity_graph graph;
-+	struct media_entity *first = entity;
-+	int ret = 0;
-+
-+	if (!change)
-+		return 0;
-+
-+	media_entity_graph_walk_start(&graph, entity);
-+
-+	while (!ret && (entity = media_entity_graph_walk_next(&graph)))
-+		if (media_entity_type(entity) != MEDIA_ENT_T_DEVNODE)
-+			ret = isp_pipeline_pm_power_one(entity, change);
-+
-+	if (!ret)
-+		return 0;
-+
-+	media_entity_graph_walk_start(&graph, first);
-+
-+	while ((first = media_entity_graph_walk_next(&graph))
-+	       && first != entity)
-+		if (media_entity_type(first) != MEDIA_ENT_T_DEVNODE)
-+			isp_pipeline_pm_power_one(first, -change);
-+
-+	return ret;
-+}
-+
-+/*
-+ * omap3isp_pipeline_pm_use - Update the use count of an entity
-+ * @entity: The entity
-+ * @use: Use (1) or stop using (0) the entity
-+ *
-+ * Update the use count of all entities in the pipeline and power entities on or
-+ * off accordingly.
-+ *
-+ * Return 0 on success or a negative error code on failure. Powering entities
-+ * off is assumed to never fail. No failure can occur when the use parameter is
-+ * set to 0.
-+ */
-+int omap3isp_pipeline_pm_use(struct media_entity *entity, int use)
-+{
-+	int change = use ? 1 : -1;
-+	int ret;
-+
-+	mutex_lock(&entity->parent->graph_mutex);
-+
-+	/* Apply use count to node. */
-+	entity->use_count += change;
-+	WARN_ON(entity->use_count < 0);
-+
-+	/* Apply power change to connected non-nodes. */
-+	ret = isp_pipeline_pm_power(entity, change);
-+
-+	mutex_unlock(&entity->parent->graph_mutex);
-+
-+	return ret;
-+}
-+
-+/*
-+ * isp_pipeline_link_notify - Link management notification callback
-+ * @source: Pad at the start of the link
-+ * @sink: Pad at the end of the link
-+ * @flags: New link flags that will be applied
-+ *
-+ * React to link management on powered pipelines by updating the use count of
-+ * all entities in the source and sink sides of the link. Entities are powered
-+ * on or off accordingly.
-+ *
-+ * Return 0 on success or a negative error code on failure. Powering entities
-+ * off is assumed to never fail. This function will not fail for disconnection
-+ * events.
-+ */
-+static int isp_pipeline_link_notify(struct media_pad *source,
-+				    struct media_pad *sink, u32 flags)
-+{
-+	int source_use = isp_pipeline_pm_use_count(source->entity);
-+	int sink_use = isp_pipeline_pm_use_count(sink->entity);
-+	int ret;
-+
-+	if (!(flags & MEDIA_LNK_FL_ENABLED)) {
-+		/* Powering off entities is assumed to never fail. */
-+		isp_pipeline_pm_power(source->entity, -sink_use);
-+		isp_pipeline_pm_power(sink->entity, -source_use);
-+		return 0;
-+	}
-+
-+	ret = isp_pipeline_pm_power(source->entity, sink_use);
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = isp_pipeline_pm_power(sink->entity, source_use);
-+	if (ret < 0)
-+		isp_pipeline_pm_power(source->entity, -sink_use);
-+
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Pipeline stream management
-+ */
-+
-+/*
-+ * isp_pipeline_enable - Enable streaming on a pipeline
-+ * @pipe: ISP pipeline
-+ * @mode: Stream mode (single shot or continuous)
-+ *
-+ * Walk the entities chain starting at the pipeline output video node and start
-+ * all modules in the chain in the given mode.
-+ *
-+ * Return 0 if successfull, or the return value of the failed video::s_stream
-+ * operation otherwise.
-+ */
-+static int isp_pipeline_enable(struct isp_pipeline *pipe,
-+			       enum isp_pipeline_stream_state mode)
-+{
-+	struct isp_device *isp = pipe->output->isp;
-+	struct media_entity *entity;
-+	struct media_pad *pad;
-+	struct v4l2_subdev *subdev;
-+	unsigned long flags;
-+	int ret = 0;
-+
-+	spin_lock_irqsave(&pipe->lock, flags);
-+	pipe->state &= ~(ISP_PIPELINE_IDLE_INPUT | ISP_PIPELINE_IDLE_OUTPUT);
-+	spin_unlock_irqrestore(&pipe->lock, flags);
-+
-+	pipe->do_propagation = false;
-+
-+	entity = &pipe->output->video.entity;
-+	while (1) {
-+		pad = &entity->pads[0];
-+		if (!(pad->flags & MEDIA_PAD_FL_INPUT))
-+			break;
-+
-+		pad = media_entity_remote_source(pad);
-+		if (pad == NULL ||
-+		    media_entity_type(pad->entity) !=
-+				MEDIA_ENT_T_V4L2_SUBDEV)
-+			break;
-+
-+		entity = pad->entity;
-+		subdev = media_entity_to_v4l2_subdev(entity);
-+
-+		ret = v4l2_subdev_call(subdev, video, s_stream, mode);
-+		if (ret < 0 && ret != -ENOIOCTLCMD)
-+			break;
-+
-+		if (subdev == &isp->isp_ccdc.subdev) {
-+			v4l2_subdev_call(&isp->isp_aewb.subdev, video,
-+					s_stream, mode);
-+			v4l2_subdev_call(&isp->isp_af.subdev, video,
-+					s_stream, mode);
-+			v4l2_subdev_call(&isp->isp_hist.subdev, video,
-+					s_stream, mode);
-+			pipe->do_propagation = true;
-+		}
-+	}
-+
-+	/* Frame number propagation. In continuous streaming mode the number
-+	 * is incremented in the frame start ISR. In mem-to-mem mode
-+	 * singleshot is used and frame start IRQs are not available.
-+	 * Thus we have to increment the number here.
-+	 */
-+	if (pipe->do_propagation && mode == ISP_PIPELINE_STREAM_SINGLESHOT)
-+		atomic_inc(&pipe->frame_number);
-+
-+	return ret;
-+}
-+
-+static int isp_pipeline_wait_resizer(struct isp_device *isp)
-+{
-+	return omap3isp_resizer_busy(&isp->isp_res);
-+}
-+
-+static int isp_pipeline_wait_preview(struct isp_device *isp)
-+{
-+	return omap3isp_preview_busy(&isp->isp_prev);
-+}
-+
-+static int isp_pipeline_wait_ccdc(struct isp_device *isp)
-+{
-+	return omap3isp_stat_busy(&isp->isp_af)
-+	    || omap3isp_stat_busy(&isp->isp_aewb)
-+	    || omap3isp_stat_busy(&isp->isp_hist)
-+	    || omap3isp_ccdc_busy(&isp->isp_ccdc);
-+}
-+
-+#define ISP_STOP_TIMEOUT	msecs_to_jiffies(1000)
-+
-+static int isp_pipeline_wait(struct isp_device *isp,
-+			     int(*busy)(struct isp_device *isp))
-+{
-+	unsigned long timeout = jiffies + ISP_STOP_TIMEOUT;
-+
-+	while (!time_after(jiffies, timeout)) {
-+		if (!busy(isp))
-+			return 0;
-+	}
-+
-+	return 1;
-+}
-+
-+/*
-+ * isp_pipeline_disable - Disable streaming on a pipeline
-+ * @pipe: ISP pipeline
-+ *
-+ * Walk the entities chain starting at the pipeline output video node and stop
-+ * all modules in the chain. Wait synchronously for the modules to be stopped if
-+ * necessary.
-+ *
-+ * Return 0 if all modules have been properly stopped, or -ETIMEDOUT if a module
-+ * can't be stopped (in which case a software reset of the ISP is probably
-+ * necessary).
-+ */
-+static int isp_pipeline_disable(struct isp_pipeline *pipe)
-+{
-+	struct isp_device *isp = pipe->output->isp;
-+	struct media_entity *entity;
-+	struct media_pad *pad;
-+	struct v4l2_subdev *subdev;
-+	int failure = 0;
-+	int ret;
-+
-+	/*
-+	 * We need to stop all the modules after CCDC first or they'll
-+	 * never stop since they may not get a full frame from CCDC.
-+	 */
-+	entity = &pipe->output->video.entity;
-+	while (1) {
-+		pad = &entity->pads[0];
-+		if (!(pad->flags & MEDIA_PAD_FL_INPUT))
-+			break;
-+
-+		pad = media_entity_remote_source(pad);
-+		if (pad == NULL ||
-+		    media_entity_type(pad->entity) !=
-+				MEDIA_ENT_T_V4L2_SUBDEV)
-+			break;
-+
-+		entity = pad->entity;
-+		subdev = media_entity_to_v4l2_subdev(entity);
-+
-+		if (subdev == &isp->isp_ccdc.subdev) {
-+			v4l2_subdev_call(&isp->isp_aewb.subdev,
-+					 video, s_stream, 0);
-+			v4l2_subdev_call(&isp->isp_af.subdev,
-+					 video, s_stream, 0);
-+			v4l2_subdev_call(&isp->isp_hist.subdev,
-+					 video, s_stream, 0);
-+		}
-+
-+		v4l2_subdev_call(subdev, video, s_stream, 0);
-+
-+		if (subdev == &isp->isp_res.subdev) {
-+			ret = isp_pipeline_wait(isp, isp_pipeline_wait_resizer);
-+		} else if (subdev == &isp->isp_prev.subdev) {
-+			ret = isp_pipeline_wait(isp, isp_pipeline_wait_preview);
-+		} else if (subdev == &isp->isp_ccdc.subdev) {
-+			ret = isp_pipeline_wait(isp, isp_pipeline_wait_ccdc);
-+		} else {
-+			ret = 0;
-+		}
-+
-+		if (ret) {
-+			dev_info(isp->dev, "Unable to stop %s\n", subdev->name);
-+			failure = -ETIMEDOUT;
-+		}
-+	}
-+
-+	return failure;
-+}
-+
-+/*
-+ * omap3isp_pipeline_set_stream - Enable/disable streaming on a pipeline
-+ * @pipe: ISP pipeline
-+ * @state: Stream state (stopped, single shot or continuous)
-+ *
-+ * Set the pipeline to the given stream state. Pipelines can be started in
-+ * single-shot or continuous mode.
-+ *
-+ * Return 0 if successfull, or the return value of the failed video::s_stream
-+ * operation otherwise.
-+ */
-+int omap3isp_pipeline_set_stream(struct isp_pipeline *pipe,
-+				 enum isp_pipeline_stream_state state)
-+{
-+	int ret;
-+
-+	if (state == ISP_PIPELINE_STREAM_STOPPED)
-+		ret = isp_pipeline_disable(pipe);
-+	else
-+		ret = isp_pipeline_enable(pipe, state);
-+	pipe->stream_state = state;
-+
-+	return ret;
-+}
-+
-+/*
-+ * isp_pipeline_resume - Resume streaming on a pipeline
-+ * @pipe: ISP pipeline
-+ *
-+ * Resume video output and input and re-enable pipeline.
-+ */
-+static void isp_pipeline_resume(struct isp_pipeline *pipe)
-+{
-+	int singleshot = pipe->stream_state == ISP_PIPELINE_STREAM_SINGLESHOT;
-+
-+	omap3isp_video_resume(pipe->output, !singleshot);
-+	if (singleshot)
-+		omap3isp_video_resume(pipe->input, 0);
-+	isp_pipeline_enable(pipe, pipe->stream_state);
-+}
-+
-+/*
-+ * isp_pipeline_suspend - Suspend streaming on a pipeline
-+ * @pipe: ISP pipeline
-+ *
-+ * Suspend pipeline.
-+ */
-+static void isp_pipeline_suspend(struct isp_pipeline *pipe)
-+{
-+	isp_pipeline_disable(pipe);
-+}
-+
-+/*
-+ * isp_pipeline_is_last - Verify if entity has an enbled link to the output
-+ * 			  video node
-+ * @me: ISP module's media entity
-+ *
-+ * Returns 1 if the entity has an enabled link to the output video node or 0
-+ * otherwise. It's true only while pipeline can have no more than one output
-+ * node.
-+ */
-+static int isp_pipeline_is_last(struct media_entity *me)
-+{
-+	struct isp_pipeline *pipe;
-+	struct media_pad *pad;
-+
-+	if (!me->pipe)
-+		return 0;
-+	pipe = to_isp_pipeline(me);
-+	if (pipe->stream_state == ISP_PIPELINE_STREAM_STOPPED)
-+		return 0;
-+	pad = media_entity_remote_source(&pipe->output->pad);
-+	return pad->entity == me;
-+}
-+
-+/*
-+ * isp_suspend_module_pipeline - Suspend pipeline to which belongs the module
-+ * @me: ISP module's media entity
-+ *
-+ * Suspend the whole pipeline if module's entity has an enabled link to the
-+ * output video node. It works only while pipeline can have no more than one
-+ * output node.
-+ */
-+static void isp_suspend_module_pipeline(struct media_entity *me)
-+{
-+	if (isp_pipeline_is_last(me))
-+		isp_pipeline_suspend(to_isp_pipeline(me));
-+}
-+
-+/*
-+ * isp_resume_module_pipeline - Resume pipeline to which belongs the module
-+ * @me: ISP module's media entity
-+ *
-+ * Resume the whole pipeline if module's entity has an enabled link to the
-+ * output video node. It works only while pipeline can have no more than one
-+ * output node.
-+ */
-+static void isp_resume_module_pipeline(struct media_entity *me)
-+{
-+	if (isp_pipeline_is_last(me))
-+		isp_pipeline_resume(to_isp_pipeline(me));
-+}
-+
-+/*
-+ * isp_suspend_modules - Suspend ISP submodules.
-+ * @isp: OMAP3 ISP device
-+ *
-+ * Returns 0 if suspend left in idle state all the submodules properly,
-+ * or returns 1 if a general Reset is required to suspend the submodules.
-+ */
-+static int isp_suspend_modules(struct isp_device *isp)
-+{
-+	unsigned long timeout;
-+
-+	omap3isp_stat_suspend(&isp->isp_aewb);
-+	omap3isp_stat_suspend(&isp->isp_af);
-+	omap3isp_stat_suspend(&isp->isp_hist);
-+	isp_suspend_module_pipeline(&isp->isp_res.subdev.entity);
-+	isp_suspend_module_pipeline(&isp->isp_prev.subdev.entity);
-+	isp_suspend_module_pipeline(&isp->isp_ccdc.subdev.entity);
-+	isp_suspend_module_pipeline(&isp->isp_csi2a.subdev.entity);
-+	isp_suspend_module_pipeline(&isp->isp_ccp2.subdev.entity);
-+
-+	timeout = jiffies + ISP_STOP_TIMEOUT;
-+	while (omap3isp_stat_busy(&isp->isp_af)
-+	    || omap3isp_stat_busy(&isp->isp_aewb)
-+	    || omap3isp_stat_busy(&isp->isp_hist)
-+	    || omap3isp_preview_busy(&isp->isp_prev)
-+	    || omap3isp_resizer_busy(&isp->isp_res)
-+	    || omap3isp_ccdc_busy(&isp->isp_ccdc)) {
-+		if (time_after(jiffies, timeout)) {
-+			dev_info(isp->dev, "can't stop modules.\n");
-+			return 1;
-+		}
-+		msleep(1);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_resume_modules - Resume ISP submodules.
-+ * @isp: OMAP3 ISP device
-+ */
-+static void isp_resume_modules(struct isp_device *isp)
-+{
-+	omap3isp_stat_resume(&isp->isp_aewb);
-+	omap3isp_stat_resume(&isp->isp_af);
-+	omap3isp_stat_resume(&isp->isp_hist);
-+	isp_resume_module_pipeline(&isp->isp_res.subdev.entity);
-+	isp_resume_module_pipeline(&isp->isp_prev.subdev.entity);
-+	isp_resume_module_pipeline(&isp->isp_ccdc.subdev.entity);
-+	isp_resume_module_pipeline(&isp->isp_csi2a.subdev.entity);
-+	isp_resume_module_pipeline(&isp->isp_ccp2.subdev.entity);
-+}
-+
-+/*
-+ * isp_reset - Reset ISP with a timeout wait for idle.
-+ * @isp: OMAP3 ISP device
-+ */
-+static int isp_reset(struct isp_device *isp)
-+{
-+	unsigned long timeout = 0;
-+
-+	isp_reg_writel(isp,
-+		       isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_SYSCONFIG)
-+		       | ISP_SYSCONFIG_SOFTRESET,
-+		       OMAP3_ISP_IOMEM_MAIN, ISP_SYSCONFIG);
-+	while (!(isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN,
-+			       ISP_SYSSTATUS) & 0x1)) {
-+		if (timeout++ > 10000) {
-+			dev_alert(isp->dev, "cannot reset ISP\n");
-+			return -ETIMEDOUT;
-+		}
-+		udelay(1);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_save_context - Saves the values of the ISP module registers.
-+ * @isp: OMAP3 ISP device
-+ * @reg_list: Structure containing pairs of register address and value to
-+ *            modify on OMAP.
-+ */
-+static void
-+isp_save_context(struct isp_device *isp, struct isp_reg *reg_list)
-+{
-+	struct isp_reg *next = reg_list;
-+
-+	for (; next->reg != ISP_TOK_TERM; next++)
-+		next->val = isp_reg_readl(isp, next->mmio_range, next->reg);
-+}
-+
-+/*
-+ * isp_restore_context - Restores the values of the ISP module registers.
-+ * @isp: OMAP3 ISP device
-+ * @reg_list: Structure containing pairs of register address and value to
-+ *            modify on OMAP.
-+ */
-+static void
-+isp_restore_context(struct isp_device *isp, struct isp_reg *reg_list)
-+{
-+	struct isp_reg *next = reg_list;
-+
-+	for (; next->reg != ISP_TOK_TERM; next++)
-+		isp_reg_writel(isp, next->val, next->mmio_range, next->reg);
-+}
-+
-+/*
-+ * isp_save_ctx - Saves ISP, CCDC, HIST, H3A, PREV, RESZ & MMU context.
-+ * @isp: OMAP3 ISP device
-+ *
-+ * Routine for saving the context of each module in the ISP.
-+ * CCDC, HIST, H3A, PREV, RESZ and MMU.
-+ */
-+static void isp_save_ctx(struct isp_device *isp)
-+{
-+	isp_save_context(isp, isp_reg_list);
-+	if (isp->iommu)
-+		iommu_save_ctx(isp->iommu);
-+}
-+
-+/*
-+ * isp_restore_ctx - Restores ISP, CCDC, HIST, H3A, PREV, RESZ & MMU context.
-+ * @isp: OMAP3 ISP device
-+ *
-+ * Routine for restoring the context of each module in the ISP.
-+ * CCDC, HIST, H3A, PREV, RESZ and MMU.
-+ */
-+static void isp_restore_ctx(struct isp_device *isp)
-+{
-+	isp_restore_context(isp, isp_reg_list);
-+	if (isp->iommu)
-+		iommu_restore_ctx(isp->iommu);
-+	omap3isp_ccdc_restore_context(isp);
-+	omap3isp_preview_restore_context(isp);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * SBL resources management
-+ */
-+#define OMAP3_ISP_SBL_READ	(OMAP3_ISP_SBL_CSI1_READ | \
-+				 OMAP3_ISP_SBL_CCDC_LSC_READ | \
-+				 OMAP3_ISP_SBL_PREVIEW_READ | \
-+				 OMAP3_ISP_SBL_RESIZER_READ)
-+#define OMAP3_ISP_SBL_WRITE	(OMAP3_ISP_SBL_CSI1_WRITE | \
-+				 OMAP3_ISP_SBL_CSI2A_WRITE | \
-+				 OMAP3_ISP_SBL_CSI2C_WRITE | \
-+				 OMAP3_ISP_SBL_CCDC_WRITE | \
-+				 OMAP3_ISP_SBL_PREVIEW_WRITE)
-+
-+void omap3isp_sbl_enable(struct isp_device *isp, enum isp_sbl_resource res)
-+{
-+	u32 sbl = 0;
-+
-+	isp->sbl_resources |= res;
-+
-+	if (isp->sbl_resources & OMAP3_ISP_SBL_CSI1_READ)
-+		sbl |= ISPCTRL_SBL_SHARED_RPORTA;
-+
-+	if (isp->sbl_resources & OMAP3_ISP_SBL_CCDC_LSC_READ)
-+		sbl |= ISPCTRL_SBL_SHARED_RPORTB;
-+
-+	if (isp->sbl_resources & OMAP3_ISP_SBL_CSI2C_WRITE)
-+		sbl |= ISPCTRL_SBL_SHARED_WPORTC;
-+
-+	if (isp->sbl_resources & OMAP3_ISP_SBL_RESIZER_WRITE)
-+		sbl |= ISPCTRL_SBL_WR0_RAM_EN;
-+
-+	if (isp->sbl_resources & OMAP3_ISP_SBL_WRITE)
-+		sbl |= ISPCTRL_SBL_WR1_RAM_EN;
-+
-+	if (isp->sbl_resources & OMAP3_ISP_SBL_READ)
-+		sbl |= ISPCTRL_SBL_RD_RAM_EN;
-+
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL, sbl);
-+}
-+
-+void omap3isp_sbl_disable(struct isp_device *isp, enum isp_sbl_resource res)
-+{
-+	u32 sbl = 0;
-+
-+	isp->sbl_resources &= ~res;
-+
-+	if (!(isp->sbl_resources & OMAP3_ISP_SBL_CSI1_READ))
-+		sbl |= ISPCTRL_SBL_SHARED_RPORTA;
-+
-+	if (!(isp->sbl_resources & OMAP3_ISP_SBL_CCDC_LSC_READ))
-+		sbl |= ISPCTRL_SBL_SHARED_RPORTB;
-+
-+	if (!(isp->sbl_resources & OMAP3_ISP_SBL_CSI2C_WRITE))
-+		sbl |= ISPCTRL_SBL_SHARED_WPORTC;
-+
-+	if (!(isp->sbl_resources & OMAP3_ISP_SBL_RESIZER_WRITE))
-+		sbl |= ISPCTRL_SBL_WR0_RAM_EN;
-+
-+	if (!(isp->sbl_resources & OMAP3_ISP_SBL_WRITE))
-+		sbl |= ISPCTRL_SBL_WR1_RAM_EN;
-+
-+	if (!(isp->sbl_resources & OMAP3_ISP_SBL_READ))
-+		sbl |= ISPCTRL_SBL_RD_RAM_EN;
-+
-+	isp_reg_clr(isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL, sbl);
-+}
-+
-+/*
-+ * isp_module_sync_idle - Helper to sync module with its idle state
-+ * @me: ISP submodule's media entity
-+ * @wait: ISP submodule's wait queue for streamoff/interrupt synchronization
-+ * @stopping: flag which tells module wants to stop
-+ *
-+ * This function checks if ISP submodule needs to wait for next interrupt. If
-+ * yes, makes the caller to sleep while waiting for such event.
-+ */
-+int omap3isp_module_sync_idle(struct media_entity *me, wait_queue_head_t *wait,
-+			      atomic_t *stopping)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(me);
-+
-+	if (pipe->stream_state == ISP_PIPELINE_STREAM_STOPPED ||
-+	    (pipe->stream_state == ISP_PIPELINE_STREAM_SINGLESHOT &&
-+	     !isp_pipeline_ready(pipe)))
-+		return 0;
-+
-+	/*
-+	 * atomic_set() doesn't include memory barrier on ARM platform for SMP
-+	 * scenario. We'll call it here to avoid race conditions.
-+	 */
-+	atomic_set(stopping, 1);
-+	smp_mb();
-+
-+	/*
-+	 * If module is the last one, it's writing to memory. In this case,
-+	 * it's necessary to check if the module is already paused due to
-+	 * DMA queue underrun or if it has to wait for next interrupt to be
-+	 * idle.
-+	 * If it isn't the last one, the function won't sleep but *stopping
-+	 * will still be set to warn next submodule caller's interrupt the
-+	 * module wants to be idle.
-+	 */
-+	if (isp_pipeline_is_last(me)) {
-+		struct isp_video *video = pipe->output;
-+		unsigned long flags;
-+		spin_lock_irqsave(&video->queue->irqlock, flags);
-+		if (video->dmaqueue_flags & ISP_VIDEO_DMAQUEUE_UNDERRUN) {
-+			spin_unlock_irqrestore(&video->queue->irqlock, flags);
-+			atomic_set(stopping, 0);
-+			smp_mb();
-+			return 0;
-+		}
-+		spin_unlock_irqrestore(&video->queue->irqlock, flags);
-+		if (!wait_event_timeout(*wait, !atomic_read(stopping),
-+					msecs_to_jiffies(1000))) {
-+			atomic_set(stopping, 0);
-+			smp_mb();
-+			return -ETIMEDOUT;
-+		}
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * omap3isp_module_sync_is_stopped - Helper to verify if module was stopping
-+ * @wait: ISP submodule's wait queue for streamoff/interrupt synchronization
-+ * @stopping: flag which tells module wants to stop
-+ *
-+ * This function checks if ISP submodule was stopping. In case of yes, it
-+ * notices the caller by setting stopping to 0 and waking up the wait queue.
-+ * Returns 1 if it was stopping or 0 otherwise.
-+ */
-+int omap3isp_module_sync_is_stopping(wait_queue_head_t *wait,
-+				     atomic_t *stopping)
-+{
-+	if (atomic_cmpxchg(stopping, 1, 0)) {
-+		wake_up(wait);
-+		return 1;
-+	}
-+
-+	return 0;
-+}
-+
-+/* --------------------------------------------------------------------------
-+ * Clock management
-+ */
-+
-+#define ISPCTRL_CLKS_MASK	(ISPCTRL_H3A_CLK_EN | \
-+				 ISPCTRL_HIST_CLK_EN | \
-+				 ISPCTRL_RSZ_CLK_EN | \
-+				 (ISPCTRL_CCDC_CLK_EN | ISPCTRL_CCDC_RAM_EN) | \
-+				 (ISPCTRL_PREV_CLK_EN | ISPCTRL_PREV_RAM_EN))
-+
-+static void __isp_subclk_update(struct isp_device *isp)
-+{
-+	u32 clk = 0;
-+
-+	if (isp->subclk_resources & OMAP3_ISP_SUBCLK_H3A)
-+		clk |= ISPCTRL_H3A_CLK_EN;
-+
-+	if (isp->subclk_resources & OMAP3_ISP_SUBCLK_HIST)
-+		clk |= ISPCTRL_HIST_CLK_EN;
-+
-+	if (isp->subclk_resources & OMAP3_ISP_SUBCLK_RESIZER)
-+		clk |= ISPCTRL_RSZ_CLK_EN;
-+
-+	/* NOTE: For CCDC & Preview submodules, we need to affect internal
-+	 *       RAM aswell.
-+	 */
-+	if (isp->subclk_resources & OMAP3_ISP_SUBCLK_CCDC)
-+		clk |= ISPCTRL_CCDC_CLK_EN | ISPCTRL_CCDC_RAM_EN;
-+
-+	if (isp->subclk_resources & OMAP3_ISP_SUBCLK_PREVIEW)
-+		clk |= ISPCTRL_PREV_CLK_EN | ISPCTRL_PREV_RAM_EN;
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+			ISPCTRL_CLKS_MASK, clk);
-+}
-+
-+void omap3isp_subclk_enable(struct isp_device *isp,
-+			    enum isp_subclk_resource res)
-+{
-+	isp->subclk_resources |= res;
-+
-+	__isp_subclk_update(isp);
-+}
-+
-+void omap3isp_subclk_disable(struct isp_device *isp,
-+			     enum isp_subclk_resource res)
-+{
-+	isp->subclk_resources &= ~res;
-+
-+	__isp_subclk_update(isp);
-+}
-+
-+/*
-+ * isp_enable_clocks - Enable ISP clocks
-+ * @isp: OMAP3 ISP device
-+ *
-+ * Return 0 if successful, or clk_enable return value if any of tthem fails.
-+ */
-+static int isp_enable_clocks(struct isp_device *isp)
-+{
-+	int r;
-+	unsigned long rate;
-+	int divisor;
-+
-+	/*
-+	 * cam_mclk clock chain:
-+	 *   dpll4 -> dpll4_m5 -> dpll4_m5x2 -> cam_mclk
-+	 *
-+	 * In OMAP3630 dpll4_m5x2 != 2 x dpll4_m5 but both are
-+	 * set to the same value. Hence the rate set for dpll4_m5
-+	 * has to be twice of what is set on OMAP3430 to get
-+	 * the required value for cam_mclk
-+	 */
-+	if (cpu_is_omap3630())
-+		divisor = 1;
-+	else
-+		divisor = 2;
-+
-+	r = clk_enable(isp->clock[ISP_CLK_CAM_ICK]);
-+	if (r) {
-+		dev_err(isp->dev, "clk_enable cam_ick failed\n");
-+		goto out_clk_enable_ick;
-+	}
-+	r = clk_set_rate(isp->clock[ISP_CLK_DPLL4_M5_CK],
-+			 CM_CAM_MCLK_HZ/divisor);
-+	if (r) {
-+		dev_err(isp->dev, "clk_set_rate for dpll4_m5_ck failed\n");
-+		goto out_clk_enable_mclk;
-+	}
-+	r = clk_enable(isp->clock[ISP_CLK_CAM_MCLK]);
-+	if (r) {
-+		dev_err(isp->dev, "clk_enable cam_mclk failed\n");
-+		goto out_clk_enable_mclk;
-+	}
-+	rate = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]);
-+	if (rate != CM_CAM_MCLK_HZ)
-+		dev_warn(isp->dev, "unexpected cam_mclk rate:\n"
-+				   " expected : %d\n"
-+				   " actual   : %ld\n", CM_CAM_MCLK_HZ, rate);
-+	r = clk_enable(isp->clock[ISP_CLK_CSI2_FCK]);
-+	if (r) {
-+		dev_err(isp->dev, "clk_enable csi2_fck failed\n");
-+		goto out_clk_enable_csi2_fclk;
-+	}
-+	return 0;
-+
-+out_clk_enable_csi2_fclk:
-+	clk_disable(isp->clock[ISP_CLK_CAM_MCLK]);
-+out_clk_enable_mclk:
-+	clk_disable(isp->clock[ISP_CLK_CAM_ICK]);
-+out_clk_enable_ick:
-+	return r;
-+}
-+
-+/*
-+ * isp_disable_clocks - Disable ISP clocks
-+ * @isp: OMAP3 ISP device
-+ */
-+static void isp_disable_clocks(struct isp_device *isp)
-+{
-+	clk_disable(isp->clock[ISP_CLK_CAM_ICK]);
-+	clk_disable(isp->clock[ISP_CLK_CAM_MCLK]);
-+	clk_disable(isp->clock[ISP_CLK_CSI2_FCK]);
-+}
-+
-+static const char *isp_clocks[] = {
-+	"cam_ick",
-+	"cam_mclk",
-+	"dpll4_m5_ck",
-+	"csi2_96m_fck",
-+	"l3_ick",
-+};
-+
-+static void isp_put_clocks(struct isp_device *isp)
-+{
-+	unsigned int i;
-+
-+	for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) {
-+		if (isp->clock[i]) {
-+			clk_put(isp->clock[i]);
-+			isp->clock[i] = NULL;
-+		}
-+	}
-+}
-+
-+static int isp_get_clocks(struct isp_device *isp)
-+{
-+	struct clk *clk;
-+	unsigned int i;
-+
-+	for (i = 0; i < ARRAY_SIZE(isp_clocks); ++i) {
-+		clk = clk_get(isp->dev, isp_clocks[i]);
-+		if (IS_ERR(clk)) {
-+			dev_err(isp->dev, "clk_get %s failed\n", isp_clocks[i]);
-+			isp_put_clocks(isp);
-+			return PTR_ERR(clk);
-+		}
-+
-+		isp->clock[i] = clk;
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * omap3isp_get - Acquire the ISP resource.
-+ *
-+ * Initializes the clocks for the first acquire.
-+ *
-+ * Increment the reference count on the ISP. If the first reference is taken,
-+ * enable clocks and power-up all submodules.
-+ *
-+ * Return a pointer to the ISP device structure, or NULL if an error occured.
-+ */
-+struct isp_device *omap3isp_get(struct isp_device *isp)
-+{
-+	struct isp_device *__isp = isp;
-+
-+	if (isp == NULL)
-+		return NULL;
-+
-+	mutex_lock(&isp->isp_mutex);
-+	if (isp->ref_count > 0)
-+		goto out;
-+
-+	if (isp_enable_clocks(isp) < 0) {
-+		__isp = NULL;
-+		goto out;
-+	}
-+
-+	/* We don't want to restore context before saving it! */
-+	if (isp->has_context)
-+		isp_restore_ctx(isp);
-+	else
-+		isp->has_context = 1;
-+
-+	isp_enable_interrupts(isp);
-+
-+out:
-+	if (__isp != NULL)
-+		isp->ref_count++;
-+	mutex_unlock(&isp->isp_mutex);
-+
-+	return __isp;
-+}
-+
-+/*
-+ * omap3isp_put - Release the ISP
-+ *
-+ * Decrement the reference count on the ISP. If the last reference is released,
-+ * power-down all submodules, disable clocks and free temporary buffers.
-+ */
-+void omap3isp_put(struct isp_device *isp)
-+{
-+	if (isp == NULL)
-+		return;
-+
-+	mutex_lock(&isp->isp_mutex);
-+	BUG_ON(isp->ref_count == 0);
-+	if (--isp->ref_count == 0) {
-+		isp_disable_interrupts(isp);
-+		isp_save_ctx(isp);
-+		isp_disable_clocks(isp);
-+	}
-+	mutex_unlock(&isp->isp_mutex);
-+}
-+
-+/* --------------------------------------------------------------------------
-+ * Platform device driver
-+ */
-+
-+/*
-+ * omap3isp_print_status - Prints the values of the ISP Control Module registers
-+ * @isp: OMAP3 ISP device
-+ */
-+#define ISP_PRINT_REGISTER(isp, name)\
-+	dev_dbg(isp->dev, "###ISP " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_##name))
-+#define SBL_PRINT_REGISTER(isp, name)\
-+	dev_dbg(isp->dev, "###SBL " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_##name))
-+
-+void omap3isp_print_status(struct isp_device *isp)
-+{
-+	dev_dbg(isp->dev, "-------------ISP Register dump--------------\n");
-+
-+	ISP_PRINT_REGISTER(isp, SYSCONFIG);
-+	ISP_PRINT_REGISTER(isp, SYSSTATUS);
-+	ISP_PRINT_REGISTER(isp, IRQ0ENABLE);
-+	ISP_PRINT_REGISTER(isp, IRQ0STATUS);
-+	ISP_PRINT_REGISTER(isp, TCTRL_GRESET_LENGTH);
-+	ISP_PRINT_REGISTER(isp, TCTRL_PSTRB_REPLAY);
-+	ISP_PRINT_REGISTER(isp, CTRL);
-+	ISP_PRINT_REGISTER(isp, TCTRL_CTRL);
-+	ISP_PRINT_REGISTER(isp, TCTRL_FRAME);
-+	ISP_PRINT_REGISTER(isp, TCTRL_PSTRB_DELAY);
-+	ISP_PRINT_REGISTER(isp, TCTRL_STRB_DELAY);
-+	ISP_PRINT_REGISTER(isp, TCTRL_SHUT_DELAY);
-+	ISP_PRINT_REGISTER(isp, TCTRL_PSTRB_LENGTH);
-+	ISP_PRINT_REGISTER(isp, TCTRL_STRB_LENGTH);
-+	ISP_PRINT_REGISTER(isp, TCTRL_SHUT_LENGTH);
-+
-+	SBL_PRINT_REGISTER(isp, PCR);
-+	SBL_PRINT_REGISTER(isp, SDR_REQ_EXP);
-+
-+	dev_dbg(isp->dev, "--------------------------------------------\n");
-+}
-+
-+#ifdef CONFIG_PM
-+
-+/*
-+ * Power management support.
-+ *
-+ * As the ISP can't properly handle an input video stream interruption on a non
-+ * frame boundary, the ISP pipelines need to be stopped before sensors get
-+ * suspended. However, as suspending the sensors can require a running clock,
-+ * which can be provided by the ISP, the ISP can't be completely suspended
-+ * before the sensor.
-+ *
-+ * To solve this problem power management support is split into prepare/complete
-+ * and suspend/resume operations. The pipelines are stopped in prepare() and the
-+ * ISP clocks get disabled in suspend(). Similarly, the clocks are reenabled in
-+ * resume(), and the the pipelines are restarted in complete().
-+ *
-+ * TODO: PM dependencies between the ISP and sensors are not modeled explicitly
-+ * yet.
-+ */
-+static int isp_pm_prepare(struct device *dev)
-+{
-+	struct isp_device *isp = dev_get_drvdata(dev);
-+	int reset;
-+
-+	WARN_ON(mutex_is_locked(&isp->isp_mutex));
-+
-+	if (isp->ref_count == 0)
-+		return 0;
-+
-+	reset = isp_suspend_modules(isp);
-+	isp_disable_interrupts(isp);
-+	isp_save_ctx(isp);
-+	if (reset)
-+		isp_reset(isp);
-+
-+	return 0;
-+}
-+
-+static int isp_pm_suspend(struct device *dev)
-+{
-+	struct isp_device *isp = dev_get_drvdata(dev);
-+
-+	WARN_ON(mutex_is_locked(&isp->isp_mutex));
-+
-+	if (isp->ref_count)
-+		isp_disable_clocks(isp);
-+
-+	return 0;
-+}
-+
-+static int isp_pm_resume(struct device *dev)
-+{
-+	struct isp_device *isp = dev_get_drvdata(dev);
-+
-+	if (isp->ref_count == 0)
-+		return 0;
-+
-+	return isp_enable_clocks(isp);
-+}
-+
-+static void isp_pm_complete(struct device *dev)
-+{
-+	struct isp_device *isp = dev_get_drvdata(dev);
-+
-+	if (isp->ref_count == 0)
-+		return;
-+
-+	isp_restore_ctx(isp);
-+	isp_enable_interrupts(isp);
-+	isp_resume_modules(isp);
-+}
-+
-+#else
-+
-+#define isp_pm_prepare	NULL
-+#define isp_pm_suspend	NULL
-+#define isp_pm_resume	NULL
-+#define isp_pm_complete	NULL
-+
-+#endif /* CONFIG_PM */
-+
-+static void isp_unregister_entities(struct isp_device *isp)
-+{
-+	omap3isp_csi2_unregister_entities(&isp->isp_csi2a);
-+	omap3isp_ccp2_unregister_entities(&isp->isp_ccp2);
-+	omap3isp_ccdc_unregister_entities(&isp->isp_ccdc);
-+	omap3isp_preview_unregister_entities(&isp->isp_prev);
-+	omap3isp_resizer_unregister_entities(&isp->isp_res);
-+	omap3isp_stat_unregister_entities(&isp->isp_aewb);
-+	omap3isp_stat_unregister_entities(&isp->isp_af);
-+	omap3isp_stat_unregister_entities(&isp->isp_hist);
-+
-+	v4l2_device_unregister(&isp->v4l2_dev);
-+	media_device_unregister(&isp->media_dev);
-+}
-+
-+/*
-+ * isp_register_subdev_group - Register a group of subdevices
-+ * @isp: OMAP3 ISP device
-+ * @board_info: I2C subdevs board information array
-+ *
-+ * Register all I2C subdevices in the board_info array. The array must be
-+ * terminated by a NULL entry, and the first entry must be the sensor.
-+ *
-+ * Return a pointer to the sensor media entity if it has been successfully
-+ * registered, or NULL otherwise.
-+ */
-+static struct v4l2_subdev *
-+isp_register_subdev_group(struct isp_device *isp,
-+		     struct isp_subdev_i2c_board_info *board_info)
-+{
-+	struct v4l2_subdev *sensor = NULL;
-+	unsigned int first;
-+
-+	if (board_info->board_info == NULL)
-+		return NULL;
-+
-+	for (first = 1; board_info->board_info; ++board_info, first = 0) {
-+		struct v4l2_subdev *subdev;
-+		struct i2c_adapter *adapter;
-+
-+		adapter = i2c_get_adapter(board_info->i2c_adapter_id);
-+		if (adapter == NULL) {
-+			printk(KERN_ERR "%s: Unable to get I2C adapter %d for "
-+				"device %s\n", __func__,
-+				board_info->i2c_adapter_id,
-+				board_info->board_info->type);
-+			continue;
-+		}
-+
-+		subdev = v4l2_i2c_new_subdev_board(&isp->v4l2_dev, adapter,
-+				board_info->board_info, NULL, 1);
-+		if (subdev == NULL) {
-+			printk(KERN_ERR "%s: Unable to register subdev %s\n",
-+				__func__, board_info->board_info->type);
-+			continue;
-+		}
-+
-+		if (first)
-+			sensor = subdev;
-+	}
-+
-+	return sensor;
-+}
-+
-+static int isp_register_entities(struct isp_device *isp)
-+{
-+	struct isp_platform_data *pdata = isp->pdata;
-+	struct isp_v4l2_subdevs_group *subdevs;
-+	int ret;
-+
-+	isp->media_dev.dev = isp->dev;
-+	strlcpy(isp->media_dev.model, "TI OMAP3 ISP",
-+		sizeof(isp->media_dev.model));
-+	isp->media_dev.link_notify = isp_pipeline_link_notify;
-+	ret = media_device_register(&isp->media_dev);
-+	if (ret < 0) {
-+		printk(KERN_ERR "%s: Media device registration failed (%d)\n",
-+			__func__, ret);
-+		return ret;
-+	}
-+
-+	isp->v4l2_dev.mdev = &isp->media_dev;
-+	ret = v4l2_device_register(isp->dev, &isp->v4l2_dev);
-+	if (ret < 0) {
-+		printk(KERN_ERR "%s: V4L2 device registration failed (%d)\n",
-+			__func__, ret);
-+		goto done;
-+	}
-+
-+	/* Register internal entities */
-+	ret = omap3isp_ccp2_register_entities(&isp->isp_ccp2, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_csi2_register_entities(&isp->isp_csi2a, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_ccdc_register_entities(&isp->isp_ccdc, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_preview_register_entities(&isp->isp_prev,
-+						 &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_resizer_register_entities(&isp->isp_res, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_stat_register_entities(&isp->isp_aewb, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_stat_register_entities(&isp->isp_af, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	ret = omap3isp_stat_register_entities(&isp->isp_hist, &isp->v4l2_dev);
-+	if (ret < 0)
-+		goto done;
-+
-+	/* Register external entities */
-+	for (subdevs = pdata->subdevs; subdevs->subdevs; ++subdevs) {
-+		struct v4l2_subdev *sensor;
-+		struct media_entity *input;
-+		unsigned int flags;
-+		unsigned int pad;
-+
-+		sensor = isp_register_subdev_group(isp, subdevs->subdevs);
-+		if (sensor == NULL)
-+			continue;
-+
-+		sensor->host_priv = subdevs;
-+
-+		/* Connect the sensor to the correct interface module. Parallel
-+		 * sensors are connected directly to the CCDC, while serial
-+		 * sensors are connected to the CSI2a, CCP2b or CSI2c receiver
-+		 * through CSIPHY1 or CSIPHY2.
-+		 */
-+		switch (subdevs->interface) {
-+		case ISP_INTERFACE_PARALLEL:
-+			input = &isp->isp_ccdc.subdev.entity;
-+			pad = CCDC_PAD_SINK;
-+			flags = 0;
-+			break;
-+
-+		case ISP_INTERFACE_CSI2A_PHY2:
-+			input = &isp->isp_csi2a.subdev.entity;
-+			pad = CSI2_PAD_SINK;
-+			flags = MEDIA_LNK_FL_IMMUTABLE
-+			      | MEDIA_LNK_FL_ENABLED;
-+			break;
-+
-+		case ISP_INTERFACE_CCP2B_PHY1:
-+		case ISP_INTERFACE_CCP2B_PHY2:
-+			input = &isp->isp_ccp2.subdev.entity;
-+			pad = CCP2_PAD_SINK;
-+			flags = 0;
-+			break;
-+
-+		case ISP_INTERFACE_CSI2C_PHY1:
-+			input = &isp->isp_csi2c.subdev.entity;
-+			pad = CSI2_PAD_SINK;
-+			flags = MEDIA_LNK_FL_IMMUTABLE
-+			      | MEDIA_LNK_FL_ENABLED;
-+			break;
-+
-+		default:
-+			printk(KERN_ERR "%s: invalid interface type %u\n",
-+			       __func__, subdevs->interface);
-+			ret = -EINVAL;
-+			goto done;
-+		}
-+
-+		ret = media_entity_create_link(&sensor->entity, 0, input, pad,
-+					       flags);
-+		if (ret < 0)
-+			goto done;
-+	}
-+
-+done:
-+	if (ret < 0)
-+		isp_unregister_entities(isp);
-+
-+	return ret;
-+}
-+
-+static void isp_cleanup_modules(struct isp_device *isp)
-+{
-+	omap3isp_h3a_aewb_cleanup(isp);
-+	omap3isp_h3a_af_cleanup(isp);
-+	omap3isp_hist_cleanup(isp);
-+	omap3isp_resizer_cleanup(isp);
-+	omap3isp_preview_cleanup(isp);
-+	omap3isp_ccdc_cleanup(isp);
-+	omap3isp_ccp2_cleanup(isp);
-+	omap3isp_csi2_cleanup(isp);
-+}
-+
-+static int isp_initialize_modules(struct isp_device *isp)
-+{
-+	int ret;
-+
-+	ret = omap3isp_csiphy_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "CSI PHY initialization failed\n");
-+		goto error_csiphy;
-+	}
-+
-+	ret = omap3isp_csi2_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "CSI2 initialization failed\n");
-+		goto error_csi2;
-+	}
-+
-+	ret = omap3isp_ccp2_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "CCP2 initialization failed\n");
-+		goto error_ccp2;
-+	}
-+
-+	ret = omap3isp_ccdc_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "CCDC initialization failed\n");
-+		goto error_ccdc;
-+	}
-+
-+	ret = omap3isp_preview_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "Preview initialization failed\n");
-+		goto error_preview;
-+	}
-+
-+	ret = omap3isp_resizer_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "Resizer initialization failed\n");
-+		goto error_resizer;
-+	}
-+
-+	ret = omap3isp_hist_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "Histogram initialization failed\n");
-+		goto error_hist;
-+	}
-+
-+	ret = omap3isp_h3a_aewb_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "H3A AEWB initialization failed\n");
-+		goto error_h3a_aewb;
-+	}
-+
-+	ret = omap3isp_h3a_af_init(isp);
-+	if (ret < 0) {
-+		dev_err(isp->dev, "H3A AF initialization failed\n");
-+		goto error_h3a_af;
-+	}
-+
-+	/* Connect the submodules. */
-+	ret = media_entity_create_link(
-+			&isp->isp_csi2a.subdev.entity, CSI2_PAD_SOURCE,
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SINK, 0);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_ccp2.subdev.entity, CCP2_PAD_SOURCE,
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SINK, 0);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SOURCE_VP,
-+			&isp->isp_prev.subdev.entity, PREV_PAD_SINK, 0);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SOURCE_OF,
-+			&isp->isp_res.subdev.entity, RESZ_PAD_SINK, 0);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_prev.subdev.entity, PREV_PAD_SOURCE,
-+			&isp->isp_res.subdev.entity, RESZ_PAD_SINK, 0);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SOURCE_VP,
-+			&isp->isp_aewb.subdev.entity, 0,
-+			MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SOURCE_VP,
-+			&isp->isp_af.subdev.entity, 0,
-+			MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	ret = media_entity_create_link(
-+			&isp->isp_ccdc.subdev.entity, CCDC_PAD_SOURCE_VP,
-+			&isp->isp_hist.subdev.entity, 0,
-+			MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE);
-+	if (ret < 0)
-+		goto error_link;
-+
-+	return 0;
-+
-+error_link:
-+	omap3isp_h3a_af_cleanup(isp);
-+error_h3a_af:
-+	omap3isp_h3a_aewb_cleanup(isp);
-+error_h3a_aewb:
-+	omap3isp_hist_cleanup(isp);
-+error_hist:
-+	omap3isp_resizer_cleanup(isp);
-+error_resizer:
-+	omap3isp_preview_cleanup(isp);
-+error_preview:
-+	omap3isp_ccdc_cleanup(isp);
-+error_ccdc:
-+	omap3isp_ccp2_cleanup(isp);
-+error_ccp2:
-+	omap3isp_csi2_cleanup(isp);
-+error_csi2:
-+error_csiphy:
-+	return ret;
-+}
-+
-+/*
-+ * isp_remove - Remove ISP platform device
-+ * @pdev: Pointer to ISP platform device
-+ *
-+ * Always returns 0.
-+ */
-+static int isp_remove(struct platform_device *pdev)
-+{
-+	struct isp_device *isp = platform_get_drvdata(pdev);
-+	int i;
-+
-+	isp_unregister_entities(isp);
-+	isp_cleanup_modules(isp);
-+
-+	omap3isp_get(isp);
-+	iommu_put(isp->iommu);
-+	omap3isp_put(isp);
-+
-+	free_irq(isp->irq_num, isp);
-+	isp_put_clocks(isp);
-+
-+	for (i = 0; i < OMAP3_ISP_IOMEM_LAST; i++) {
-+		if (isp->mmio_base[i]) {
-+			iounmap(isp->mmio_base[i]);
-+			isp->mmio_base[i] = NULL;
-+		}
-+
-+		if (isp->mmio_base_phys[i]) {
-+			release_mem_region(isp->mmio_base_phys[i],
-+					   isp->mmio_size[i]);
-+			isp->mmio_base_phys[i] = 0;
-+		}
-+	}
-+
-+	regulator_put(isp->isp_csiphy1.vdd);
-+	regulator_put(isp->isp_csiphy2.vdd);
-+	kfree(isp);
-+
-+	return 0;
-+}
-+
-+static int isp_map_mem_resource(struct platform_device *pdev,
-+				struct isp_device *isp,
-+				enum isp_mem_resources res)
-+{
-+	struct resource *mem;
-+
-+	/* request the mem region for the camera registers */
-+
-+	mem = platform_get_resource(pdev, IORESOURCE_MEM, res);
-+	if (!mem) {
-+		dev_err(isp->dev, "no mem resource?\n");
-+		return -ENODEV;
-+	}
-+
-+	if (!request_mem_region(mem->start, resource_size(mem), pdev->name)) {
-+		dev_err(isp->dev,
-+			"cannot reserve camera register I/O region\n");
-+		return -ENODEV;
-+	}
-+	isp->mmio_base_phys[res] = mem->start;
-+	isp->mmio_size[res] = resource_size(mem);
-+
-+	/* map the region */
-+	isp->mmio_base[res] = ioremap_nocache(isp->mmio_base_phys[res],
-+					      isp->mmio_size[res]);
-+	if (!isp->mmio_base[res]) {
-+		dev_err(isp->dev, "cannot map camera register I/O region\n");
-+		return -ENODEV;
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_probe - Probe ISP platform device
-+ * @pdev: Pointer to ISP platform device
-+ *
-+ * Returns 0 if successful,
-+ *   -ENOMEM if no memory available,
-+ *   -ENODEV if no platform device resources found
-+ *     or no space for remapping registers,
-+ *   -EINVAL if couldn't install ISR,
-+ *   or clk_get return error value.
-+ */
-+static int isp_probe(struct platform_device *pdev)
-+{
-+	struct isp_platform_data *pdata = pdev->dev.platform_data;
-+	struct isp_device *isp;
-+	int ret;
-+	int i, m;
-+
-+	if (pdata == NULL)
-+		return -EINVAL;
-+
-+	isp = kzalloc(sizeof(*isp), GFP_KERNEL);
-+	if (!isp) {
-+		dev_err(&pdev->dev, "could not allocate memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	isp->autoidle = autoidle;
-+	isp->platform_cb.set_xclk = isp_set_xclk;
-+	isp->platform_cb.set_pixel_clock = isp_set_pixel_clock;
-+
-+	mutex_init(&isp->isp_mutex);
-+	spin_lock_init(&isp->stat_lock);
-+
-+	isp->dev = &pdev->dev;
-+	isp->pdata = pdata;
-+	isp->ref_count = 0;
-+
-+	isp->raw_dmamask = DMA_BIT_MASK(32);
-+	isp->dev->dma_mask = &isp->raw_dmamask;
-+	isp->dev->coherent_dma_mask = DMA_BIT_MASK(32);
-+
-+	platform_set_drvdata(pdev, isp);
-+
-+	/* Regulators */
-+	isp->isp_csiphy1.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY1");
-+	isp->isp_csiphy2.vdd = regulator_get(&pdev->dev, "VDD_CSIPHY2");
-+
-+	/* Clocks */
-+	ret = isp_map_mem_resource(pdev, isp, OMAP3_ISP_IOMEM_MAIN);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = isp_get_clocks(isp);
-+	if (ret < 0)
-+		goto error;
-+
-+	if (omap3isp_get(isp) == NULL)
-+		goto error;
-+
-+	ret = isp_reset(isp);
-+	if (ret < 0)
-+		goto error_isp;
-+
-+	/* Memory resources */
-+	isp->revision = isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION);
-+	dev_info(isp->dev, "Revision %d.%d found\n",
-+		 (isp->revision & 0xf0) >> 4, isp->revision & 0x0f);
-+
-+	for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++)
-+		if (isp->revision == isp_res_maps[m].isp_rev)
-+			break;
-+
-+	if (m == ARRAY_SIZE(isp_res_maps)) {
-+		dev_err(isp->dev, "No resource map found for ISP rev %d.%d\n",
-+			(isp->revision & 0xf0) >> 4, isp->revision & 0xf);
-+		ret = -ENODEV;
-+		goto error_isp;
-+	}
-+
-+	for (i = 1; i < OMAP3_ISP_IOMEM_LAST; i++) {
-+		if (isp_res_maps[m].map & 1 << i) {
-+			ret = isp_map_mem_resource(pdev, isp, i);
-+			if (ret)
-+				goto error_isp;
-+		}
-+	}
-+
-+	/* IOMMU */
-+	isp->iommu = iommu_get("isp");
-+	if (IS_ERR_OR_NULL(isp->iommu)) {
-+		isp->iommu = NULL;
-+		ret = -ENODEV;
-+		goto error_isp;
-+	}
-+
-+	/* Interrupt */
-+	isp->irq_num = platform_get_irq(pdev, 0);
-+	if (isp->irq_num <= 0) {
-+		dev_err(isp->dev, "No IRQ resource\n");
-+		ret = -ENODEV;
-+		goto error_isp;
-+	}
-+
-+	if (request_irq(isp->irq_num, isp_isr, IRQF_SHARED, "OMAP3 ISP", isp)) {
-+		dev_err(isp->dev, "Unable to request IRQ\n");
-+		ret = -EINVAL;
-+		goto error_isp;
-+	}
-+
-+	/* Entities */
-+	ret = isp_initialize_modules(isp);
-+	if (ret < 0)
-+		goto error_irq;
-+
-+	ret = isp_register_entities(isp);
-+	if (ret < 0)
-+		goto error_modules;
-+
-+	isp_power_settings(isp, 1);
-+	omap3isp_put(isp);
-+
-+	return 0;
-+
-+error_modules:
-+	isp_cleanup_modules(isp);
-+error_irq:
-+	free_irq(isp->irq_num, isp);
-+error_isp:
-+	iommu_put(isp->iommu);
-+	omap3isp_put(isp);
-+error:
-+	isp_put_clocks(isp);
-+
-+	for (i = 0; i < OMAP3_ISP_IOMEM_LAST; i++) {
-+		if (isp->mmio_base[i]) {
-+			iounmap(isp->mmio_base[i]);
-+			isp->mmio_base[i] = NULL;
-+		}
-+
-+		if (isp->mmio_base_phys[i]) {
-+			release_mem_region(isp->mmio_base_phys[i],
-+					   isp->mmio_size[i]);
-+			isp->mmio_base_phys[i] = 0;
-+		}
-+	}
-+	regulator_put(isp->isp_csiphy2.vdd);
-+	regulator_put(isp->isp_csiphy1.vdd);
-+	platform_set_drvdata(pdev, NULL);
-+	kfree(isp);
-+
-+	return ret;
-+}
-+
-+static const struct dev_pm_ops omap3isp_pm_ops = {
-+	.prepare = isp_pm_prepare,
-+	.suspend = isp_pm_suspend,
-+	.resume = isp_pm_resume,
-+	.complete = isp_pm_complete,
-+};
-+
-+static struct platform_device_id omap3isp_id_table[] = {
-+	{ "omap3isp", 0 },
-+	{ },
-+};
-+MODULE_DEVICE_TABLE(platform, omap3isp_id_table);
-+
-+static struct platform_driver omap3isp_driver = {
-+	.probe = isp_probe,
-+	.remove = isp_remove,
-+	.id_table = omap3isp_id_table,
-+	.driver = {
-+		.owner = THIS_MODULE,
-+		.name = "omap3isp",
-+		.pm	= &omap3isp_pm_ops,
-+	},
-+};
-+
-+/*
-+ * isp_init - ISP module initialization.
-+ */
-+static int __init isp_init(void)
-+{
-+	return platform_driver_register(&omap3isp_driver);
-+}
-+
-+/*
-+ * isp_cleanup - ISP module cleanup.
-+ */
-+static void __exit isp_cleanup(void)
-+{
-+	platform_driver_unregister(&omap3isp_driver);
-+}
-+
-+module_init(isp_init);
-+module_exit(isp_cleanup);
-+
-+MODULE_AUTHOR("Nokia Corporation");
-+MODULE_DESCRIPTION("TI OMAP3 ISP driver");
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/media/video/isp/isp.h b/drivers/media/video/isp/isp.h
-new file mode 100644
-index 0000000..44590a5
---- /dev/null
-+++ b/drivers/media/video/isp/isp.h
-@@ -0,0 +1,427 @@
-+/*
-+ * isp.h
-+ *
-+ * TI OMAP3 ISP - Core
-+ *
-+ * Copyright (C) 2009-2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_CORE_H
-+#define OMAP3_ISP_CORE_H
-+
-+#include <media/v4l2-device.h>
-+#include <linux/device.h>
-+#include <linux/io.h>
-+#include <linux/platform_device.h>
-+#include <linux/wait.h>
-+#include <plat/iommu.h>
-+#include <plat/iovmm.h>
-+
-+#include "ispstat.h"
-+#include "ispccdc.h"
-+#include "ispreg.h"
-+#include "ispresizer.h"
-+#include "isppreview.h"
-+#include "ispcsiphy.h"
-+#include "ispcsi2.h"
-+#include "ispccp2.h"
-+
-+#define IOMMU_FLAG (IOVMF_ENDIAN_LITTLE | IOVMF_ELSZ_8)
-+
-+#define ISP_TOK_TERM		0xFFFFFFFF	/*
-+						 * terminating token for ISP
-+						 * modules reg list
-+						 */
-+#define to_isp_device(ptr_module)				\
-+	container_of(ptr_module, struct isp_device, isp_##ptr_module)
-+#define to_device(ptr_module)						\
-+	(to_isp_device(ptr_module)->dev)
-+
-+enum isp_mem_resources {
-+	OMAP3_ISP_IOMEM_MAIN,
-+	OMAP3_ISP_IOMEM_CCP2,
-+	OMAP3_ISP_IOMEM_CCDC,
-+	OMAP3_ISP_IOMEM_HIST,
-+	OMAP3_ISP_IOMEM_H3A,
-+	OMAP3_ISP_IOMEM_PREV,
-+	OMAP3_ISP_IOMEM_RESZ,
-+	OMAP3_ISP_IOMEM_SBL,
-+	OMAP3_ISP_IOMEM_CSI2A_REGS1,
-+	OMAP3_ISP_IOMEM_CSIPHY2,
-+	OMAP3_ISP_IOMEM_CSI2A_REGS2,
-+	OMAP3_ISP_IOMEM_CSI2C_REGS1,
-+	OMAP3_ISP_IOMEM_CSIPHY1,
-+	OMAP3_ISP_IOMEM_CSI2C_REGS2,
-+	OMAP3_ISP_IOMEM_LAST
-+};
-+
-+enum isp_sbl_resource {
-+	OMAP3_ISP_SBL_CSI1_READ		= 0x1,
-+	OMAP3_ISP_SBL_CSI1_WRITE	= 0x2,
-+	OMAP3_ISP_SBL_CSI2A_WRITE	= 0x4,
-+	OMAP3_ISP_SBL_CSI2C_WRITE	= 0x8,
-+	OMAP3_ISP_SBL_CCDC_LSC_READ	= 0x10,
-+	OMAP3_ISP_SBL_CCDC_WRITE	= 0x20,
-+	OMAP3_ISP_SBL_PREVIEW_READ	= 0x40,
-+	OMAP3_ISP_SBL_PREVIEW_WRITE	= 0x80,
-+	OMAP3_ISP_SBL_RESIZER_READ	= 0x100,
-+	OMAP3_ISP_SBL_RESIZER_WRITE	= 0x200,
-+};
-+
-+enum isp_subclk_resource {
-+	OMAP3_ISP_SUBCLK_CCDC		= (1 << 0),
-+	OMAP3_ISP_SUBCLK_H3A		= (1 << 1),
-+	OMAP3_ISP_SUBCLK_HIST		= (1 << 2),
-+	OMAP3_ISP_SUBCLK_PREVIEW	= (1 << 3),
-+	OMAP3_ISP_SUBCLK_RESIZER	= (1 << 4),
-+};
-+
-+enum isp_interface_type {
-+	ISP_INTERFACE_PARALLEL,
-+	ISP_INTERFACE_CSI2A_PHY2,
-+	ISP_INTERFACE_CCP2B_PHY1,
-+	ISP_INTERFACE_CCP2B_PHY2,
-+	ISP_INTERFACE_CSI2C_PHY1,
-+};
-+
-+#define ISP_REVISION_1_0		0x10
-+#define ISP_REVISION_2_0		0x20
-+#define ISP_REVISION_15_0		0xF0
-+
-+/*
-+ * struct isp_res_mapping - Map ISP io resources to ISP revision.
-+ * @isp_rev: ISP_REVISION_x_x
-+ * @map: bitmap for enum isp_mem_resources
-+ */
-+struct isp_res_mapping {
-+	u32 isp_rev;
-+	u32 map;
-+};
-+
-+/*
-+ * struct isp_reg - Structure for ISP register values.
-+ * @reg: 32-bit Register address.
-+ * @val: 32-bit Register value.
-+ */
-+struct isp_reg {
-+	enum isp_mem_resources mmio_range;
-+	u32 reg;
-+	u32 val;
-+};
-+
-+/**
-+ * struct isp_parallel_platform_data - Parallel interface platform data
-+ * @width: Parallel bus width in bits (8, 10, 11 or 12)
-+ * @data_lane_shift: Data lane shifter
-+ *		0 - CAMEXT[13:0] -> CAM[13:0]
-+ *		1 - CAMEXT[13:2] -> CAM[11:0]
-+ *		2 - CAMEXT[13:4] -> CAM[9:0]
-+ *		3 - CAMEXT[13:6] -> CAM[7:0]
-+ * @clk_pol: Pixel clock polarity
-+ *		0 - Non Inverted, 1 - Inverted
-+ * @bridge: CCDC Bridge input control
-+ *		ISPCTRL_PAR_BRIDGE_DISABLE - Disable
-+ *		ISPCTRL_PAR_BRIDGE_LENDIAN - Little endian
-+ *		ISPCTRL_PAR_BRIDGE_BENDIAN - Big endian
-+ */
-+struct isp_parallel_platform_data {
-+	unsigned int width;
-+	unsigned int data_lane_shift:2;
-+	unsigned int clk_pol:1;
-+	unsigned int bridge:4;
-+};
-+
-+/**
-+ * struct isp_ccp2_platform_data - CCP2 interface platform data
-+ * @strobe_clk_pol: Strobe/clock polarity
-+ *		0 - Non Inverted, 1 - Inverted
-+ * @crc: Enable the cyclic redundancy check
-+ * @ccp2_mode: Enable CCP2 compatibility mode
-+ *		0 - MIPI-CSI1 mode, 1 - CCP2 mode
-+ * @phy_layer: Physical layer selection
-+ *		ISPCCP2_CTRL_PHY_SEL_CLOCK - Data/clock physical layer
-+ *		ISPCCP2_CTRL_PHY_SEL_STROBE - Data/strobe physical layer
-+ * @vpclk_div: Video port output clock control
-+ */
-+struct isp_ccp2_platform_data {
-+	unsigned int strobe_clk_pol:1;
-+	unsigned int crc:1;
-+	unsigned int ccp2_mode:1;
-+	unsigned int phy_layer:1;
-+	unsigned int vpclk_div:2;
-+};
-+
-+/**
-+ * struct isp_csi2_platform_data - CSI2 interface platform data
-+ * @crc: Enable the cyclic redundancy check
-+ * @vpclk_div: Video port output clock control
-+ */
-+struct isp_csi2_platform_data {
-+	unsigned crc:1;
-+	unsigned vpclk_div:2;
-+};
-+
-+struct isp_subdev_i2c_board_info {
-+	struct i2c_board_info *board_info;
-+	int i2c_adapter_id;
-+};
-+
-+struct isp_v4l2_subdevs_group {
-+	struct isp_subdev_i2c_board_info *subdevs;
-+	enum isp_interface_type interface;
-+	union {
-+		struct isp_parallel_platform_data parallel;
-+		struct isp_ccp2_platform_data ccp2;
-+		struct isp_csi2_platform_data csi2;
-+	} bus; /* gcc < 4.6.0 chokes on anonymous union initializers */
-+};
-+
-+struct isp_platform_data {
-+	struct isp_v4l2_subdevs_group *subdevs;
-+};
-+
-+struct isp_platform_callback {
-+	u32 (*set_xclk)(struct isp_device *isp, u32 xclk, u8 xclksel);
-+	int (*csiphy_config)(struct isp_csiphy *phy,
-+			     struct isp_csiphy_dphy_cfg *dphy,
-+			     struct isp_csiphy_lanes_cfg *lanes);
-+	void (*set_pixel_clock)(struct isp_device *isp, unsigned int pixelclk);
-+};
-+
-+/*
-+ * struct isp_device - ISP device structure.
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @revision: Stores current ISP module revision.
-+ * @irq_num: Currently used IRQ number.
-+ * @mmio_base: Array with kernel base addresses for ioremapped ISP register
-+ *             regions.
-+ * @mmio_base_phys: Array with physical L4 bus addresses for ISP register
-+ *                  regions.
-+ * @mmio_size: Array with ISP register regions size in bytes.
-+ * @raw_dmamask: Raw DMA mask
-+ * @stat_lock: Spinlock for handling statistics
-+ * @isp_mutex: Mutex for serializing requests to ISP.
-+ * @has_context: Context has been saved at least once and can be restored.
-+ * @ref_count: Reference count for handling multiple ISP requests.
-+ * @cam_ick: Pointer to camera interface clock structure.
-+ * @cam_mclk: Pointer to camera functional clock structure.
-+ * @dpll4_m5_ck: Pointer to DPLL4 M5 clock structure.
-+ * @csi2_fck: Pointer to camera CSI2 complexIO clock structure.
-+ * @l3_ick: Pointer to OMAP3 L3 bus interface clock.
-+ * @irq: Currently attached ISP ISR callbacks information structure.
-+ * @isp_af: Pointer to current settings for ISP AutoFocus SCM.
-+ * @isp_hist: Pointer to current settings for ISP Histogram SCM.
-+ * @isp_h3a: Pointer to current settings for ISP Auto Exposure and
-+ *           White Balance SCM.
-+ * @isp_res: Pointer to current settings for ISP Resizer.
-+ * @isp_prev: Pointer to current settings for ISP Preview.
-+ * @isp_ccdc: Pointer to current settings for ISP CCDC.
-+ * @iommu: Pointer to requested IOMMU instance for ISP.
-+ * @platform_cb: ISP driver callback function pointers for platform code
-+ *
-+ * This structure is used to store the OMAP ISP Information.
-+ */
-+struct isp_device {
-+	struct v4l2_device v4l2_dev;
-+	struct media_device media_dev;
-+	struct device *dev;
-+	u32 revision;
-+
-+	/* platform HW resources */
-+	struct isp_platform_data *pdata;
-+	unsigned int irq_num;
-+
-+	void __iomem *mmio_base[OMAP3_ISP_IOMEM_LAST];
-+	unsigned long mmio_base_phys[OMAP3_ISP_IOMEM_LAST];
-+	resource_size_t mmio_size[OMAP3_ISP_IOMEM_LAST];
-+
-+	u64 raw_dmamask;
-+
-+	/* ISP Obj */
-+	spinlock_t stat_lock;	/* common lock for statistic drivers */
-+	struct mutex isp_mutex;	/* For handling ref_count field */
-+	int has_context;
-+	int ref_count;
-+	unsigned int autoidle;
-+	u32 xclk_divisor[2];	/* Two clocks, a and b. */
-+#define ISP_CLK_CAM_ICK		0
-+#define ISP_CLK_CAM_MCLK	1
-+#define ISP_CLK_DPLL4_M5_CK	2
-+#define ISP_CLK_CSI2_FCK	3
-+#define ISP_CLK_L3_ICK		4
-+	struct clk *clock[5];
-+
-+	/* ISP modules */
-+	struct ispstat isp_af;
-+	struct ispstat isp_aewb;
-+	struct ispstat isp_hist;
-+	struct isp_res_device isp_res;
-+	struct isp_prev_device isp_prev;
-+	struct isp_ccdc_device isp_ccdc;
-+	struct isp_csi2_device isp_csi2a;
-+	struct isp_csi2_device isp_csi2c;
-+	struct isp_ccp2_device isp_ccp2;
-+	struct isp_csiphy isp_csiphy1;
-+	struct isp_csiphy isp_csiphy2;
-+
-+	unsigned int sbl_resources;
-+	unsigned int subclk_resources;
-+
-+	struct iommu *iommu;
-+
-+	struct isp_platform_callback platform_cb;
-+};
-+
-+#define v4l2_dev_to_isp_device(dev) \
-+	container_of(dev, struct isp_device, v4l2_dev)
-+
-+void omap3isp_hist_dma_done(struct isp_device *isp);
-+
-+void omap3isp_flush(struct isp_device *isp);
-+
-+int omap3isp_module_sync_idle(struct media_entity *me, wait_queue_head_t *wait,
-+			      atomic_t *stopping);
-+
-+int omap3isp_module_sync_is_stopping(wait_queue_head_t *wait,
-+				     atomic_t *stopping);
-+
-+int omap3isp_pipeline_set_stream(struct isp_pipeline *pipe,
-+				 enum isp_pipeline_stream_state state);
-+void omap3isp_configure_bridge(struct isp_device *isp,
-+			       enum ccdc_input_entity input,
-+			       const struct isp_parallel_platform_data *pdata);
-+
-+#define ISP_XCLK_NONE			-1
-+#define ISP_XCLK_A			0
-+#define ISP_XCLK_B			1
-+
-+struct isp_device *omap3isp_get(struct isp_device *isp);
-+void omap3isp_put(struct isp_device *isp);
-+
-+void omap3isp_print_status(struct isp_device *isp);
-+
-+void omap3isp_sbl_enable(struct isp_device *isp, enum isp_sbl_resource res);
-+void omap3isp_sbl_disable(struct isp_device *isp, enum isp_sbl_resource res);
-+
-+void omap3isp_subclk_enable(struct isp_device *isp,
-+			    enum isp_subclk_resource res);
-+void omap3isp_subclk_disable(struct isp_device *isp,
-+			     enum isp_subclk_resource res);
-+
-+int omap3isp_pipeline_pm_use(struct media_entity *entity, int use);
-+
-+int omap3isp_register_entities(struct platform_device *pdev,
-+			       struct v4l2_device *v4l2_dev);
-+void omap3isp_unregister_entities(struct platform_device *pdev);
-+
-+/*
-+ * isp_reg_readl - Read value of an OMAP3 ISP register
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @isp_mmio_range: Range to which the register offset refers to.
-+ * @reg_offset: Register offset to read from.
-+ *
-+ * Returns an unsigned 32 bit value with the required register contents.
-+ */
-+static inline
-+u32 isp_reg_readl(struct isp_device *isp, enum isp_mem_resources isp_mmio_range,
-+		  u32 reg_offset)
-+{
-+	return __raw_readl(isp->mmio_base[isp_mmio_range] + reg_offset);
-+}
-+
-+/*
-+ * isp_reg_writel - Write value to an OMAP3 ISP register
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @reg_value: 32 bit value to write to the register.
-+ * @isp_mmio_range: Range to which the register offset refers to.
-+ * @reg_offset: Register offset to write into.
-+ */
-+static inline
-+void isp_reg_writel(struct isp_device *isp, u32 reg_value,
-+		    enum isp_mem_resources isp_mmio_range, u32 reg_offset)
-+{
-+	__raw_writel(reg_value, isp->mmio_base[isp_mmio_range] + reg_offset);
-+}
-+
-+/*
-+ * isp_reg_and - Clear individual bits in an OMAP3 ISP register
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @mmio_range: Range to which the register offset refers to.
-+ * @reg: Register offset to work on.
-+ * @clr_bits: 32 bit value which would be cleared in the register.
-+ */
-+static inline
-+void isp_reg_clr(struct isp_device *isp, enum isp_mem_resources mmio_range,
-+		 u32 reg, u32 clr_bits)
-+{
-+	u32 v = isp_reg_readl(isp, mmio_range, reg);
-+
-+	isp_reg_writel(isp, v & ~clr_bits, mmio_range, reg);
-+}
-+
-+/*
-+ * isp_reg_set - Set individual bits in an OMAP3 ISP register
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @mmio_range: Range to which the register offset refers to.
-+ * @reg: Register offset to work on.
-+ * @set_bits: 32 bit value which would be set in the register.
-+ */
-+static inline
-+void isp_reg_set(struct isp_device *isp, enum isp_mem_resources mmio_range,
-+		 u32 reg, u32 set_bits)
-+{
-+	u32 v = isp_reg_readl(isp, mmio_range, reg);
-+
-+	isp_reg_writel(isp, v | set_bits, mmio_range, reg);
-+}
-+
-+/*
-+ * isp_reg_clr_set - Clear and set invidial bits in an OMAP3 ISP register
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @mmio_range: Range to which the register offset refers to.
-+ * @reg: Register offset to work on.
-+ * @clr_bits: 32 bit value which would be cleared in the register.
-+ * @set_bits: 32 bit value which would be set in the register.
-+ *
-+ * The clear operation is done first, and then the set operation.
-+ */
-+static inline
-+void isp_reg_clr_set(struct isp_device *isp, enum isp_mem_resources mmio_range,
-+		     u32 reg, u32 clr_bits, u32 set_bits)
-+{
-+	u32 v = isp_reg_readl(isp, mmio_range, reg);
-+
-+	isp_reg_writel(isp, (v & ~clr_bits) | set_bits, mmio_range, reg);
-+}
-+
-+static inline enum v4l2_buf_type
-+isp_pad_buffer_type(const struct v4l2_subdev *subdev, int pad)
-+{
-+	if (pad >= subdev->entity.num_pads)
-+		return 0;
-+
-+	if (subdev->entity.pads[pad].flags & MEDIA_PAD_FL_INPUT)
-+		return V4L2_BUF_TYPE_VIDEO_OUTPUT;
-+	else
-+		return V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+}
-+
-+#endif	/* OMAP3_ISP_CORE_H */
-diff --git a/drivers/media/video/isp/ispccdc.c b/drivers/media/video/isp/ispccdc.c
-new file mode 100644
-index 0000000..cb71e4f
---- /dev/null
-+++ b/drivers/media/video/isp/ispccdc.c
-@@ -0,0 +1,2280 @@
-+/*
-+ * ispccdc.c
-+ *
-+ * TI OMAP3 ISP - CCDC module
-+ *
-+ * Copyright (C) 2009-2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/module.h>
-+#include <linux/uaccess.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/mm.h>
-+#include <linux/sched.h>
-+#include <media/v4l2-ctrls.h>
-+#include <media/v4l2-event.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "ispccdc.h"
-+
-+static struct v4l2_mbus_framefmt *
-+__ccdc_get_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_fh *fh,
-+		  unsigned int pad, enum v4l2_subdev_format_whence which);
-+
-+static const unsigned int ccdc_fmts[] = {
-+	V4L2_MBUS_FMT_Y8_1X8,
-+	V4L2_MBUS_FMT_SGRBG10_1X10,
-+	V4L2_MBUS_FMT_SRGGB10_1X10,
-+	V4L2_MBUS_FMT_SBGGR10_1X10,
-+	V4L2_MBUS_FMT_SGBRG10_1X10,
-+	V4L2_MBUS_FMT_SGRBG12_1X12,
-+	V4L2_MBUS_FMT_SRGGB12_1X12,
-+	V4L2_MBUS_FMT_SBGGR12_1X12,
-+	V4L2_MBUS_FMT_SGBRG12_1X12,
-+};
-+
-+/*
-+ * ccdc_print_status - Print current CCDC Module register values.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ *
-+ * Also prints other debug information stored in the CCDC module.
-+ */
-+#define CCDC_PRINT_REGISTER(isp, name)\
-+	dev_dbg(isp->dev, "###CCDC " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_##name))
-+
-+static void ccdc_print_status(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	dev_dbg(isp->dev, "-------------CCDC Register dump-------------\n");
-+
-+	CCDC_PRINT_REGISTER(isp, PCR);
-+	CCDC_PRINT_REGISTER(isp, SYN_MODE);
-+	CCDC_PRINT_REGISTER(isp, HD_VD_WID);
-+	CCDC_PRINT_REGISTER(isp, PIX_LINES);
-+	CCDC_PRINT_REGISTER(isp, HORZ_INFO);
-+	CCDC_PRINT_REGISTER(isp, VERT_START);
-+	CCDC_PRINT_REGISTER(isp, VERT_LINES);
-+	CCDC_PRINT_REGISTER(isp, CULLING);
-+	CCDC_PRINT_REGISTER(isp, HSIZE_OFF);
-+	CCDC_PRINT_REGISTER(isp, SDOFST);
-+	CCDC_PRINT_REGISTER(isp, SDR_ADDR);
-+	CCDC_PRINT_REGISTER(isp, CLAMP);
-+	CCDC_PRINT_REGISTER(isp, DCSUB);
-+	CCDC_PRINT_REGISTER(isp, COLPTN);
-+	CCDC_PRINT_REGISTER(isp, BLKCMP);
-+	CCDC_PRINT_REGISTER(isp, FPC);
-+	CCDC_PRINT_REGISTER(isp, FPC_ADDR);
-+	CCDC_PRINT_REGISTER(isp, VDINT);
-+	CCDC_PRINT_REGISTER(isp, ALAW);
-+	CCDC_PRINT_REGISTER(isp, REC656IF);
-+	CCDC_PRINT_REGISTER(isp, CFG);
-+	CCDC_PRINT_REGISTER(isp, FMTCFG);
-+	CCDC_PRINT_REGISTER(isp, FMT_HORZ);
-+	CCDC_PRINT_REGISTER(isp, FMT_VERT);
-+	CCDC_PRINT_REGISTER(isp, PRGEVEN0);
-+	CCDC_PRINT_REGISTER(isp, PRGEVEN1);
-+	CCDC_PRINT_REGISTER(isp, PRGODD0);
-+	CCDC_PRINT_REGISTER(isp, PRGODD1);
-+	CCDC_PRINT_REGISTER(isp, VP_OUT);
-+	CCDC_PRINT_REGISTER(isp, LSC_CONFIG);
-+	CCDC_PRINT_REGISTER(isp, LSC_INITIAL);
-+	CCDC_PRINT_REGISTER(isp, LSC_TABLE_BASE);
-+	CCDC_PRINT_REGISTER(isp, LSC_TABLE_OFFSET);
-+
-+	dev_dbg(isp->dev, "--------------------------------------------\n");
-+}
-+
-+/*
-+ * omap3isp_ccdc_busy - Get busy state of the CCDC.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+int omap3isp_ccdc_busy(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	return isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_PCR) &
-+		ISPCCDC_PCR_BUSY;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Lens Shading Compensation
-+ */
-+
-+/*
-+ * ccdc_lsc_validate_config - Check that LSC configuration is valid.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @lsc_cfg: the LSC configuration to check.
-+ *
-+ * Returns 0 if the LSC configuration is valid, or -EINVAL if invalid.
-+ */
-+static int ccdc_lsc_validate_config(struct isp_ccdc_device *ccdc,
-+				    struct omap3isp_ccdc_lsc_config *lsc_cfg)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	struct v4l2_mbus_framefmt *format;
-+	unsigned int paxel_width, paxel_height;
-+	unsigned int paxel_shift_x, paxel_shift_y;
-+	unsigned int min_width, min_height, min_size;
-+	unsigned int input_width, input_height;
-+
-+	paxel_shift_x = lsc_cfg->gain_mode_m;
-+	paxel_shift_y = lsc_cfg->gain_mode_n;
-+
-+	if ((paxel_shift_x < 2) || (paxel_shift_x > 6) ||
-+	    (paxel_shift_y < 2) || (paxel_shift_y > 6)) {
-+		dev_dbg(isp->dev, "CCDC: LSC: Invalid paxel size\n");
-+		return -EINVAL;
-+	}
-+
-+	if (lsc_cfg->offset & 3) {
-+		dev_dbg(isp->dev, "CCDC: LSC: Offset must be a multiple of "
-+			"4\n");
-+		return -EINVAL;
-+	}
-+
-+	if ((lsc_cfg->initial_x & 1) || (lsc_cfg->initial_y & 1)) {
-+		dev_dbg(isp->dev, "CCDC: LSC: initial_x and y must be even\n");
-+		return -EINVAL;
-+	}
-+
-+	format = __ccdc_get_format(ccdc, NULL, CCDC_PAD_SINK,
-+				   V4L2_SUBDEV_FORMAT_ACTIVE);
-+	input_width = format->width;
-+	input_height = format->height;
-+
-+	/* Calculate minimum bytesize for validation */
-+	paxel_width = 1 << paxel_shift_x;
-+	min_width = ((input_width + lsc_cfg->initial_x + paxel_width - 1)
-+		     >> paxel_shift_x) + 1;
-+
-+	paxel_height = 1 << paxel_shift_y;
-+	min_height = ((input_height + lsc_cfg->initial_y + paxel_height - 1)
-+		     >> paxel_shift_y) + 1;
-+
-+	min_size = 4 * min_width * min_height;
-+	if (min_size > lsc_cfg->size) {
-+		dev_dbg(isp->dev, "CCDC: LSC: too small table\n");
-+		return -EINVAL;
-+	}
-+	if (lsc_cfg->offset < (min_width * 4)) {
-+		dev_dbg(isp->dev, "CCDC: LSC: Offset is too small\n");
-+		return -EINVAL;
-+	}
-+	if ((lsc_cfg->size / lsc_cfg->offset) < min_height) {
-+		dev_dbg(isp->dev, "CCDC: LSC: Wrong size/offset combination\n");
-+		return -EINVAL;
-+	}
-+	return 0;
-+}
-+
-+/*
-+ * ccdc_lsc_program_table - Program Lens Shading Compensation table address.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_lsc_program_table(struct isp_ccdc_device *ccdc, u32 addr)
-+{
-+	isp_reg_writel(to_isp_device(ccdc), addr,
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_LSC_TABLE_BASE);
-+}
-+
-+/*
-+ * ccdc_lsc_setup_regs - Configures the lens shading compensation module
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_lsc_setup_regs(struct isp_ccdc_device *ccdc,
-+				struct omap3isp_ccdc_lsc_config *cfg)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	int reg;
-+
-+	isp_reg_writel(isp, cfg->offset, OMAP3_ISP_IOMEM_CCDC,
-+		       ISPCCDC_LSC_TABLE_OFFSET);
-+
-+	reg = 0;
-+	reg |= cfg->gain_mode_n << ISPCCDC_LSC_GAIN_MODE_N_SHIFT;
-+	reg |= cfg->gain_mode_m << ISPCCDC_LSC_GAIN_MODE_M_SHIFT;
-+	reg |= cfg->gain_format << ISPCCDC_LSC_GAIN_FORMAT_SHIFT;
-+	isp_reg_writel(isp, reg, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_LSC_CONFIG);
-+
-+	reg = 0;
-+	reg &= ~ISPCCDC_LSC_INITIAL_X_MASK;
-+	reg |= cfg->initial_x << ISPCCDC_LSC_INITIAL_X_SHIFT;
-+	reg &= ~ISPCCDC_LSC_INITIAL_Y_MASK;
-+	reg |= cfg->initial_y << ISPCCDC_LSC_INITIAL_Y_SHIFT;
-+	isp_reg_writel(isp, reg, OMAP3_ISP_IOMEM_CCDC,
-+		       ISPCCDC_LSC_INITIAL);
-+}
-+
-+static int ccdc_lsc_wait_prefetch(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	unsigned int wait;
-+
-+	isp_reg_writel(isp, IRQ0STATUS_CCDC_LSC_PREF_COMP_IRQ,
-+		       OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0STATUS);
-+
-+	/* timeout 1 ms */
-+	for (wait = 0; wait < 1000; wait++) {
-+		if (isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0STATUS) &
-+				  IRQ0STATUS_CCDC_LSC_PREF_COMP_IRQ) {
-+			isp_reg_writel(isp, IRQ0STATUS_CCDC_LSC_PREF_COMP_IRQ,
-+				       OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0STATUS);
-+			return 0;
-+		}
-+
-+		rmb();
-+		udelay(1);
-+	}
-+
-+	return -ETIMEDOUT;
-+}
-+
-+/*
-+ * __ccdc_lsc_enable - Enables/Disables the Lens Shading Compensation module.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @enable: 0 Disables LSC, 1 Enables LSC.
-+ */
-+static int __ccdc_lsc_enable(struct isp_ccdc_device *ccdc, int enable)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	const struct v4l2_mbus_framefmt *format =
-+		__ccdc_get_format(ccdc, NULL, CCDC_PAD_SINK,
-+				  V4L2_SUBDEV_FORMAT_ACTIVE);
-+
-+	if ((format->code != V4L2_MBUS_FMT_SGRBG10_1X10) &&
-+	    (format->code != V4L2_MBUS_FMT_SRGGB10_1X10) &&
-+	    (format->code != V4L2_MBUS_FMT_SBGGR10_1X10) &&
-+	    (format->code != V4L2_MBUS_FMT_SGBRG10_1X10))
-+		return -EINVAL;
-+
-+	if (enable)
-+		omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_CCDC_LSC_READ);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_LSC_CONFIG,
-+			ISPCCDC_LSC_ENABLE, enable ? ISPCCDC_LSC_ENABLE : 0);
-+
-+	if (enable) {
-+		if (ccdc_lsc_wait_prefetch(ccdc) < 0) {
-+			isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCDC,
-+				    ISPCCDC_LSC_CONFIG, ISPCCDC_LSC_ENABLE);
-+			ccdc->lsc.state = LSC_STATE_STOPPED;
-+			dev_warn(to_device(ccdc), "LSC prefecth timeout\n");
-+			return -ETIMEDOUT;
-+		}
-+		ccdc->lsc.state = LSC_STATE_RUNNING;
-+	} else {
-+		ccdc->lsc.state = LSC_STATE_STOPPING;
-+	}
-+
-+	return 0;
-+}
-+
-+static int ccdc_lsc_busy(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	return isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_LSC_CONFIG) &
-+			     ISPCCDC_LSC_BUSY;
-+}
-+
-+/* __ccdc_lsc_configure - Apply a new configuration to the LSC engine
-+ * @ccdc: Pointer to ISP CCDC device
-+ * @req: New configuration request
-+ *
-+ * context: in_interrupt()
-+ */
-+static int __ccdc_lsc_configure(struct isp_ccdc_device *ccdc,
-+				struct ispccdc_lsc_config_req *req)
-+{
-+	if (!req->enable)
-+		return -EINVAL;
-+
-+	if (ccdc_lsc_validate_config(ccdc, &req->config) < 0) {
-+		dev_dbg(to_device(ccdc), "Discard LSC configuration\n");
-+		return -EINVAL;
-+	}
-+
-+	if (ccdc_lsc_busy(ccdc))
-+		return -EBUSY;
-+
-+	ccdc_lsc_setup_regs(ccdc, &req->config);
-+	ccdc_lsc_program_table(ccdc, req->table);
-+	return 0;
-+}
-+
-+/*
-+ * ccdc_lsc_error_handler - Handle LSC prefetch error scenario.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ *
-+ * Disables LSC, and defers enablement to shadow registers update time.
-+ */
-+static void ccdc_lsc_error_handler(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	/*
-+	 * From OMAP3 TRM: When this event is pending, the module
-+	 * goes into transparent mode (output =input). Normal
-+	 * operation can be resumed at the start of the next frame
-+	 * after:
-+	 *  1) Clearing this event
-+	 *  2) Disabling the LSC module
-+	 *  3) Enabling it
-+	 */
-+	isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_LSC_CONFIG,
-+		    ISPCCDC_LSC_ENABLE);
-+	ccdc->lsc.state = LSC_STATE_STOPPED;
-+}
-+
-+static void ccdc_lsc_free_request(struct isp_ccdc_device *ccdc,
-+				  struct ispccdc_lsc_config_req *req)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	if (req == NULL)
-+		return;
-+
-+	if (req->iovm)
-+		dma_unmap_sg(isp->dev, req->iovm->sgt->sgl,
-+			     req->iovm->sgt->nents, DMA_TO_DEVICE);
-+	if (req->table)
-+		iommu_vfree(isp->iommu, req->table);
-+	kfree(req);
-+}
-+
-+static void ccdc_lsc_free_queue(struct isp_ccdc_device *ccdc,
-+				struct list_head *queue)
-+{
-+	struct ispccdc_lsc_config_req *req, *n;
-+	unsigned long flags;
-+
-+	spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+	list_for_each_entry_safe(req, n, queue, list) {
-+		list_del(&req->list);
-+		spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+		ccdc_lsc_free_request(ccdc, req);
-+		spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+	}
-+	spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+}
-+
-+static void ccdc_lsc_free_table_work(struct work_struct *work)
-+{
-+	struct isp_ccdc_device *ccdc;
-+	struct ispccdc_lsc *lsc;
-+
-+	lsc = container_of(work, struct ispccdc_lsc, table_work);
-+	ccdc = container_of(lsc, struct isp_ccdc_device, lsc);
-+
-+	ccdc_lsc_free_queue(ccdc, &lsc->free_queue);
-+}
-+
-+/*
-+ * ccdc_lsc_config - Configure the LSC module from a userspace request
-+ *
-+ * Store the request LSC configuration in the LSC engine request pointer. The
-+ * configuration will be applied to the hardware when the CCDC will be enabled,
-+ * or at the next LSC interrupt if the CCDC is already running.
-+ */
-+static int ccdc_lsc_config(struct isp_ccdc_device *ccdc,
-+			   struct omap3isp_ccdc_update_config *config)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	struct ispccdc_lsc_config_req *req;
-+	unsigned long flags;
-+	void *table;
-+	u16 update;
-+	int ret;
-+
-+	update = config->update &
-+		 (OMAP3ISP_CCDC_CONFIG_LSC | OMAP3ISP_CCDC_TBL_LSC);
-+	if (!update)
-+		return 0;
-+
-+	if (update != (OMAP3ISP_CCDC_CONFIG_LSC | OMAP3ISP_CCDC_TBL_LSC)) {
-+		dev_dbg(to_device(ccdc), "%s: Both LSC configuration and table "
-+			"need to be supplied\n", __func__);
-+		return -EINVAL;
-+	}
-+
-+	req = kzalloc(sizeof(*req), GFP_KERNEL);
-+	if (req == NULL)
-+		return -ENOMEM;
-+
-+	if (config->flag & OMAP3ISP_CCDC_CONFIG_LSC) {
-+		if (copy_from_user(&req->config, config->lsc_cfg,
-+				   sizeof(req->config))) {
-+			ret = -EFAULT;
-+			goto done;
-+		}
-+
-+		req->enable = 1;
-+
-+		req->table = iommu_vmalloc(isp->iommu, 0, req->config.size,
-+					   IOMMU_FLAG);
-+		if (IS_ERR_VALUE(req->table)) {
-+			req->table = 0;
-+			ret = -ENOMEM;
-+			goto done;
-+		}
-+
-+		req->iovm = find_iovm_area(isp->iommu, req->table);
-+		if (req->iovm == NULL) {
-+			ret = -ENOMEM;
-+			goto done;
-+		}
-+
-+		if (!dma_map_sg(isp->dev, req->iovm->sgt->sgl,
-+				req->iovm->sgt->nents, DMA_TO_DEVICE)) {
-+			ret = -ENOMEM;
-+			req->iovm = NULL;
-+			goto done;
-+		}
-+
-+		dma_sync_sg_for_cpu(isp->dev, req->iovm->sgt->sgl,
-+				    req->iovm->sgt->nents, DMA_TO_DEVICE);
-+
-+		table = da_to_va(isp->iommu, req->table);
-+		if (copy_from_user(table, config->lsc, req->config.size)) {
-+			ret = -EFAULT;
-+			goto done;
-+		}
-+
-+		dma_sync_sg_for_device(isp->dev, req->iovm->sgt->sgl,
-+				       req->iovm->sgt->nents, DMA_TO_DEVICE);
-+	}
-+
-+	spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+	if (ccdc->lsc.request) {
-+		list_add_tail(&ccdc->lsc.request->list, &ccdc->lsc.free_queue);
-+		schedule_work(&ccdc->lsc.table_work);
-+	}
-+	ccdc->lsc.request = req;
-+	spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+
-+	ret = 0;
-+
-+done:
-+	if (ret < 0)
-+		ccdc_lsc_free_request(ccdc, req);
-+
-+	return ret;
-+}
-+
-+static inline int ccdc_lsc_is_configured(struct isp_ccdc_device *ccdc)
-+{
-+	unsigned long flags;
-+
-+	spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+	if (ccdc->lsc.active) {
-+		spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+		return 1;
-+	}
-+	spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+	return 0;
-+}
-+
-+static int ccdc_lsc_enable(struct isp_ccdc_device *ccdc)
-+{
-+	struct ispccdc_lsc *lsc = &ccdc->lsc;
-+
-+	if (lsc->state != LSC_STATE_STOPPED)
-+		return -EINVAL;
-+
-+	if (lsc->active) {
-+		list_add_tail(&lsc->active->list, &lsc->free_queue);
-+		lsc->active = NULL;
-+	}
-+
-+	if (__ccdc_lsc_configure(ccdc, lsc->request) < 0) {
-+		omap3isp_sbl_disable(to_isp_device(ccdc),
-+				OMAP3_ISP_SBL_CCDC_LSC_READ);
-+		list_add_tail(&lsc->request->list, &lsc->free_queue);
-+		lsc->request = NULL;
-+		goto done;
-+	}
-+
-+	lsc->active = lsc->request;
-+	lsc->request = NULL;
-+	__ccdc_lsc_enable(ccdc, 1);
-+
-+done:
-+	if (!list_empty(&lsc->free_queue))
-+		schedule_work(&lsc->table_work);
-+
-+	return 0;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Parameters configuration
-+ */
-+
-+/*
-+ * ccdc_configure_clamp - Configure optical-black or digital clamping
-+ * @ccdc: Pointer to ISP CCDC device.
-+ *
-+ * The CCDC performs either optical-black or digital clamp. Configure and enable
-+ * the selected clamp method.
-+ */
-+static void ccdc_configure_clamp(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	u32 clamp;
-+
-+	if (ccdc->obclamp) {
-+		clamp  = ccdc->clamp.obgain << ISPCCDC_CLAMP_OBGAIN_SHIFT;
-+		clamp |= ccdc->clamp.oblen << ISPCCDC_CLAMP_OBSLEN_SHIFT;
-+		clamp |= ccdc->clamp.oblines << ISPCCDC_CLAMP_OBSLN_SHIFT;
-+		clamp |= ccdc->clamp.obstpixel << ISPCCDC_CLAMP_OBST_SHIFT;
-+		isp_reg_writel(isp, clamp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_CLAMP);
-+	} else {
-+		isp_reg_writel(isp, ccdc->clamp.dcsubval,
-+			       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_DCSUB);
-+	}
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_CLAMP,
-+			ISPCCDC_CLAMP_CLAMPEN,
-+			ccdc->obclamp ? ISPCCDC_CLAMP_CLAMPEN : 0);
-+}
-+
-+/*
-+ * ccdc_configure_fpc - Configure Faulty Pixel Correction
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_configure_fpc(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FPC, ISPCCDC_FPC_FPCEN);
-+
-+	if (!ccdc->fpc_en)
-+		return;
-+
-+	isp_reg_writel(isp, ccdc->fpc.fpcaddr, OMAP3_ISP_IOMEM_CCDC,
-+		       ISPCCDC_FPC_ADDR);
-+	/* The FPNUM field must be set before enabling FPC. */
-+	isp_reg_writel(isp, (ccdc->fpc.fpnum << ISPCCDC_FPC_FPNUM_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FPC);
-+	isp_reg_writel(isp, (ccdc->fpc.fpnum << ISPCCDC_FPC_FPNUM_SHIFT) |
-+		       ISPCCDC_FPC_FPCEN, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FPC);
-+}
-+
-+/*
-+ * ccdc_configure_black_comp - Configure Black Level Compensation.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_configure_black_comp(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	u32 blcomp;
-+
-+	blcomp  = ccdc->blcomp.b_mg << ISPCCDC_BLKCMP_B_MG_SHIFT;
-+	blcomp |= ccdc->blcomp.gb_g << ISPCCDC_BLKCMP_GB_G_SHIFT;
-+	blcomp |= ccdc->blcomp.gr_cy << ISPCCDC_BLKCMP_GR_CY_SHIFT;
-+	blcomp |= ccdc->blcomp.r_ye << ISPCCDC_BLKCMP_R_YE_SHIFT;
-+
-+	isp_reg_writel(isp, blcomp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_BLKCMP);
-+}
-+
-+/*
-+ * ccdc_configure_lpf - Configure Low-Pass Filter (LPF).
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_configure_lpf(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SYN_MODE,
-+			ISPCCDC_SYN_MODE_LPF,
-+			ccdc->lpf ? ISPCCDC_SYN_MODE_LPF : 0);
-+}
-+
-+/*
-+ * ccdc_configure_alaw - Configure A-law compression.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_configure_alaw(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	u32 alaw = 0;
-+
-+	switch (ccdc->syncif.datsz) {
-+	case 8:
-+		return;
-+
-+	case 10:
-+		alaw = ISPCCDC_ALAW_GWDI_9_0;
-+		break;
-+	case 11:
-+		alaw = ISPCCDC_ALAW_GWDI_10_1;
-+		break;
-+	case 12:
-+		alaw = ISPCCDC_ALAW_GWDI_11_2;
-+		break;
-+	case 13:
-+		alaw = ISPCCDC_ALAW_GWDI_12_3;
-+		break;
-+	}
-+
-+	if (ccdc->alaw)
-+		alaw |= ISPCCDC_ALAW_CCDTBL;
-+
-+	isp_reg_writel(isp, alaw, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_ALAW);
-+}
-+
-+/*
-+ * ccdc_config_imgattr - Configure sensor image specific attributes.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @colptn: Color pattern of the sensor.
-+ */
-+static void ccdc_config_imgattr(struct isp_ccdc_device *ccdc, u32 colptn)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_writel(isp, colptn, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_COLPTN);
-+}
-+
-+/*
-+ * ccdc_config - Set CCDC configuration from userspace
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @userspace_add: Structure containing CCDC configuration sent from userspace.
-+ *
-+ * Returns 0 if successful, -EINVAL if the pointer to the configuration
-+ * structure is null, or the copy_from_user function fails to copy user space
-+ * memory to kernel space memory.
-+ */
-+static int ccdc_config(struct isp_ccdc_device *ccdc,
-+		       struct omap3isp_ccdc_update_config *ccdc_struct)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	unsigned long flags;
-+
-+	spin_lock_irqsave(&ccdc->lock, flags);
-+	ccdc->shadow_update = 1;
-+	spin_unlock_irqrestore(&ccdc->lock, flags);
-+
-+	if (OMAP3ISP_CCDC_ALAW & ccdc_struct->update) {
-+		ccdc->alaw = !!(OMAP3ISP_CCDC_ALAW & ccdc_struct->flag);
-+		ccdc->update |= OMAP3ISP_CCDC_ALAW;
-+	}
-+
-+	if (OMAP3ISP_CCDC_LPF & ccdc_struct->update) {
-+		ccdc->lpf = !!(OMAP3ISP_CCDC_LPF & ccdc_struct->flag);
-+		ccdc->update |= OMAP3ISP_CCDC_LPF;
-+	}
-+
-+	if (OMAP3ISP_CCDC_BLCLAMP & ccdc_struct->update) {
-+		if (copy_from_user(&ccdc->clamp, ccdc_struct->bclamp,
-+				   sizeof(ccdc->clamp))) {
-+			ccdc->shadow_update = 0;
-+			return -EFAULT;
-+		}
-+
-+		ccdc->obclamp = !!(OMAP3ISP_CCDC_BLCLAMP & ccdc_struct->flag);
-+		ccdc->update |= OMAP3ISP_CCDC_BLCLAMP;
-+	}
-+
-+	if (OMAP3ISP_CCDC_BCOMP & ccdc_struct->update) {
-+		if (copy_from_user(&ccdc->blcomp, ccdc_struct->blcomp,
-+				   sizeof(ccdc->blcomp))) {
-+			ccdc->shadow_update = 0;
-+			return -EFAULT;
-+		}
-+
-+		ccdc->update |= OMAP3ISP_CCDC_BCOMP;
-+	}
-+
-+	ccdc->shadow_update = 0;
-+
-+	if (OMAP3ISP_CCDC_FPC & ccdc_struct->update) {
-+		u32 table_old = 0;
-+		u32 table_new;
-+		u32 size;
-+
-+		if (ccdc->state != ISP_PIPELINE_STREAM_STOPPED)
-+			return -EBUSY;
-+
-+		ccdc->fpc_en = !!(OMAP3ISP_CCDC_FPC & ccdc_struct->flag);
-+
-+		if (ccdc->fpc_en) {
-+			if (copy_from_user(&ccdc->fpc, ccdc_struct->fpc,
-+					   sizeof(ccdc->fpc)))
-+				return -EFAULT;
-+
-+			/*
-+			 * table_new must be 64-bytes aligned, but it's
-+			 * already done by iommu_vmalloc().
-+			 */
-+			size = ccdc->fpc.fpnum * 4;
-+			table_new = iommu_vmalloc(isp->iommu, 0, size,
-+						  IOMMU_FLAG);
-+			if (IS_ERR_VALUE(table_new))
-+				return -ENOMEM;
-+
-+			if (copy_from_user(da_to_va(isp->iommu, table_new),
-+					   (__force void __user *)
-+					   ccdc->fpc.fpcaddr, size)) {
-+				iommu_vfree(isp->iommu, table_new);
-+				return -EFAULT;
-+			}
-+
-+			table_old = ccdc->fpc.fpcaddr;
-+			ccdc->fpc.fpcaddr = table_new;
-+		}
-+
-+		ccdc_configure_fpc(ccdc);
-+		if (table_old != 0)
-+			iommu_vfree(isp->iommu, table_old);
-+	}
-+
-+	return ccdc_lsc_config(ccdc, ccdc_struct);
-+}
-+
-+static void ccdc_apply_controls(struct isp_ccdc_device *ccdc)
-+{
-+	if (ccdc->update & OMAP3ISP_CCDC_ALAW) {
-+		ccdc_configure_alaw(ccdc);
-+		ccdc->update &= ~OMAP3ISP_CCDC_ALAW;
-+	}
-+
-+	if (ccdc->update & OMAP3ISP_CCDC_LPF) {
-+		ccdc_configure_lpf(ccdc);
-+		ccdc->update &= ~OMAP3ISP_CCDC_LPF;
-+	}
-+
-+	if (ccdc->update & OMAP3ISP_CCDC_BLCLAMP) {
-+		ccdc_configure_clamp(ccdc);
-+		ccdc->update &= ~OMAP3ISP_CCDC_BLCLAMP;
-+	}
-+
-+	if (ccdc->update & OMAP3ISP_CCDC_BCOMP) {
-+		ccdc_configure_black_comp(ccdc);
-+		ccdc->update &= ~OMAP3ISP_CCDC_BCOMP;
-+	}
-+}
-+
-+/*
-+ * omap3isp_ccdc_restore_context - Restore values of the CCDC module registers
-+ * @dev: Pointer to ISP device
-+ */
-+void omap3isp_ccdc_restore_context(struct isp_device *isp)
-+{
-+	struct isp_ccdc_device *ccdc = &isp->isp_ccdc;
-+
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_CFG, ISPCCDC_CFG_VDLC);
-+
-+	ccdc->update = OMAP3ISP_CCDC_ALAW | OMAP3ISP_CCDC_LPF
-+		     | OMAP3ISP_CCDC_BLCLAMP | OMAP3ISP_CCDC_BCOMP;
-+	ccdc_apply_controls(ccdc);
-+	ccdc_configure_fpc(ccdc);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Format- and pipeline-related configuration helpers
-+ */
-+
-+/*
-+ * ccdc_config_vp - Configure the Video Port.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_config_vp(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&ccdc->subdev.entity);
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	unsigned long l3_ick = pipe->l3_ick;
-+	unsigned int max_div = isp->revision == ISP_REVISION_15_0 ? 64 : 8;
-+	unsigned int div = 0;
-+	u32 fmtcfg_vp;
-+
-+	fmtcfg_vp = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FMTCFG)
-+		  & ~(ISPCCDC_FMTCFG_VPIN_MASK | ISPCCDC_FMTCFG_VPIF_FRQ_MASK);
-+
-+	switch (ccdc->syncif.datsz) {
-+	case 8:
-+	case 10:
-+		fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_9_0;
-+		break;
-+	case 11:
-+		fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_10_1;
-+		break;
-+	case 12:
-+		fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_11_2;
-+		break;
-+	case 13:
-+		fmtcfg_vp |= ISPCCDC_FMTCFG_VPIN_12_3;
-+		break;
-+	};
-+
-+	if (pipe->input)
-+		div = DIV_ROUND_UP(l3_ick, pipe->max_rate);
-+	else if (ccdc->vpcfg.pixelclk)
-+		div = l3_ick / ccdc->vpcfg.pixelclk;
-+
-+	div = clamp(div, 2U, max_div);
-+	fmtcfg_vp |= (div - 2) << ISPCCDC_FMTCFG_VPIF_FRQ_SHIFT;
-+
-+	isp_reg_writel(isp, fmtcfg_vp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FMTCFG);
-+}
-+
-+/*
-+ * ccdc_enable_vp - Enable Video Port.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @enable: 0 Disables VP, 1 Enables VP
-+ *
-+ * This is needed for outputting image to Preview, H3A and HIST ISP submodules.
-+ */
-+static void ccdc_enable_vp(struct isp_ccdc_device *ccdc, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FMTCFG,
-+			ISPCCDC_FMTCFG_VPEN, enable ? ISPCCDC_FMTCFG_VPEN : 0);
-+}
-+
-+/*
-+ * ccdc_config_outlineoffset - Configure memory saving output line offset
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @offset: Address offset to start a new line. Must be twice the
-+ *          Output width and aligned on 32 byte boundary
-+ * @oddeven: Specifies the odd/even line pattern to be chosen to store the
-+ *           output.
-+ * @numlines: Set the value 0-3 for +1-4lines, 4-7 for -1-4lines.
-+ *
-+ * - Configures the output line offset when stored in memory
-+ * - Sets the odd/even line pattern to store the output
-+ *    (EVENEVEN (1), ODDEVEN (2), EVENODD (3), ODDODD (4))
-+ * - Configures the number of even and odd line fields in case of rearranging
-+ * the lines.
-+ */
-+static void ccdc_config_outlineoffset(struct isp_ccdc_device *ccdc,
-+					u32 offset, u8 oddeven, u8 numlines)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_writel(isp, offset & 0xffff,
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_HSIZE_OFF);
-+
-+	isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDOFST,
-+		    ISPCCDC_SDOFST_FINV);
-+
-+	isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDOFST,
-+		    ISPCCDC_SDOFST_FOFST_4L);
-+
-+	switch (oddeven) {
-+	case EVENEVEN:
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDOFST,
-+			    (numlines & 0x7) << ISPCCDC_SDOFST_LOFST0_SHIFT);
-+		break;
-+	case ODDEVEN:
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDOFST,
-+			    (numlines & 0x7) << ISPCCDC_SDOFST_LOFST1_SHIFT);
-+		break;
-+	case EVENODD:
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDOFST,
-+			    (numlines & 0x7) << ISPCCDC_SDOFST_LOFST2_SHIFT);
-+		break;
-+	case ODDODD:
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDOFST,
-+			    (numlines & 0x7) << ISPCCDC_SDOFST_LOFST3_SHIFT);
-+		break;
-+	default:
-+		break;
-+	}
-+}
-+
-+/*
-+ * ccdc_set_outaddr - Set memory address to save output image
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @addr: ISP MMU Mapped 32-bit memory address aligned on 32 byte boundary.
-+ *
-+ * Sets the memory address where the output will be saved.
-+ */
-+static void ccdc_set_outaddr(struct isp_ccdc_device *ccdc, u32 addr)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_writel(isp, addr, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SDR_ADDR);
-+}
-+
-+/*
-+ * omap3isp_ccdc_max_rate - Calculate maximum input data rate based on the input
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @max_rate: Maximum calculated data rate.
-+ *
-+ * Returns in *max_rate less value between calculated and passed
-+ */
-+void omap3isp_ccdc_max_rate(struct isp_ccdc_device *ccdc,
-+			    unsigned int *max_rate)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&ccdc->subdev.entity);
-+	unsigned int rate;
-+
-+	if (pipe == NULL)
-+		return;
-+
-+	/*
-+	 * TRM says that for parallel sensors the maximum data rate
-+	 * should be 90% form L3/2 clock, otherwise just L3/2.
-+	 */
-+	if (ccdc->input == CCDC_INPUT_PARALLEL)
-+		rate = pipe->l3_ick / 2 * 9 / 10;
-+	else
-+		rate = pipe->l3_ick / 2;
-+
-+	*max_rate = min(*max_rate, rate);
-+}
-+
-+/*
-+ * ccdc_config_sync_if - Set CCDC sync interface configuration
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @syncif: Structure containing the sync parameters like field state, CCDC in
-+ *          master/slave mode, raw/yuv data, polarity of data, field, hs, vs
-+ *          signals.
-+ */
-+static void ccdc_config_sync_if(struct isp_ccdc_device *ccdc,
-+				struct ispccdc_syncif *syncif)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	u32 syn_mode = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC,
-+				     ISPCCDC_SYN_MODE);
-+
-+	syn_mode |= ISPCCDC_SYN_MODE_VDHDEN;
-+
-+	if (syncif->fldstat)
-+		syn_mode |= ISPCCDC_SYN_MODE_FLDSTAT;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_FLDSTAT;
-+
-+	syn_mode &= ~ISPCCDC_SYN_MODE_DATSIZ_MASK;
-+	switch (syncif->datsz) {
-+	case 8:
-+		syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_8;
-+		break;
-+	case 10:
-+		syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_10;
-+		break;
-+	case 11:
-+		syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_11;
-+		break;
-+	case 12:
-+		syn_mode |= ISPCCDC_SYN_MODE_DATSIZ_12;
-+		break;
-+	};
-+
-+	if (syncif->fldmode)
-+		syn_mode |= ISPCCDC_SYN_MODE_FLDMODE;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_FLDMODE;
-+
-+	if (syncif->datapol)
-+		syn_mode |= ISPCCDC_SYN_MODE_DATAPOL;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_DATAPOL;
-+
-+	if (syncif->fldpol)
-+		syn_mode |= ISPCCDC_SYN_MODE_FLDPOL;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_FLDPOL;
-+
-+	if (syncif->hdpol)
-+		syn_mode |= ISPCCDC_SYN_MODE_HDPOL;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_HDPOL;
-+
-+	if (syncif->vdpol)
-+		syn_mode |= ISPCCDC_SYN_MODE_VDPOL;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_VDPOL;
-+
-+	if (syncif->ccdc_mastermode) {
-+		syn_mode |= ISPCCDC_SYN_MODE_FLDOUT | ISPCCDC_SYN_MODE_VDHDOUT;
-+		isp_reg_writel(isp,
-+			       syncif->hs_width << ISPCCDC_HD_VD_WID_HDW_SHIFT
-+			     | syncif->vs_width << ISPCCDC_HD_VD_WID_VDW_SHIFT,
-+			       OMAP3_ISP_IOMEM_CCDC,
-+			       ISPCCDC_HD_VD_WID);
-+
-+		isp_reg_writel(isp,
-+			       syncif->ppln << ISPCCDC_PIX_LINES_PPLN_SHIFT
-+			     | syncif->hlprf << ISPCCDC_PIX_LINES_HLPRF_SHIFT,
-+			       OMAP3_ISP_IOMEM_CCDC,
-+			       ISPCCDC_PIX_LINES);
-+	} else
-+		syn_mode &= ~(ISPCCDC_SYN_MODE_FLDOUT |
-+			      ISPCCDC_SYN_MODE_VDHDOUT);
-+
-+	isp_reg_writel(isp, syn_mode, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SYN_MODE);
-+
-+	if (!syncif->bt_r656_en)
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_REC656IF,
-+			    ISPCCDC_REC656IF_R656ON);
-+}
-+
-+/* CCDC formats descriptions */
-+static const u32 ccdc_sgrbg_pattern =
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP0PLC0_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP0PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP0PLC2_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP0PLC3_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP1PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP1PLC1_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP1PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP1PLC3_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP2PLC0_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP2PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP2PLC2_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP2PLC3_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP3PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP3PLC1_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP3PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP3PLC3_SHIFT;
-+
-+static const u32 ccdc_srggb_pattern =
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP0PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP0PLC1_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP0PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP0PLC3_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP1PLC0_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP1PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP1PLC2_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP1PLC3_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP2PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP2PLC1_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP2PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP2PLC3_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP3PLC0_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP3PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP3PLC2_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP3PLC3_SHIFT;
-+
-+static const u32 ccdc_sbggr_pattern =
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP0PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP0PLC1_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP0PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP0PLC3_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP1PLC0_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP1PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP1PLC2_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP1PLC3_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP2PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP2PLC1_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP2PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP2PLC3_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP3PLC0_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP3PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP3PLC2_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP3PLC3_SHIFT;
-+
-+static const u32 ccdc_sgbrg_pattern =
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP0PLC0_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP0PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP0PLC2_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP0PLC3_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP1PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP1PLC1_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP1PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP1PLC3_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP2PLC0_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP2PLC1_SHIFT |
-+	ISPCCDC_COLPTN_Gb_G  << ISPCCDC_COLPTN_CP2PLC2_SHIFT |
-+	ISPCCDC_COLPTN_B_Mg  << ISPCCDC_COLPTN_CP2PLC3_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP3PLC0_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP3PLC1_SHIFT |
-+	ISPCCDC_COLPTN_R_Ye  << ISPCCDC_COLPTN_CP3PLC2_SHIFT |
-+	ISPCCDC_COLPTN_Gr_Cy << ISPCCDC_COLPTN_CP3PLC3_SHIFT;
-+
-+static void ccdc_configure(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	struct isp_parallel_platform_data *pdata = NULL;
-+	struct v4l2_subdev *sensor;
-+	struct v4l2_mbus_framefmt *format;
-+	struct media_pad *pad;
-+	unsigned long flags;
-+	u32 syn_mode;
-+	u32 ccdc_pattern;
-+
-+	if (ccdc->input == CCDC_INPUT_PARALLEL) {
-+		pad = media_entity_remote_source(&ccdc->pads[CCDC_PAD_SINK]);
-+		sensor = media_entity_to_v4l2_subdev(pad->entity);
-+		pdata = &((struct isp_v4l2_subdevs_group *)sensor->host_priv)
-+			->bus.parallel;
-+	}
-+
-+	omap3isp_configure_bridge(isp, ccdc->input, pdata);
-+
-+	ccdc->syncif.datsz = pdata ? pdata->width : 10;
-+	ccdc_config_sync_if(ccdc, &ccdc->syncif);
-+
-+	/* CCDC_PAD_SINK */
-+	format = &ccdc->formats[CCDC_PAD_SINK];
-+
-+	syn_mode = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SYN_MODE);
-+
-+	/* Use the raw, unprocessed data when writing to memory. The H3A and
-+	 * histogram modules are still fed with lens shading corrected data.
-+	 */
-+	syn_mode &= ~ISPCCDC_SYN_MODE_VP2SDR;
-+
-+	if (ccdc->output & CCDC_OUTPUT_MEMORY)
-+		syn_mode |= ISPCCDC_SYN_MODE_WEN;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_WEN;
-+
-+	if (ccdc->output & CCDC_OUTPUT_RESIZER)
-+		syn_mode |= ISPCCDC_SYN_MODE_SDR2RSZ;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_SDR2RSZ;
-+
-+	/* Use PACK8 mode for 1byte per pixel formats. */
-+	if (omap3isp_video_format_info(format->code)->bpp <= 8)
-+		syn_mode |= ISPCCDC_SYN_MODE_PACK8;
-+	else
-+		syn_mode &= ~ISPCCDC_SYN_MODE_PACK8;
-+
-+	isp_reg_writel(isp, syn_mode, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SYN_MODE);
-+
-+	/* Mosaic filter */
-+	switch (format->code) {
-+	case V4L2_MBUS_FMT_SRGGB10_1X10:
-+	case V4L2_MBUS_FMT_SRGGB12_1X12:
-+		ccdc_pattern = ccdc_srggb_pattern;
-+		break;
-+	case V4L2_MBUS_FMT_SBGGR10_1X10:
-+	case V4L2_MBUS_FMT_SBGGR12_1X12:
-+		ccdc_pattern = ccdc_sbggr_pattern;
-+		break;
-+	case V4L2_MBUS_FMT_SGBRG10_1X10:
-+	case V4L2_MBUS_FMT_SGBRG12_1X12:
-+		ccdc_pattern = ccdc_sgbrg_pattern;
-+		break;
-+	default:
-+		/* Use GRBG */
-+		ccdc_pattern = ccdc_sgrbg_pattern;
-+		break;
-+	}
-+	ccdc_config_imgattr(ccdc, ccdc_pattern);
-+
-+	/* Generate VD0 on the last line of the image and VD1 on the
-+	 * 2/3 height line.
-+	 */
-+	isp_reg_writel(isp, ((format->height - 2) << ISPCCDC_VDINT_0_SHIFT) |
-+		       ((format->height * 2 / 3) << ISPCCDC_VDINT_1_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_VDINT);
-+
-+	/* CCDC_PAD_SOURCE_OF */
-+	format = &ccdc->formats[CCDC_PAD_SOURCE_OF];
-+
-+	isp_reg_writel(isp, (0 << ISPCCDC_HORZ_INFO_SPH_SHIFT) |
-+		       ((format->width - 1) << ISPCCDC_HORZ_INFO_NPH_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_HORZ_INFO);
-+	isp_reg_writel(isp, 0 << ISPCCDC_VERT_START_SLV0_SHIFT,
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_VERT_START);
-+	isp_reg_writel(isp, (format->height - 1)
-+			<< ISPCCDC_VERT_LINES_NLV_SHIFT,
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_VERT_LINES);
-+
-+	ccdc_config_outlineoffset(ccdc, ccdc->video_out.bpl_value, 0, 0);
-+
-+	/* CCDC_PAD_SOURCE_VP */
-+	format = &ccdc->formats[CCDC_PAD_SOURCE_VP];
-+
-+	isp_reg_writel(isp, (0 << ISPCCDC_FMT_HORZ_FMTSPH_SHIFT) |
-+		       (format->width << ISPCCDC_FMT_HORZ_FMTLNH_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FMT_HORZ);
-+	isp_reg_writel(isp, (0 << ISPCCDC_FMT_VERT_FMTSLV_SHIFT) |
-+		       ((format->height + 1) << ISPCCDC_FMT_VERT_FMTLNV_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_FMT_VERT);
-+
-+	isp_reg_writel(isp, (format->width << ISPCCDC_VP_OUT_HORZ_NUM_SHIFT) |
-+		       (format->height << ISPCCDC_VP_OUT_VERT_NUM_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCDC, ISPCCDC_VP_OUT);
-+
-+	spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+	if (ccdc->lsc.request == NULL)
-+		goto unlock;
-+
-+	WARN_ON(ccdc->lsc.active);
-+
-+	/* Get last good LSC configuration. If it is not supported for
-+	 * the current active resolution discard it.
-+	 */
-+	if (ccdc->lsc.active == NULL &&
-+	    __ccdc_lsc_configure(ccdc, ccdc->lsc.request) == 0) {
-+		ccdc->lsc.active = ccdc->lsc.request;
-+	} else {
-+		list_add_tail(&ccdc->lsc.request->list, &ccdc->lsc.free_queue);
-+		schedule_work(&ccdc->lsc.table_work);
-+	}
-+
-+	ccdc->lsc.request = NULL;
-+
-+unlock:
-+	spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+
-+	ccdc_apply_controls(ccdc);
-+}
-+
-+static void __ccdc_enable(struct isp_ccdc_device *ccdc, int enable)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_PCR,
-+			ISPCCDC_PCR_EN, enable ? ISPCCDC_PCR_EN : 0);
-+}
-+
-+static int ccdc_disable(struct isp_ccdc_device *ccdc)
-+{
-+	unsigned long flags;
-+	int ret = 0;
-+
-+	spin_lock_irqsave(&ccdc->lock, flags);
-+	if (ccdc->state == ISP_PIPELINE_STREAM_CONTINUOUS)
-+		ccdc->stopping = CCDC_STOP_REQUEST;
-+	spin_unlock_irqrestore(&ccdc->lock, flags);
-+
-+	ret = wait_event_timeout(ccdc->wait,
-+				 ccdc->stopping == CCDC_STOP_FINISHED,
-+				 msecs_to_jiffies(2000));
-+	if (ret == 0) {
-+		ret = -ETIMEDOUT;
-+		dev_warn(to_device(ccdc), "CCDC stop timeout!\n");
-+	}
-+
-+	omap3isp_sbl_disable(to_isp_device(ccdc), OMAP3_ISP_SBL_CCDC_LSC_READ);
-+
-+	mutex_lock(&ccdc->ioctl_lock);
-+	ccdc_lsc_free_request(ccdc, ccdc->lsc.request);
-+	ccdc->lsc.request = ccdc->lsc.active;
-+	ccdc->lsc.active = NULL;
-+	cancel_work_sync(&ccdc->lsc.table_work);
-+	ccdc_lsc_free_queue(ccdc, &ccdc->lsc.free_queue);
-+	mutex_unlock(&ccdc->ioctl_lock);
-+
-+	ccdc->stopping = CCDC_STOP_NOT_REQUESTED;
-+
-+	return ret > 0 ? 0 : ret;
-+}
-+
-+static void ccdc_enable(struct isp_ccdc_device *ccdc)
-+{
-+	if (ccdc_lsc_is_configured(ccdc))
-+		__ccdc_lsc_enable(ccdc, 1);
-+	__ccdc_enable(ccdc, 1);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Interrupt handling
-+ */
-+
-+/*
-+ * ccdc_sbl_busy - Poll idle state of CCDC and related SBL memory write bits
-+ * @ccdc: Pointer to ISP CCDC device.
-+ *
-+ * Returns zero if the CCDC is idle and the image has been written to
-+ * memory, too.
-+ */
-+static int ccdc_sbl_busy(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	return omap3isp_ccdc_busy(ccdc)
-+		| (isp_reg_readl(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_CCDC_WR_0) &
-+		   ISPSBL_CCDC_WR_0_DATA_READY)
-+		| (isp_reg_readl(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_CCDC_WR_1) &
-+		   ISPSBL_CCDC_WR_0_DATA_READY)
-+		| (isp_reg_readl(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_CCDC_WR_2) &
-+		   ISPSBL_CCDC_WR_0_DATA_READY)
-+		| (isp_reg_readl(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_CCDC_WR_3) &
-+		   ISPSBL_CCDC_WR_0_DATA_READY);
-+}
-+
-+/*
-+ * ccdc_sbl_wait_idle - Wait until the CCDC and related SBL are idle
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @max_wait: Max retry count in us for wait for idle/busy transition.
-+ */
-+static int ccdc_sbl_wait_idle(struct isp_ccdc_device *ccdc,
-+			      unsigned int max_wait)
-+{
-+	unsigned int wait = 0;
-+
-+	if (max_wait == 0)
-+		max_wait = 10000; /* 10 ms */
-+
-+	for (wait = 0; wait <= max_wait; wait++) {
-+		if (!ccdc_sbl_busy(ccdc))
-+			return 0;
-+
-+		rmb();
-+		udelay(1);
-+	}
-+
-+	return -EBUSY;
-+}
-+
-+/* __ccdc_handle_stopping - Handle CCDC and/or LSC stopping sequence
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @event: Pointing which event trigger handler
-+ *
-+ * Return 1 when the event and stopping request combination is satisfyied,
-+ * zero otherwise.
-+ */
-+static int __ccdc_handle_stopping(struct isp_ccdc_device *ccdc, u32 event)
-+{
-+	int rval = 0;
-+
-+	switch ((ccdc->stopping & 3) | event) {
-+	case CCDC_STOP_REQUEST | CCDC_EVENT_VD1:
-+		if (ccdc->lsc.state != LSC_STATE_STOPPED)
-+			__ccdc_lsc_enable(ccdc, 0);
-+		__ccdc_enable(ccdc, 0);
-+		ccdc->stopping = CCDC_STOP_EXECUTED;
-+		return 1;
-+
-+	case CCDC_STOP_EXECUTED | CCDC_EVENT_VD0:
-+		ccdc->stopping |= CCDC_STOP_CCDC_FINISHED;
-+		if (ccdc->lsc.state == LSC_STATE_STOPPED)
-+			ccdc->stopping |= CCDC_STOP_LSC_FINISHED;
-+		rval = 1;
-+		break;
-+
-+	case CCDC_STOP_EXECUTED | CCDC_EVENT_LSC_DONE:
-+		ccdc->stopping |= CCDC_STOP_LSC_FINISHED;
-+		rval = 1;
-+		break;
-+
-+	case CCDC_STOP_EXECUTED | CCDC_EVENT_VD1:
-+		return 1;
-+	}
-+
-+	if (ccdc->stopping == CCDC_STOP_FINISHED) {
-+		wake_up(&ccdc->wait);
-+		rval = 1;
-+	}
-+
-+	return rval;
-+}
-+
-+static void ccdc_hs_vs_isr(struct isp_ccdc_device *ccdc)
-+{
-+	struct video_device *vdev = &ccdc->subdev.devnode;
-+	struct v4l2_event event;
-+
-+	memset(&event, 0, sizeof(event));
-+	event.type = V4L2_EVENT_OMAP3ISP_HS_VS;
-+
-+	v4l2_event_queue(vdev, &event);
-+}
-+
-+/*
-+ * ccdc_lsc_isr - Handle LSC events
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @events: LSC events
-+ */
-+static void ccdc_lsc_isr(struct isp_ccdc_device *ccdc, u32 events)
-+{
-+	unsigned long flags;
-+
-+	if (events & IRQ0STATUS_CCDC_LSC_PREF_ERR_IRQ) {
-+		ccdc_lsc_error_handler(ccdc);
-+		ccdc->error = 1;
-+		dev_dbg(to_device(ccdc), "lsc prefetch error\n");
-+	}
-+
-+	if (!(events & IRQ0STATUS_CCDC_LSC_DONE_IRQ))
-+		return;
-+
-+	/* LSC_DONE interrupt occur, there are two cases
-+	 * 1. stopping for reconfiguration
-+	 * 2. stopping because of STREAM OFF command
-+	 */
-+	spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+
-+	if (ccdc->lsc.state == LSC_STATE_STOPPING)
-+		ccdc->lsc.state = LSC_STATE_STOPPED;
-+
-+	if (__ccdc_handle_stopping(ccdc, CCDC_EVENT_LSC_DONE))
-+		goto done;
-+
-+	if (ccdc->lsc.state != LSC_STATE_RECONFIG)
-+		goto done;
-+
-+	/* LSC is in STOPPING state, change to the new state */
-+	ccdc->lsc.state = LSC_STATE_STOPPED;
-+
-+	/* This is an exception. Start of frame and LSC_DONE interrupt
-+	 * have been received on the same time. Skip this event and wait
-+	 * for better times.
-+	 */
-+	if (events & IRQ0STATUS_HS_VS_IRQ)
-+		goto done;
-+
-+	/* The LSC engine is stopped at this point. Enable it if there's a
-+	 * pending request.
-+	 */
-+	if (ccdc->lsc.request == NULL)
-+		goto done;
-+
-+	ccdc_lsc_enable(ccdc);
-+
-+done:
-+	spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+}
-+
-+static int ccdc_isr_buffer(struct isp_ccdc_device *ccdc)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&ccdc->subdev.entity);
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	struct isp_buffer *buffer;
-+	int restart = 0;
-+
-+	/* The CCDC generates VD0 interrupts even when disabled (the datasheet
-+	 * doesn't explicitly state if that's supposed to happen or not, so it
-+	 * can be considered as a hardware bug or as a feature, but we have to
-+	 * deal with it anyway). Disabling the CCDC when no buffer is available
-+	 * would thus not be enough, we need to handle the situation explicitly.
-+	 */
-+	if (list_empty(&ccdc->video_out.dmaqueue))
-+		goto done;
-+
-+	/* We're in continuous mode, and memory writes were disabled due to a
-+	 * buffer underrun. Reenable them now that we have a buffer. The buffer
-+	 * address has been set in ccdc_video_queue.
-+	 */
-+	if (ccdc->state == ISP_PIPELINE_STREAM_CONTINUOUS && ccdc->underrun) {
-+		restart = 1;
-+		ccdc->underrun = 0;
-+		goto done;
-+	}
-+
-+	if (ccdc_sbl_wait_idle(ccdc, 1000)) {
-+		dev_info(isp->dev, "CCDC won't become idle!\n");
-+		goto done;
-+	}
-+
-+	buffer = omap3isp_video_buffer_next(&ccdc->video_out, ccdc->error);
-+	if (buffer != NULL) {
-+		ccdc_set_outaddr(ccdc, buffer->isp_addr);
-+		restart = 1;
-+	}
-+
-+	pipe->state |= ISP_PIPELINE_IDLE_OUTPUT;
-+
-+	if (ccdc->state == ISP_PIPELINE_STREAM_SINGLESHOT &&
-+	    isp_pipeline_ready(pipe))
-+		omap3isp_pipeline_set_stream(pipe,
-+					ISP_PIPELINE_STREAM_SINGLESHOT);
-+
-+done:
-+	ccdc->error = 0;
-+	return restart;
-+}
-+
-+/*
-+ * ccdc_vd0_isr - Handle VD0 event
-+ * @ccdc: Pointer to ISP CCDC device.
-+ *
-+ * Executes LSC deferred enablement before next frame starts.
-+ */
-+static void ccdc_vd0_isr(struct isp_ccdc_device *ccdc)
-+{
-+	unsigned long flags;
-+	int restart = 0;
-+
-+	if (ccdc->output & CCDC_OUTPUT_MEMORY)
-+		restart = ccdc_isr_buffer(ccdc);
-+
-+	spin_lock_irqsave(&ccdc->lock, flags);
-+	if (__ccdc_handle_stopping(ccdc, CCDC_EVENT_VD0)) {
-+		spin_unlock_irqrestore(&ccdc->lock, flags);
-+		return;
-+	}
-+
-+	if (!ccdc->shadow_update)
-+		ccdc_apply_controls(ccdc);
-+	spin_unlock_irqrestore(&ccdc->lock, flags);
-+
-+	if (restart)
-+		ccdc_enable(ccdc);
-+}
-+
-+/*
-+ * ccdc_vd1_isr - Handle VD1 event
-+ * @ccdc: Pointer to ISP CCDC device.
-+ */
-+static void ccdc_vd1_isr(struct isp_ccdc_device *ccdc)
-+{
-+	unsigned long flags;
-+
-+	spin_lock_irqsave(&ccdc->lsc.req_lock, flags);
-+
-+	/*
-+	 * Depending on the CCDC pipeline state, CCDC stopping should be
-+	 * handled differently. In SINGLESHOT we emulate an internal CCDC
-+	 * stopping because the CCDC hw works only in continuous mode.
-+	 * When CONTINUOUS pipeline state is used and the CCDC writes it's
-+	 * data to memory the CCDC and LSC are stopped immediately but
-+	 * without change the CCDC stopping state machine. The CCDC
-+	 * stopping state machine should be used only when user request
-+	 * for stopping is received (SINGLESHOT is an exeption).
-+	 */
-+	switch (ccdc->state) {
-+	case ISP_PIPELINE_STREAM_SINGLESHOT:
-+		ccdc->stopping = CCDC_STOP_REQUEST;
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		if (ccdc->output & CCDC_OUTPUT_MEMORY) {
-+			if (ccdc->lsc.state != LSC_STATE_STOPPED)
-+				__ccdc_lsc_enable(ccdc, 0);
-+			__ccdc_enable(ccdc, 0);
-+		}
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+		break;
-+	}
-+
-+	if (__ccdc_handle_stopping(ccdc, CCDC_EVENT_VD1))
-+		goto done;
-+
-+	if (ccdc->lsc.request == NULL)
-+		goto done;
-+
-+	/*
-+	 * LSC need to be reconfigured. Stop it here and on next LSC_DONE IRQ
-+	 * do the appropriate changes in registers
-+	 */
-+	if (ccdc->lsc.state == LSC_STATE_RUNNING) {
-+		__ccdc_lsc_enable(ccdc, 0);
-+		ccdc->lsc.state = LSC_STATE_RECONFIG;
-+		goto done;
-+	}
-+
-+	/* LSC has been in STOPPED state, enable it */
-+	if (ccdc->lsc.state == LSC_STATE_STOPPED)
-+		ccdc_lsc_enable(ccdc);
-+
-+done:
-+	spin_unlock_irqrestore(&ccdc->lsc.req_lock, flags);
-+}
-+
-+/*
-+ * omap3isp_ccdc_isr - Configure CCDC during interframe time.
-+ * @ccdc: Pointer to ISP CCDC device.
-+ * @events: CCDC events
-+ */
-+int omap3isp_ccdc_isr(struct isp_ccdc_device *ccdc, u32 events)
-+{
-+	if (ccdc->state == ISP_PIPELINE_STREAM_STOPPED)
-+		return 0;
-+
-+	if (events & IRQ0STATUS_CCDC_VD1_IRQ)
-+		ccdc_vd1_isr(ccdc);
-+
-+	ccdc_lsc_isr(ccdc, events);
-+
-+	if (events & IRQ0STATUS_CCDC_VD0_IRQ)
-+		ccdc_vd0_isr(ccdc);
-+
-+	if (events & IRQ0STATUS_HS_VS_IRQ)
-+		ccdc_hs_vs_isr(ccdc);
-+
-+	return 0;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP video operations
-+ */
-+
-+static int ccdc_video_queue(struct isp_video *video, struct isp_buffer *buffer)
-+{
-+	struct isp_ccdc_device *ccdc = &video->isp->isp_ccdc;
-+
-+	if (!(ccdc->output & CCDC_OUTPUT_MEMORY))
-+		return -ENODEV;
-+
-+	ccdc_set_outaddr(ccdc, buffer->isp_addr);
-+
-+	/* We now have a buffer queued on the output, restart the pipeline in
-+	 * on the next CCDC interrupt if running in continuous mode (or when
-+	 * starting the stream).
-+	 */
-+	ccdc->underrun = 1;
-+
-+	return 0;
-+}
-+
-+static const struct isp_video_operations ccdc_video_ops = {
-+	.queue = ccdc_video_queue,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 subdev operations
-+ */
-+
-+/*
-+ * ccdc_ioctl - CCDC module private ioctl's
-+ * @sd: ISP CCDC V4L2 subdevice
-+ * @cmd: ioctl command
-+ * @arg: ioctl argument
-+ *
-+ * Return 0 on success or a negative error code otherwise.
-+ */
-+static long ccdc_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
-+{
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	int ret;
-+
-+	switch (cmd) {
-+	case VIDIOC_OMAP3ISP_CCDC_CFG:
-+		mutex_lock(&ccdc->ioctl_lock);
-+		ret = ccdc_config(ccdc, arg);
-+		mutex_unlock(&ccdc->ioctl_lock);
-+		break;
-+
-+	default:
-+		return -ENOIOCTLCMD;
-+	}
-+
-+	return ret;
-+}
-+
-+static int ccdc_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
-+				struct v4l2_event_subscription *sub)
-+{
-+	if (sub->type != V4L2_EVENT_OMAP3ISP_HS_VS)
-+		return -EINVAL;
-+
-+	return v4l2_event_subscribe(fh, sub);
-+}
-+
-+static int ccdc_unsubscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
-+				  struct v4l2_event_subscription *sub)
-+{
-+	return v4l2_event_unsubscribe(fh, sub);
-+}
-+
-+/*
-+ * ccdc_set_stream - Enable/Disable streaming on the CCDC module
-+ * @sd: ISP CCDC V4L2 subdevice
-+ * @enable: Enable/disable stream
-+ *
-+ * When writing to memory, the CCDC hardware can't be enabled without a memory
-+ * buffer to write to. As the s_stream operation is called in response to a
-+ * STREAMON call without any buffer queued yet, just update the enabled field
-+ * and return immediately. The CCDC will be enabled in ccdc_isr_buffer().
-+ *
-+ * When not writing to memory enable the CCDC immediately.
-+ */
-+static int ccdc_set_stream(struct v4l2_subdev *sd, int enable)
-+{
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	struct isp_device *isp = to_isp_device(ccdc);
-+	int ret = 0;
-+
-+	if (ccdc->state == ISP_PIPELINE_STREAM_STOPPED) {
-+		if (enable == ISP_PIPELINE_STREAM_STOPPED)
-+			return 0;
-+
-+		omap3isp_subclk_enable(isp, OMAP3_ISP_SUBCLK_CCDC);
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_CFG,
-+			    ISPCCDC_CFG_VDLC);
-+
-+		ccdc_configure(ccdc);
-+
-+		/* TODO: Don't configure the video port if all of its output
-+		 * links are inactive.
-+		 */
-+		ccdc_config_vp(ccdc);
-+		ccdc_enable_vp(ccdc, 1);
-+		ccdc->error = 0;
-+		ccdc_print_status(ccdc);
-+	}
-+
-+	switch (enable) {
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		if (ccdc->output & CCDC_OUTPUT_MEMORY)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_CCDC_WRITE);
-+
-+		if (ccdc->underrun || !(ccdc->output & CCDC_OUTPUT_MEMORY))
-+			ccdc_enable(ccdc);
-+
-+		ccdc->underrun = 0;
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_SINGLESHOT:
-+		if (ccdc->output & CCDC_OUTPUT_MEMORY &&
-+		    ccdc->state != ISP_PIPELINE_STREAM_SINGLESHOT)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_CCDC_WRITE);
-+
-+		ccdc_enable(ccdc);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+		ret = ccdc_disable(ccdc);
-+		if (ccdc->output & CCDC_OUTPUT_MEMORY)
-+			omap3isp_sbl_disable(isp, OMAP3_ISP_SBL_CCDC_WRITE);
-+		omap3isp_subclk_disable(isp, OMAP3_ISP_SUBCLK_CCDC);
-+		ccdc->underrun = 0;
-+		break;
-+	}
-+
-+	ccdc->state = enable;
-+	return ret;
-+}
-+
-+static struct v4l2_mbus_framefmt *
-+__ccdc_get_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_fh *fh,
-+		  unsigned int pad, enum v4l2_subdev_format_whence which)
-+{
-+	if (which == V4L2_SUBDEV_FORMAT_TRY)
-+		return v4l2_subdev_get_try_format(fh, pad);
-+	else
-+		return &ccdc->formats[pad];
-+}
-+
-+/*
-+ * ccdc_try_format - Try video format on a pad
-+ * @ccdc: ISP CCDC device
-+ * @fh : V4L2 subdev file handle
-+ * @pad: Pad number
-+ * @fmt: Format
-+ */
-+static void
-+ccdc_try_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_fh *fh,
-+		unsigned int pad, struct v4l2_mbus_framefmt *fmt,
-+		enum v4l2_subdev_format_whence which)
-+{
-+	struct v4l2_mbus_framefmt *format;
-+	const struct isp_format_info *info;
-+	unsigned int width = fmt->width;
-+	unsigned int height = fmt->height;
-+	unsigned int i;
-+
-+	switch (pad) {
-+	case CCDC_PAD_SINK:
-+		/* TODO: If the CCDC output formatter pad is connected directly
-+		 * to the resizer, only YUV formats can be used.
-+		 */
-+		for (i = 0; i < ARRAY_SIZE(ccdc_fmts); i++) {
-+			if (fmt->code == ccdc_fmts[i])
-+				break;
-+		}
-+
-+		/* If not found, use SGRBG10 as default */
-+		if (i >= ARRAY_SIZE(ccdc_fmts))
-+			fmt->code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+
-+		/* Clamp the input size. */
-+		fmt->width = clamp_t(u32, width, 32, 4096);
-+		fmt->height = clamp_t(u32, height, 32, 4096);
-+		break;
-+
-+	case CCDC_PAD_SOURCE_OF:
-+		format = __ccdc_get_format(ccdc, fh, CCDC_PAD_SINK, which);
-+		memcpy(fmt, format, sizeof(*fmt));
-+
-+		/* The data formatter truncates the number of horizontal output
-+		 * pixels to a multiple of 16. To avoid clipping data, allow
-+		 * callers to request an output size bigger than the input size
-+		 * up to the nearest multiple of 16.
-+		 */
-+		fmt->width = clamp_t(u32, width, 32, (fmt->width + 15) & ~15);
-+		fmt->width &= ~15;
-+		fmt->height = clamp_t(u32, height, 32, fmt->height);
-+		break;
-+
-+	case CCDC_PAD_SOURCE_VP:
-+		format = __ccdc_get_format(ccdc, fh, CCDC_PAD_SINK, which);
-+		memcpy(fmt, format, sizeof(*fmt));
-+
-+		/* The video port interface truncates the data to 10 bits. */
-+		info = omap3isp_video_format_info(fmt->code);
-+		fmt->code = info->truncated;
-+
-+		/* The number of lines that can be clocked out from the video
-+		 * port output must be at least one line less than the number
-+		 * of input lines.
-+		 */
-+		fmt->width = clamp_t(u32, width, 32, fmt->width);
-+		fmt->height = clamp_t(u32, height, 32, fmt->height - 1);
-+		break;
-+	}
-+
-+	/* Data is written to memory unpacked, each 10-bit or 12-bit pixel is
-+	 * stored on 2 bytes.
-+	 */
-+	fmt->colorspace = V4L2_COLORSPACE_SRGB;
-+	fmt->field = V4L2_FIELD_NONE;
-+}
-+
-+/*
-+ * ccdc_enum_mbus_code - Handle pixel format enumeration
-+ * @sd     : pointer to v4l2 subdev structure
-+ * @fh : V4L2 subdev file handle
-+ * @code   : pointer to v4l2_subdev_mbus_code_enum structure
-+ * return -EINVAL or zero on success
-+ */
-+static int ccdc_enum_mbus_code(struct v4l2_subdev *sd,
-+			       struct v4l2_subdev_fh *fh,
-+			       struct v4l2_subdev_mbus_code_enum *code)
-+{
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	switch (code->pad) {
-+	case CCDC_PAD_SINK:
-+		if (code->index >= ARRAY_SIZE(ccdc_fmts))
-+			return -EINVAL;
-+
-+		code->code = ccdc_fmts[code->index];
-+		break;
-+
-+	case CCDC_PAD_SOURCE_OF:
-+	case CCDC_PAD_SOURCE_VP:
-+		/* No format conversion inside CCDC */
-+		if (code->index != 0)
-+			return -EINVAL;
-+
-+		format = __ccdc_get_format(ccdc, fh, CCDC_PAD_SINK,
-+					   V4L2_SUBDEV_FORMAT_TRY);
-+
-+		code->code = format->code;
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+static int ccdc_enum_frame_size(struct v4l2_subdev *sd,
-+				struct v4l2_subdev_fh *fh,
-+				struct v4l2_subdev_frame_size_enum *fse)
-+{
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt format;
-+
-+	if (fse->index != 0)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = 1;
-+	format.height = 1;
-+	ccdc_try_format(ccdc, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->min_width = format.width;
-+	fse->min_height = format.height;
-+
-+	if (format.code != fse->code)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = -1;
-+	format.height = -1;
-+	ccdc_try_format(ccdc, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->max_width = format.width;
-+	fse->max_height = format.height;
-+
-+	return 0;
-+}
-+
-+/*
-+ * ccdc_get_format - Retrieve the video format on a pad
-+ * @sd : ISP CCDC V4L2 subdevice
-+ * @fh : V4L2 subdev file handle
-+ * @fmt: Format
-+ *
-+ * Return 0 on success or -EINVAL if the pad is invalid or doesn't correspond
-+ * to the format type.
-+ */
-+static int ccdc_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			   struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __ccdc_get_format(ccdc, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	fmt->format = *format;
-+	return 0;
-+}
-+
-+/*
-+ * ccdc_set_format - Set the video format on a pad
-+ * @sd : ISP CCDC V4L2 subdevice
-+ * @fh : V4L2 subdev file handle
-+ * @fmt: Format
-+ *
-+ * Return 0 on success or -EINVAL if the pad is invalid or doesn't correspond
-+ * to the format type.
-+ */
-+static int ccdc_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			   struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __ccdc_get_format(ccdc, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	ccdc_try_format(ccdc, fh, fmt->pad, &fmt->format, fmt->which);
-+	*format = fmt->format;
-+
-+	/* Propagate the format from sink to source */
-+	if (fmt->pad == CCDC_PAD_SINK) {
-+		format = __ccdc_get_format(ccdc, fh, CCDC_PAD_SOURCE_OF,
-+					   fmt->which);
-+		*format = fmt->format;
-+		ccdc_try_format(ccdc, fh, CCDC_PAD_SOURCE_OF, format,
-+				fmt->which);
-+
-+		format = __ccdc_get_format(ccdc, fh, CCDC_PAD_SOURCE_VP,
-+					   fmt->which);
-+		*format = fmt->format;
-+		ccdc_try_format(ccdc, fh, CCDC_PAD_SOURCE_VP, format,
-+				fmt->which);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * ccdc_init_formats - Initialize formats on all pads
-+ * @sd: ISP CCDC V4L2 subdevice
-+ * @fh: V4L2 subdev file handle
-+ *
-+ * Initialize all pad formats with default values. If fh is not NULL, try
-+ * formats are initialized on the file handle. Otherwise active formats are
-+ * initialized on the device.
-+ */
-+static int ccdc_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
-+{
-+	struct v4l2_subdev_format format;
-+
-+	memset(&format, 0, sizeof(format));
-+	format.pad = CCDC_PAD_SINK;
-+	format.which = fh ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
-+	format.format.code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+	format.format.width = 4096;
-+	format.format.height = 4096;
-+	ccdc_set_format(sd, fh, &format);
-+
-+	return 0;
-+}
-+
-+/* V4L2 subdev core operations */
-+static const struct v4l2_subdev_core_ops ccdc_v4l2_core_ops = {
-+	.queryctrl = v4l2_subdev_queryctrl,
-+	.querymenu = v4l2_subdev_querymenu,
-+	.g_ctrl = v4l2_subdev_g_ctrl,
-+	.s_ctrl = v4l2_subdev_s_ctrl,
-+	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
-+	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
-+	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
-+	.ioctl = ccdc_ioctl,
-+	.subscribe_event = ccdc_subscribe_event,
-+	.unsubscribe_event = ccdc_unsubscribe_event,
-+};
-+
-+/* V4L2 subdev file operations */
-+static const struct v4l2_subdev_file_ops ccdc_v4l2_file_ops = {
-+	.open = ccdc_init_formats,
-+};
-+
-+/* V4L2 subdev video operations */
-+static const struct v4l2_subdev_video_ops ccdc_v4l2_video_ops = {
-+	.s_stream = ccdc_set_stream,
-+};
-+
-+/* V4L2 subdev pad operations */
-+static const struct v4l2_subdev_pad_ops ccdc_v4l2_pad_ops = {
-+	.enum_mbus_code = ccdc_enum_mbus_code,
-+	.enum_frame_size = ccdc_enum_frame_size,
-+	.get_fmt = ccdc_get_format,
-+	.set_fmt = ccdc_set_format,
-+};
-+
-+/* V4L2 subdev operations */
-+static const struct v4l2_subdev_ops ccdc_v4l2_ops = {
-+	.core = &ccdc_v4l2_core_ops,
-+	.file = &ccdc_v4l2_file_ops,
-+	.video = &ccdc_v4l2_video_ops,
-+	.pad = &ccdc_v4l2_pad_ops,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * Media entity operations
-+ */
-+
-+/*
-+ * ccdc_link_setup - Setup CCDC connections
-+ * @entity: CCDC media entity
-+ * @local: Pad at the local end of the link
-+ * @remote: Pad at the remote end of the link
-+ * @flags: Link flags
-+ *
-+ * return -EINVAL or zero on success
-+ */
-+static int ccdc_link_setup(struct media_entity *entity,
-+			   const struct media_pad *local,
-+			   const struct media_pad *remote, u32 flags)
-+{
-+	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
-+	struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
-+	struct isp_device *isp = to_isp_device(ccdc);
-+
-+	switch (local->index | media_entity_type(remote->entity)) {
-+	case CCDC_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* Read from the sensor (parallel interface), CCP2, CSI2a or
-+		 * CSI2c.
-+		 */
-+		if (!(flags & MEDIA_LNK_FL_ENABLED)) {
-+			ccdc->input = CCDC_INPUT_NONE;
-+			break;
-+		}
-+
-+		if (ccdc->input != CCDC_INPUT_NONE)
-+			return -EBUSY;
-+
-+		if (remote->entity == &isp->isp_ccp2.subdev.entity)
-+			ccdc->input = CCDC_INPUT_CCP2B;
-+		else if (remote->entity == &isp->isp_csi2a.subdev.entity)
-+			ccdc->input = CCDC_INPUT_CSI2A;
-+		else if (remote->entity == &isp->isp_csi2c.subdev.entity)
-+			ccdc->input = CCDC_INPUT_CSI2C;
-+		else
-+			ccdc->input = CCDC_INPUT_PARALLEL;
-+
-+		break;
-+
-+	/*
-+	 * The ISP core doesn't support pipelines with multiple video outputs.
-+	 * Revisit this when it will be implemented, and return -EBUSY for now.
-+	 */
-+
-+	case CCDC_PAD_SOURCE_VP | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* Write to preview engine, histogram and H3A. When none of
-+		 * those links are active, the video port can be disabled.
-+		 */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (ccdc->output & ~CCDC_OUTPUT_PREVIEW)
-+				return -EBUSY;
-+			ccdc->output |= CCDC_OUTPUT_PREVIEW;
-+		} else {
-+			ccdc->output &= ~CCDC_OUTPUT_PREVIEW;
-+		}
-+		break;
-+
-+	case CCDC_PAD_SOURCE_OF | MEDIA_ENT_T_DEVNODE:
-+		/* Write to memory */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (ccdc->output & ~CCDC_OUTPUT_MEMORY)
-+				return -EBUSY;
-+			ccdc->output |= CCDC_OUTPUT_MEMORY;
-+		} else {
-+			ccdc->output &= ~CCDC_OUTPUT_MEMORY;
-+		}
-+		break;
-+
-+	case CCDC_PAD_SOURCE_OF | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* Write to resizer */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (ccdc->output & ~CCDC_OUTPUT_RESIZER)
-+				return -EBUSY;
-+			ccdc->output |= CCDC_OUTPUT_RESIZER;
-+		} else {
-+			ccdc->output &= ~CCDC_OUTPUT_RESIZER;
-+		}
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+/* media operations */
-+static const struct media_entity_operations ccdc_media_ops = {
-+	.link_setup = ccdc_link_setup,
-+};
-+
-+/*
-+ * ccdc_init_entities - Initialize V4L2 subdev and media entity
-+ * @ccdc: ISP CCDC module
-+ *
-+ * Return 0 on success and a negative error code on failure.
-+ */
-+static int ccdc_init_entities(struct isp_ccdc_device *ccdc)
-+{
-+	struct v4l2_subdev *sd = &ccdc->subdev;
-+	struct media_pad *pads = ccdc->pads;
-+	struct media_entity *me = &sd->entity;
-+	int ret;
-+
-+	ccdc->input = CCDC_INPUT_NONE;
-+
-+	v4l2_subdev_init(sd, &ccdc_v4l2_ops);
-+	strlcpy(sd->name, "OMAP3 ISP CCDC", sizeof(sd->name));
-+	sd->grp_id = 1 << 16;	/* group ID for isp subdevs */
-+	v4l2_set_subdevdata(sd, ccdc);
-+	sd->flags |= V4L2_SUBDEV_FL_HAS_EVENTS | V4L2_SUBDEV_FL_HAS_DEVNODE;
-+	sd->nevents = OMAP3ISP_CCDC_NEVENTS;
-+
-+	v4l2_ctrl_handler_init(&ccdc->ctrls, 1);
-+	sd->ctrl_handler = &ccdc->ctrls;
-+
-+	pads[CCDC_PAD_SINK].flags = MEDIA_PAD_FL_INPUT;
-+	pads[CCDC_PAD_SOURCE_VP].flags = MEDIA_PAD_FL_OUTPUT;
-+	pads[CCDC_PAD_SOURCE_OF].flags = MEDIA_PAD_FL_OUTPUT;
-+
-+	me->ops = &ccdc_media_ops;
-+	ret = media_entity_init(me, CCDC_PADS_NUM, pads, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	ccdc_init_formats(sd, NULL);
-+
-+	ccdc->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+	ccdc->video_out.ops = &ccdc_video_ops;
-+	ccdc->video_out.isp = to_isp_device(ccdc);
-+	ccdc->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 3;
-+	ccdc->video_out.bpl_alignment = 32;
-+
-+	ret = omap3isp_video_init(&ccdc->video_out, "CCDC");
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Connect the CCDC subdev to the video node. */
-+	ret = media_entity_create_link(&ccdc->subdev.entity, CCDC_PAD_SOURCE_OF,
-+			&ccdc->video_out.video.entity, 0, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+void omap3isp_ccdc_unregister_entities(struct isp_ccdc_device *ccdc)
-+{
-+	media_entity_cleanup(&ccdc->subdev.entity);
-+
-+	v4l2_device_unregister_subdev(&ccdc->subdev);
-+	v4l2_ctrl_handler_free(&ccdc->ctrls);
-+	omap3isp_video_unregister(&ccdc->video_out);
-+}
-+
-+int omap3isp_ccdc_register_entities(struct isp_ccdc_device *ccdc,
-+	struct v4l2_device *vdev)
-+{
-+	int ret;
-+
-+	/* Register the subdev and video node. */
-+	ret = v4l2_device_register_subdev(vdev, &ccdc->subdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&ccdc->video_out, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	return 0;
-+
-+error:
-+	omap3isp_ccdc_unregister_entities(ccdc);
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP CCDC initialisation and cleanup
-+ */
-+
-+/*
-+ * omap3isp_ccdc_init - CCDC module initialization.
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ *
-+ * TODO: Get the initialisation values from platform data.
-+ *
-+ * Return 0 on success or a negative error code otherwise.
-+ */
-+int omap3isp_ccdc_init(struct isp_device *isp)
-+{
-+	struct isp_ccdc_device *ccdc = &isp->isp_ccdc;
-+
-+	spin_lock_init(&ccdc->lock);
-+	init_waitqueue_head(&ccdc->wait);
-+	mutex_init(&ccdc->ioctl_lock);
-+
-+	ccdc->stopping = CCDC_STOP_NOT_REQUESTED;
-+
-+	INIT_WORK(&ccdc->lsc.table_work, ccdc_lsc_free_table_work);
-+	ccdc->lsc.state = LSC_STATE_STOPPED;
-+	INIT_LIST_HEAD(&ccdc->lsc.free_queue);
-+	spin_lock_init(&ccdc->lsc.req_lock);
-+
-+	ccdc->syncif.ccdc_mastermode = 0;
-+	ccdc->syncif.datapol = 0;
-+	ccdc->syncif.datsz = 0;
-+	ccdc->syncif.fldmode = 0;
-+	ccdc->syncif.fldout = 0;
-+	ccdc->syncif.fldpol = 0;
-+	ccdc->syncif.fldstat = 0;
-+	ccdc->syncif.hdpol = 0;
-+	ccdc->syncif.vdpol = 0;
-+
-+	ccdc->clamp.oblen = 0;
-+	ccdc->clamp.dcsubval = 0;
-+
-+	ccdc->vpcfg.pixelclk = 0;
-+
-+	ccdc->update = OMAP3ISP_CCDC_BLCLAMP;
-+	ccdc_apply_controls(ccdc);
-+
-+	return ccdc_init_entities(ccdc);
-+}
-+
-+/*
-+ * omap3isp_ccdc_cleanup - CCDC module cleanup.
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ */
-+void omap3isp_ccdc_cleanup(struct isp_device *isp)
-+{
-+	struct isp_ccdc_device *ccdc = &isp->isp_ccdc;
-+
-+	/* Free LSC requests. As the CCDC is stopped there's no active request,
-+	 * so only the pending request and the free queue need to be handled.
-+	 */
-+	ccdc_lsc_free_request(ccdc, ccdc->lsc.request);
-+	cancel_work_sync(&ccdc->lsc.table_work);
-+	ccdc_lsc_free_queue(ccdc, &ccdc->lsc.free_queue);
-+
-+	if (ccdc->fpc.fpcaddr != 0)
-+		iommu_vfree(isp->iommu, ccdc->fpc.fpcaddr);
-+}
-diff --git a/drivers/media/video/isp/ispccdc.h b/drivers/media/video/isp/ispccdc.h
-new file mode 100644
-index 0000000..5c00e2c
---- /dev/null
-+++ b/drivers/media/video/isp/ispccdc.h
-@@ -0,0 +1,223 @@
-+/*
-+ * ispccdc.h
-+ *
-+ * TI OMAP3 ISP - CCDC module
-+ *
-+ * Copyright (C) 2009-2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_CCDC_H
-+#define OMAP3_ISP_CCDC_H
-+
-+#include <linux/omap3isp.h>
-+#include <linux/workqueue.h>
-+#include <media/v4l2-ctrls.h>
-+
-+#include "ispvideo.h"
-+
-+enum ccdc_input_entity {
-+	CCDC_INPUT_NONE,
-+	CCDC_INPUT_PARALLEL,
-+	CCDC_INPUT_CSI2A,
-+	CCDC_INPUT_CCP2B,
-+	CCDC_INPUT_CSI2C
-+};
-+
-+#define CCDC_OUTPUT_MEMORY	(1 << 0)
-+#define CCDC_OUTPUT_PREVIEW	(1 << 1)
-+#define CCDC_OUTPUT_RESIZER	(1 << 2)
-+
-+#define	OMAP3ISP_CCDC_NEVENTS	16
-+
-+/*
-+ * struct ispccdc_syncif - Structure for Sync Interface between sensor and CCDC
-+ * @ccdc_mastermode: Master mode. 1 - Master, 0 - Slave.
-+ * @fldstat: Field state. 0 - Odd Field, 1 - Even Field.
-+ * @datsz: Data size.
-+ * @fldmode: 0 - Progressive, 1 - Interlaced.
-+ * @datapol: 0 - Positive, 1 - Negative.
-+ * @fldpol: 0 - Positive, 1 - Negative.
-+ * @hdpol: 0 - Positive, 1 - Negative.
-+ * @vdpol: 0 - Positive, 1 - Negative.
-+ * @fldout: 0 - Input, 1 - Output.
-+ * @hs_width: Width of the Horizontal Sync pulse, used for HS/VS Output.
-+ * @vs_width: Width of the Vertical Sync pulse, used for HS/VS Output.
-+ * @ppln: Number of pixels per line, used for HS/VS Output.
-+ * @hlprf: Number of half lines per frame, used for HS/VS Output.
-+ * @bt_r656_en: 1 - Enable ITU-R BT656 mode, 0 - Sync mode.
-+ */
-+struct ispccdc_syncif {
-+	u8 ccdc_mastermode;
-+	u8 fldstat;
-+	u8 datsz;
-+	u8 fldmode;
-+	u8 datapol;
-+	u8 fldpol;
-+	u8 hdpol;
-+	u8 vdpol;
-+	u8 fldout;
-+	u8 hs_width;
-+	u8 vs_width;
-+	u8 ppln;
-+	u8 hlprf;
-+	u8 bt_r656_en;
-+};
-+
-+/*
-+ * struct ispccdc_vp - Structure for Video Port parameters
-+ * @pixelclk: Input pixel clock in Hz
-+ */
-+struct ispccdc_vp {
-+	unsigned int pixelclk;
-+};
-+
-+enum ispccdc_lsc_state {
-+	LSC_STATE_STOPPED = 0,
-+	LSC_STATE_STOPPING = 1,
-+	LSC_STATE_RUNNING = 2,
-+	LSC_STATE_RECONFIG = 3,
-+};
-+
-+struct ispccdc_lsc_config_req {
-+	struct list_head list;
-+	struct omap3isp_ccdc_lsc_config config;
-+	unsigned char enable;
-+	u32 table;
-+	struct iovm_struct *iovm;
-+};
-+
-+/*
-+ * ispccdc_lsc - CCDC LSC parameters
-+ * @update_config: Set when user changes config
-+ * @request_enable: Whether LSC is requested to be enabled
-+ * @config: LSC config set by user
-+ * @update_table: Set when user provides a new LSC table to table_new
-+ * @table_new: LSC table set by user, ISP address
-+ * @table_inuse: LSC table currently in use, ISP address
-+ */
-+struct ispccdc_lsc {
-+	enum ispccdc_lsc_state state;
-+	struct work_struct table_work;
-+
-+	/* LSC queue of configurations */
-+	spinlock_t req_lock;
-+	struct ispccdc_lsc_config_req *request;	/* requested configuration */
-+	struct ispccdc_lsc_config_req *active;	/* active configuration */
-+	struct list_head free_queue;	/* configurations for freeing */
-+};
-+
-+#define CCDC_STOP_NOT_REQUESTED		0x00
-+#define CCDC_STOP_REQUEST		0x01
-+#define CCDC_STOP_EXECUTED		(0x02 | CCDC_STOP_REQUEST)
-+#define CCDC_STOP_CCDC_FINISHED		0x04
-+#define CCDC_STOP_LSC_FINISHED		0x08
-+#define CCDC_STOP_FINISHED		\
-+	(CCDC_STOP_EXECUTED | CCDC_STOP_CCDC_FINISHED | CCDC_STOP_LSC_FINISHED)
-+
-+#define CCDC_EVENT_VD1			0x10
-+#define CCDC_EVENT_VD0			0x20
-+#define CCDC_EVENT_LSC_DONE		0x40
-+
-+/* Sink and source CCDC pads */
-+#define CCDC_PAD_SINK			0
-+#define CCDC_PAD_SOURCE_OF		1
-+#define CCDC_PAD_SOURCE_VP		2
-+#define CCDC_PADS_NUM			3
-+
-+/*
-+ * struct isp_ccdc_device - Structure for the CCDC module to store its own
-+ *			    information
-+ * @subdev: V4L2 subdevice
-+ * @pads: Sink and source media entity pads
-+ * @formats: Active video formats
-+ * @ctrls: V4L2 controls handler
-+ * @input: Active input
-+ * @output: Active outputs
-+ * @video_out: Output video node
-+ * @error: A hardware error occured during capture
-+ * @alaw: A-law compression enabled (1) or disabled (0)
-+ * @lpf: Low pass filter enabled (1) or disabled (0)
-+ * @obclamp: Optical-black clamp enabled (1) or disabled (0)
-+ * @fpc_en: Faulty pixels correction enabled (1) or disabled (0)
-+ * @blcomp: Black level compensation configuration
-+ * @clamp: Optical-black or digital clamp configuration
-+ * @fpc: Faulty pixels correction configuration
-+ * @lsc: Lens shading compensation configuration
-+ * @update: Bitmask of controls to update during the next interrupt
-+ * @shadow_update: Controls update in progress by userspace
-+ * @syncif: Interface synchronization configuration
-+ * @vpcfg: Video port configuration
-+ * @underrun: A buffer underrun occured and a new buffer has been queued
-+ * @state: Streaming state
-+ * @lock: Serializes shadow_update with interrupt handler
-+ * @wait: Wait queue used to stop the module
-+ * @stopping: Stopping state
-+ * @ioctl_lock: Serializes ioctl calls and LSC requests freeing
-+ */
-+struct isp_ccdc_device {
-+	struct v4l2_subdev subdev;
-+	struct media_pad pads[CCDC_PADS_NUM];
-+	struct v4l2_mbus_framefmt formats[CCDC_PADS_NUM];
-+
-+	struct v4l2_ctrl_handler ctrls;
-+
-+	enum ccdc_input_entity input;
-+	unsigned int output;
-+	struct isp_video video_out;
-+	unsigned int error;
-+
-+	unsigned int alaw:1,
-+		     lpf:1,
-+		     obclamp:1,
-+		     fpc_en:1;
-+	struct omap3isp_ccdc_blcomp blcomp;
-+	struct omap3isp_ccdc_bclamp clamp;
-+	struct omap3isp_ccdc_fpc fpc;
-+	struct ispccdc_lsc lsc;
-+	unsigned int update;
-+	unsigned int shadow_update;
-+
-+	struct ispccdc_syncif syncif;
-+	struct ispccdc_vp vpcfg;
-+
-+	unsigned int underrun:1;
-+	enum isp_pipeline_stream_state state;
-+	spinlock_t lock;
-+	wait_queue_head_t wait;
-+	unsigned int stopping;
-+	struct mutex ioctl_lock;
-+};
-+
-+struct isp_device;
-+
-+int omap3isp_ccdc_init(struct isp_device *isp);
-+void omap3isp_ccdc_cleanup(struct isp_device *isp);
-+int omap3isp_ccdc_register_entities(struct isp_ccdc_device *ccdc,
-+	struct v4l2_device *vdev);
-+void omap3isp_ccdc_unregister_entities(struct isp_ccdc_device *ccdc);
-+
-+int omap3isp_ccdc_busy(struct isp_ccdc_device *isp_ccdc);
-+int omap3isp_ccdc_isr(struct isp_ccdc_device *isp_ccdc, u32 events);
-+void omap3isp_ccdc_restore_context(struct isp_device *isp);
-+void omap3isp_ccdc_max_rate(struct isp_ccdc_device *ccdc,
-+	unsigned int *max_rate);
-+
-+#endif	/* OMAP3_ISP_CCDC_H */
-diff --git a/drivers/media/video/isp/ispccp2.c b/drivers/media/video/isp/ispccp2.c
-new file mode 100644
-index 0000000..efcf827
---- /dev/null
-+++ b/drivers/media/video/isp/ispccp2.c
-@@ -0,0 +1,1189 @@
-+/*
-+ * ispccp2.c
-+ *
-+ * TI OMAP3 ISP - CCP2 module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2010 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/device.h>
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+#include <linux/mutex.h>
-+#include <linux/uaccess.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "ispccp2.h"
-+
-+/* Number of LCX channels */
-+#define CCP2_LCx_CHANS_NUM			3
-+/* Max/Min size for CCP2 video port */
-+#define ISPCCP2_DAT_START_MIN			0
-+#define ISPCCP2_DAT_START_MAX			4095
-+#define ISPCCP2_DAT_SIZE_MIN			0
-+#define ISPCCP2_DAT_SIZE_MAX			4095
-+#define ISPCCP2_VPCLK_FRACDIV			65536
-+#define ISPCCP2_LCx_CTRL_FORMAT_RAW8_DPCM10_VP	0x12
-+#define ISPCCP2_LCx_CTRL_FORMAT_RAW10_VP	0x16
-+/* Max/Min size for CCP2 memory channel */
-+#define ISPCCP2_LCM_HSIZE_COUNT_MIN		16
-+#define ISPCCP2_LCM_HSIZE_COUNT_MAX		8191
-+#define ISPCCP2_LCM_HSIZE_SKIP_MIN		0
-+#define ISPCCP2_LCM_HSIZE_SKIP_MAX		8191
-+#define ISPCCP2_LCM_VSIZE_MIN			1
-+#define ISPCCP2_LCM_VSIZE_MAX			8191
-+#define ISPCCP2_LCM_HWORDS_MIN			1
-+#define ISPCCP2_LCM_HWORDS_MAX			4095
-+#define ISPCCP2_LCM_CTRL_BURST_SIZE_32X		5
-+#define ISPCCP2_LCM_CTRL_READ_THROTTLE_FULL	0
-+#define ISPCCP2_LCM_CTRL_SRC_DECOMPR_DPCM10	2
-+#define ISPCCP2_LCM_CTRL_SRC_FORMAT_RAW8	2
-+#define ISPCCP2_LCM_CTRL_SRC_FORMAT_RAW10	3
-+#define ISPCCP2_LCM_CTRL_DST_FORMAT_RAW10	3
-+#define ISPCCP2_LCM_CTRL_DST_PORT_VP		0
-+#define ISPCCP2_LCM_CTRL_DST_PORT_MEM		1
-+
-+/* Set only the required bits */
-+#define BIT_SET(var, shift, mask, val)			\
-+	do {						\
-+		var = ((var) & ~((mask) << (shift)))	\
-+			| ((val) << (shift));		\
-+	} while (0)
-+
-+/*
-+ * ccp2_print_status - Print current CCP2 module register values.
-+ */
-+#define CCP2_PRINT_REGISTER(isp, name)\
-+	dev_dbg(isp->dev, "###CCP2 " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_##name))
-+
-+static void ccp2_print_status(struct isp_ccp2_device *ccp2)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+
-+	dev_dbg(isp->dev, "-------------CCP2 Register dump-------------\n");
-+
-+	CCP2_PRINT_REGISTER(isp, SYSCONFIG);
-+	CCP2_PRINT_REGISTER(isp, SYSSTATUS);
-+	CCP2_PRINT_REGISTER(isp, LC01_IRQENABLE);
-+	CCP2_PRINT_REGISTER(isp, LC01_IRQSTATUS);
-+	CCP2_PRINT_REGISTER(isp, LC23_IRQENABLE);
-+	CCP2_PRINT_REGISTER(isp, LC23_IRQSTATUS);
-+	CCP2_PRINT_REGISTER(isp, LCM_IRQENABLE);
-+	CCP2_PRINT_REGISTER(isp, LCM_IRQSTATUS);
-+	CCP2_PRINT_REGISTER(isp, CTRL);
-+	CCP2_PRINT_REGISTER(isp, LCx_CTRL(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_CODE(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_STAT_START(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_STAT_SIZE(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_SOF_ADDR(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_EOF_ADDR(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_DAT_START(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_DAT_SIZE(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_DAT_PING_ADDR(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_DAT_PONG_ADDR(0));
-+	CCP2_PRINT_REGISTER(isp, LCx_DAT_OFST(0));
-+	CCP2_PRINT_REGISTER(isp, LCM_CTRL);
-+	CCP2_PRINT_REGISTER(isp, LCM_VSIZE);
-+	CCP2_PRINT_REGISTER(isp, LCM_HSIZE);
-+	CCP2_PRINT_REGISTER(isp, LCM_PREFETCH);
-+	CCP2_PRINT_REGISTER(isp, LCM_SRC_ADDR);
-+	CCP2_PRINT_REGISTER(isp, LCM_SRC_OFST);
-+	CCP2_PRINT_REGISTER(isp, LCM_DST_ADDR);
-+	CCP2_PRINT_REGISTER(isp, LCM_DST_OFST);
-+
-+	dev_dbg(isp->dev, "--------------------------------------------\n");
-+}
-+
-+/*
-+ * ccp2_reset - Reset the CCP2
-+ * @ccp2: pointer to ISP CCP2 device
-+ */
-+static void ccp2_reset(struct isp_ccp2_device *ccp2)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	int i = 0;
-+
-+	/* Reset the CSI1/CCP2B and wait for reset to complete */
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_SYSCONFIG,
-+		    ISPCCP2_SYSCONFIG_SOFT_RESET);
-+	while (!(isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_SYSSTATUS) &
-+		 ISPCCP2_SYSSTATUS_RESET_DONE)) {
-+		udelay(10);
-+		if (i++ > 10) {  /* try read 10 times */
-+			dev_warn(isp->dev,
-+				"omap3_isp: timeout waiting for ccp2 reset\n");
-+			break;
-+		}
-+	}
-+}
-+
-+/*
-+ * ccp2_pwr_cfg - Configure the power mode settings
-+ * @ccp2: pointer to ISP CCP2 device
-+ */
-+static void ccp2_pwr_cfg(struct isp_ccp2_device *ccp2)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+
-+	isp_reg_writel(isp, ISPCCP2_SYSCONFIG_MSTANDBY_MODE_SMART |
-+			((isp->revision == ISP_REVISION_15_0 && isp->autoidle) ?
-+                          ISPCCP2_SYSCONFIG_AUTO_IDLE : 0),
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_SYSCONFIG);
-+}
-+
-+/*
-+ * ccp2_if_enable - Enable CCP2 interface.
-+ * @ccp2: pointer to ISP CCP2 device
-+ * @enable: enable/disable flag
-+ */
-+static void ccp2_if_enable(struct isp_ccp2_device *ccp2, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
-+	int i;
-+
-+	/* Enable/Disable all the LCx channels */
-+	for (i = 0; i < CCP2_LCx_CHANS_NUM; i++)
-+		isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCx_CTRL(i),
-+				ISPCCP2_LCx_CTRL_CHAN_EN,
-+				enable ? ISPCCP2_LCx_CTRL_CHAN_EN : 0);
-+
-+	/* Enable/Disable ccp2 interface in ccp2 mode */
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL,
-+			ISPCCP2_CTRL_MODE | ISPCCP2_CTRL_IF_EN,
-+			enable ? (ISPCCP2_CTRL_MODE | ISPCCP2_CTRL_IF_EN) : 0);
-+
-+	/* For frame count propagation */
-+	if (pipe->do_propagation) {
-+		/* We may want the Frame Start IRQ from LC0 */
-+		if (enable)
-+			isp_reg_set(isp, OMAP3_ISP_IOMEM_CCP2,
-+				    ISPCCP2_LC01_IRQENABLE,
-+				    ISPCCP2_LC01_IRQSTATUS_LC0_FS_IRQ);
-+		else
-+			isp_reg_clr(isp, OMAP3_ISP_IOMEM_CCP2,
-+				    ISPCCP2_LC01_IRQENABLE,
-+				    ISPCCP2_LC01_IRQSTATUS_LC0_FS_IRQ);
-+	}
-+}
-+
-+/*
-+ * ccp2_mem_enable - Enable CCP2 memory interface.
-+ * @ccp2: pointer to ISP CCP2 device
-+ * @enable: enable/disable flag
-+ */
-+static void ccp2_mem_enable(struct isp_ccp2_device *ccp2, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+
-+	if (enable)
-+		ccp2_if_enable(ccp2, 0);
-+
-+	/* Enable/Disable ccp2 interface in ccp2 mode */
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL,
-+			ISPCCP2_CTRL_MODE, enable ? ISPCCP2_CTRL_MODE : 0);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_CTRL,
-+			ISPCCP2_LCM_CTRL_CHAN_EN,
-+			enable ? ISPCCP2_LCM_CTRL_CHAN_EN : 0);
-+}
-+
-+/*
-+ * ccp2_phyif_config - Initialize CCP2 phy interface config
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * @config: CCP2 platform data
-+ *
-+ * Configure the CCP2 physical interface module from platform data.
-+ *
-+ * Returns -EIO if strobe is chosen in CSI1 mode, or 0 on success.
-+ */
-+static int ccp2_phyif_config(struct isp_ccp2_device *ccp2,
-+			     const struct isp_ccp2_platform_data *pdata)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	u32 val;
-+
-+	/* CCP2B mode */
-+	val = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL) |
-+			    ISPCCP2_CTRL_IO_OUT_SEL | ISPCCP2_CTRL_MODE;
-+	/* Data/strobe physical layer */
-+	BIT_SET(val, ISPCCP2_CTRL_PHY_SEL_SHIFT, ISPCCP2_CTRL_PHY_SEL_MASK,
-+		pdata->phy_layer);
-+	BIT_SET(val, ISPCCP2_CTRL_INV_SHIFT, ISPCCP2_CTRL_INV_MASK,
-+		pdata->strobe_clk_pol);
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL);
-+
-+	val = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL);
-+	if (!(val & ISPCCP2_CTRL_MODE)) {
-+		if (pdata->ccp2_mode)
-+			dev_warn(isp->dev, "OMAP3 CCP2 bus not available\n");
-+		if (pdata->phy_layer == ISPCCP2_CTRL_PHY_SEL_STROBE)
-+			/* Strobe mode requires CCP2 */
-+			return -EIO;
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * ccp2_vp_config - Initialize CCP2 video port interface.
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * @vpclk_div: Video port divisor
-+ *
-+ * Configure the CCP2 video port with the given clock divisor. The valid divisor
-+ * values depend on the ISP revision:
-+ *
-+ * - revision 1.0 and 2.0	1 to 4
-+ * - revision 15.0		1 to 65536
-+ *
-+ * The exact divisor value used might differ from the requested value, as ISP
-+ * revision 15.0 represent the divisor by 65536 divided by an integer.
-+ */
-+static void ccp2_vp_config(struct isp_ccp2_device *ccp2,
-+			   unsigned int vpclk_div)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	u32 val;
-+
-+	/* ISPCCP2_CTRL Video port */
-+	val = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL);
-+	val |= ISPCCP2_CTRL_VP_ONLY_EN;	/* Disable the memory write port */
-+
-+	if (isp->revision == ISP_REVISION_15_0) {
-+		vpclk_div = clamp_t(unsigned int, vpclk_div, 1, 65536);
-+		vpclk_div = min(ISPCCP2_VPCLK_FRACDIV / vpclk_div, 65535U);
-+		BIT_SET(val, ISPCCP2_CTRL_VPCLK_DIV_SHIFT,
-+			ISPCCP2_CTRL_VPCLK_DIV_MASK, vpclk_div);
-+	} else {
-+		vpclk_div = clamp_t(unsigned int, vpclk_div, 1, 4);
-+		BIT_SET(val, ISPCCP2_CTRL_VP_OUT_CTRL_SHIFT,
-+			ISPCCP2_CTRL_VP_OUT_CTRL_MASK, vpclk_div - 1);
-+	}
-+
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL);
-+}
-+
-+/*
-+ * ccp2_lcx_config - Initialize CCP2 logical channel interface.
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * @config: Pointer to ISP LCx config structure.
-+ *
-+ * This will analyze the parameters passed by the interface config
-+ * and configure CSI1/CCP2 logical channel
-+ *
-+ */
-+static void ccp2_lcx_config(struct isp_ccp2_device *ccp2,
-+			    struct isp_interface_lcx_config *config)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	u32 val, format;
-+
-+	switch (config->format) {
-+	case V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8:
-+		format = ISPCCP2_LCx_CTRL_FORMAT_RAW8_DPCM10_VP;
-+		break;
-+	case V4L2_MBUS_FMT_SGRBG10_1X10:
-+	default:
-+		format = ISPCCP2_LCx_CTRL_FORMAT_RAW10_VP;	/* RAW10+VP */
-+		break;
-+	}
-+	/* ISPCCP2_LCx_CTRL logical channel #0 */
-+	val = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCx_CTRL(0))
-+			    | (ISPCCP2_LCx_CTRL_REGION_EN); /* Region */
-+
-+	if (isp->revision == ISP_REVISION_15_0) {
-+		/* CRC */
-+		BIT_SET(val, ISPCCP2_LCx_CTRL_CRC_SHIFT_15_0,
-+			ISPCCP2_LCx_CTRL_CRC_MASK,
-+			config->crc);
-+		/* Format = RAW10+VP or RAW8+DPCM10+VP*/
-+		BIT_SET(val, ISPCCP2_LCx_CTRL_FORMAT_SHIFT_15_0,
-+			ISPCCP2_LCx_CTRL_FORMAT_MASK_15_0, format);
-+	} else {
-+		BIT_SET(val, ISPCCP2_LCx_CTRL_CRC_SHIFT,
-+			ISPCCP2_LCx_CTRL_CRC_MASK,
-+			config->crc);
-+
-+		BIT_SET(val, ISPCCP2_LCx_CTRL_FORMAT_SHIFT,
-+			ISPCCP2_LCx_CTRL_FORMAT_MASK, format);
-+	}
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCx_CTRL(0));
-+
-+	/* ISPCCP2_DAT_START for logical channel #0 */
-+	isp_reg_writel(isp, config->data_start << ISPCCP2_LCx_DAT_SHIFT,
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCx_DAT_START(0));
-+
-+	/* ISPCCP2_DAT_SIZE for logical channel #0 */
-+	isp_reg_writel(isp, config->data_size << ISPCCP2_LCx_DAT_SHIFT,
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCx_DAT_SIZE(0));
-+
-+	/* Enable error IRQs for logical channel #0 */
-+	val = ISPCCP2_LC01_IRQSTATUS_LC0_FIFO_OVF_IRQ |
-+	      ISPCCP2_LC01_IRQSTATUS_LC0_CRC_IRQ |
-+	      ISPCCP2_LC01_IRQSTATUS_LC0_FSP_IRQ |
-+	      ISPCCP2_LC01_IRQSTATUS_LC0_FW_IRQ |
-+	      ISPCCP2_LC01_IRQSTATUS_LC0_FS_IRQ |
-+	      ISPCCP2_LC01_IRQSTATUS_LC0_FSC_IRQ |
-+	      ISPCCP2_LC01_IRQSTATUS_LC0_SSC_IRQ;
-+
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LC01_IRQSTATUS);
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LC01_IRQENABLE, val);
-+}
-+
-+/*
-+ * ccp2_if_configure - Configure ccp2 with data from sensor
-+ * @ccp2: Pointer to ISP CCP2 device
-+ *
-+ * Return 0 on success or a negative error code
-+ */
-+static int ccp2_if_configure(struct isp_ccp2_device *ccp2)
-+{
-+	const struct isp_v4l2_subdevs_group *pdata;
-+	struct v4l2_mbus_framefmt *format;
-+	struct media_pad *pad;
-+	struct v4l2_subdev *sensor;
-+	u32 lines = 0;
-+	int ret;
-+
-+	ccp2_pwr_cfg(ccp2);
-+
-+	pad = media_entity_remote_source(&ccp2->pads[CCP2_PAD_SINK]);
-+	sensor = media_entity_to_v4l2_subdev(pad->entity);
-+	pdata = sensor->host_priv;
-+
-+	ret = ccp2_phyif_config(ccp2, &pdata->bus.ccp2);
-+	if (ret < 0)
-+		return ret;
-+
-+	ccp2_vp_config(ccp2, pdata->bus.ccp2.vpclk_div + 1);
-+
-+	v4l2_subdev_call(sensor, sensor, g_skip_top_lines, &lines);
-+
-+	format = &ccp2->formats[CCP2_PAD_SINK];
-+
-+	ccp2->if_cfg.data_start = lines;
-+	ccp2->if_cfg.crc = pdata->bus.ccp2.crc;
-+	ccp2->if_cfg.format = format->code;
-+	ccp2->if_cfg.data_size = format->height;
-+
-+	ccp2_lcx_config(ccp2, &ccp2->if_cfg);
-+
-+	return 0;
-+}
-+
-+static int ccp2_adjust_bandwidth(struct isp_ccp2_device *ccp2)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	const struct v4l2_mbus_framefmt *ofmt = &ccp2->formats[CCP2_PAD_SOURCE];
-+	unsigned long l3_ick = pipe->l3_ick;
-+	struct v4l2_fract *timeperframe;
-+	unsigned int vpclk_div = 2;
-+	unsigned int value;
-+	u64 bound;
-+	u64 area;
-+
-+	/* Compute the minimum clock divisor, based on the pipeline maximum
-+	 * data rate. This is an absolute lower bound if we don't want SBL
-+	 * overflows, so round the value up.
-+	 */
-+	vpclk_div = max_t(unsigned int, DIV_ROUND_UP(l3_ick, pipe->max_rate),
-+			  vpclk_div);
-+
-+	/* Compute the maximum clock divisor, based on the requested frame rate.
-+	 * This is a soft lower bound to achieve a frame rate equal or higher
-+	 * than the requested value, so round the value down.
-+	 */
-+	timeperframe = &pipe->max_timeperframe;
-+
-+	if (timeperframe->numerator) {
-+		area = ofmt->width * ofmt->height;
-+		bound = div_u64(area * timeperframe->denominator,
-+				timeperframe->numerator);
-+		value = min_t(u64, bound, l3_ick);
-+		vpclk_div = max_t(unsigned int, l3_ick / value, vpclk_div);
-+	}
-+
-+	dev_dbg(isp->dev, "%s: minimum clock divisor = %u\n", __func__,
-+		vpclk_div);
-+
-+	return vpclk_div;
-+}
-+
-+/*
-+ * ccp2_mem_configure - Initialize CCP2 memory input/output interface
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * @config: Pointer to ISP mem interface config structure
-+ *
-+ * This will analyze the parameters passed by the interface config
-+ * structure, and configure the respective registers for proper
-+ * CSI1/CCP2 memory input.
-+ */
-+static void ccp2_mem_configure(struct isp_ccp2_device *ccp2,
-+			       struct isp_interface_mem_config *config)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	u32 sink_pixcode = ccp2->formats[CCP2_PAD_SINK].code;
-+	u32 source_pixcode = ccp2->formats[CCP2_PAD_SOURCE].code;
-+	unsigned int dpcm_decompress = 0;
-+	u32 val, hwords;
-+
-+	if (sink_pixcode != source_pixcode &&
-+	    sink_pixcode == V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8)
-+		dpcm_decompress = 1;
-+
-+	ccp2_pwr_cfg(ccp2);
-+
-+	/* Hsize, Skip */
-+	isp_reg_writel(isp, ISPCCP2_LCM_HSIZE_SKIP_MIN |
-+		       (config->hsize_count << ISPCCP2_LCM_HSIZE_SHIFT),
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_HSIZE);
-+
-+	/* Vsize, no. of lines */
-+	isp_reg_writel(isp, config->vsize_count << ISPCCP2_LCM_VSIZE_SHIFT,
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_VSIZE);
-+
-+	if (ccp2->video_in.bpl_padding == 0)
-+		config->src_ofst = 0;
-+	else
-+		config->src_ofst = ccp2->video_in.bpl_value;
-+
-+	isp_reg_writel(isp, config->src_ofst, OMAP3_ISP_IOMEM_CCP2,
-+		       ISPCCP2_LCM_SRC_OFST);
-+
-+	/* Source and Destination formats */
-+	val = ISPCCP2_LCM_CTRL_DST_FORMAT_RAW10 <<
-+	      ISPCCP2_LCM_CTRL_DST_FORMAT_SHIFT;
-+
-+	if (dpcm_decompress) {
-+		/* source format is RAW8 */
-+		val |= ISPCCP2_LCM_CTRL_SRC_FORMAT_RAW8 <<
-+		       ISPCCP2_LCM_CTRL_SRC_FORMAT_SHIFT;
-+
-+		/* RAW8 + DPCM10 - simple predictor */
-+		val |= ISPCCP2_LCM_CTRL_SRC_DPCM_PRED;
-+
-+		/* enable source DPCM decompression */
-+		val |= ISPCCP2_LCM_CTRL_SRC_DECOMPR_DPCM10 <<
-+		       ISPCCP2_LCM_CTRL_SRC_DECOMPR_SHIFT;
-+	} else {
-+		/* source format is RAW10 */
-+		val |= ISPCCP2_LCM_CTRL_SRC_FORMAT_RAW10 <<
-+		       ISPCCP2_LCM_CTRL_SRC_FORMAT_SHIFT;
-+	}
-+
-+	/* Burst size to 32x64 */
-+	val |= ISPCCP2_LCM_CTRL_BURST_SIZE_32X <<
-+	       ISPCCP2_LCM_CTRL_BURST_SIZE_SHIFT;
-+
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_CTRL);
-+
-+	/* Prefetch setup */
-+	if (dpcm_decompress)
-+		hwords = (ISPCCP2_LCM_HSIZE_SKIP_MIN +
-+			  config->hsize_count) >> 3;
-+	else
-+		hwords = (ISPCCP2_LCM_HSIZE_SKIP_MIN +
-+			  config->hsize_count) >> 2;
-+
-+	isp_reg_writel(isp, hwords << ISPCCP2_LCM_PREFETCH_SHIFT,
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_PREFETCH);
-+
-+	/* Video port */
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_CTRL,
-+		    ISPCCP2_CTRL_IO_OUT_SEL | ISPCCP2_CTRL_MODE);
-+	ccp2_vp_config(ccp2, ccp2_adjust_bandwidth(ccp2));
-+
-+	/* Clear LCM interrupts */
-+	isp_reg_writel(isp, ISPCCP2_LCM_IRQSTATUS_OCPERROR_IRQ |
-+		       ISPCCP2_LCM_IRQSTATUS_EOF_IRQ,
-+		       OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_IRQSTATUS);
-+
-+	/* Enable LCM interupts */
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_IRQENABLE,
-+		    ISPCCP2_LCM_IRQSTATUS_EOF_IRQ |
-+		    ISPCCP2_LCM_IRQSTATUS_OCPERROR_IRQ);
-+}
-+
-+/*
-+ * ccp2_set_inaddr - Sets memory address of input frame.
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * @addr: 32bit memory address aligned on 32byte boundary.
-+ *
-+ * Configures the memory address from which the input frame is to be read.
-+ */
-+static void ccp2_set_inaddr(struct isp_ccp2_device *ccp2, u32 addr)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+
-+	isp_reg_writel(isp, addr, OMAP3_ISP_IOMEM_CCP2, ISPCCP2_LCM_SRC_ADDR);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Interrupt handling
-+ */
-+
-+static void ccp2_isr_buffer(struct isp_ccp2_device *ccp2)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&ccp2->subdev.entity);
-+	struct isp_buffer *buffer;
-+
-+	buffer = omap3isp_video_buffer_next(&ccp2->video_in, ccp2->error);
-+	if (buffer != NULL)
-+		ccp2_set_inaddr(ccp2, buffer->isp_addr);
-+
-+	pipe->state |= ISP_PIPELINE_IDLE_INPUT;
-+
-+	if (ccp2->state == ISP_PIPELINE_STREAM_SINGLESHOT) {
-+		if (isp_pipeline_ready(pipe))
-+			omap3isp_pipeline_set_stream(pipe,
-+						ISP_PIPELINE_STREAM_SINGLESHOT);
-+	}
-+
-+	ccp2->error = 0;
-+}
-+
-+/*
-+ * omap3isp_ccp2_isr - Handle ISP CCP2 interrupts
-+ * @ccp2: Pointer to ISP CCP2 device
-+ *
-+ * This will handle the CCP2 interrupts
-+ *
-+ * Returns -EIO in case of error, or 0 on success.
-+ */
-+int omap3isp_ccp2_isr(struct isp_ccp2_device *ccp2)
-+{
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	int ret = 0;
-+	static const u32 ISPCCP2_LC01_ERROR =
-+		ISPCCP2_LC01_IRQSTATUS_LC0_FIFO_OVF_IRQ |
-+		ISPCCP2_LC01_IRQSTATUS_LC0_CRC_IRQ |
-+		ISPCCP2_LC01_IRQSTATUS_LC0_FSP_IRQ |
-+		ISPCCP2_LC01_IRQSTATUS_LC0_FW_IRQ |
-+		ISPCCP2_LC01_IRQSTATUS_LC0_FSC_IRQ |
-+		ISPCCP2_LC01_IRQSTATUS_LC0_SSC_IRQ;
-+	u32 lcx_irqstatus, lcm_irqstatus;
-+
-+	/* First clear the interrupts */
-+	lcx_irqstatus = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2,
-+				      ISPCCP2_LC01_IRQSTATUS);
-+	isp_reg_writel(isp, lcx_irqstatus, OMAP3_ISP_IOMEM_CCP2,
-+		       ISPCCP2_LC01_IRQSTATUS);
-+
-+	lcm_irqstatus = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCP2,
-+				      ISPCCP2_LCM_IRQSTATUS);
-+	isp_reg_writel(isp, lcm_irqstatus, OMAP3_ISP_IOMEM_CCP2,
-+		       ISPCCP2_LCM_IRQSTATUS);
-+	/* Errors */
-+	if (lcx_irqstatus & ISPCCP2_LC01_ERROR) {
-+		ccp2->error = 1;
-+		dev_dbg(isp->dev, "CCP2 err:%x\n", lcx_irqstatus);
-+		return -EIO;
-+	}
-+
-+	if (lcm_irqstatus & ISPCCP2_LCM_IRQSTATUS_OCPERROR_IRQ) {
-+		ccp2->error = 1;
-+		dev_dbg(isp->dev, "CCP2 OCP err:%x\n", lcm_irqstatus);
-+		ret = -EIO;
-+	}
-+
-+	if (omap3isp_module_sync_is_stopping(&ccp2->wait, &ccp2->stopping))
-+		return 0;
-+
-+	/* Frame number propagation */
-+	if (lcx_irqstatus & ISPCCP2_LC01_IRQSTATUS_LC0_FS_IRQ) {
-+		struct isp_pipeline *pipe =
-+			to_isp_pipeline(&ccp2->subdev.entity);
-+		if (pipe->do_propagation)
-+			atomic_inc(&pipe->frame_number);
-+	}
-+
-+	/* Handle queued buffers on frame end interrupts */
-+	if (lcm_irqstatus & ISPCCP2_LCM_IRQSTATUS_EOF_IRQ)
-+		ccp2_isr_buffer(ccp2);
-+
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 subdev operations
-+ */
-+
-+static const unsigned int ccp2_fmts[] = {
-+	V4L2_MBUS_FMT_SGRBG10_1X10,
-+	V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8,
-+};
-+
-+/*
-+ * __ccp2_get_format - helper function for getting ccp2 format
-+ * @ccp2  : Pointer to ISP CCP2 device
-+ * @fh    : V4L2 subdev file handle
-+ * @pad   : pad number
-+ * @which : wanted subdev format
-+ * return format structure or NULL on error
-+ */
-+static struct v4l2_mbus_framefmt *
-+__ccp2_get_format(struct isp_ccp2_device *ccp2, struct v4l2_subdev_fh *fh,
-+		     unsigned int pad, enum v4l2_subdev_format_whence which)
-+{
-+	if (which == V4L2_SUBDEV_FORMAT_TRY)
-+		return v4l2_subdev_get_try_format(fh, pad);
-+	else
-+		return &ccp2->formats[pad];
-+}
-+
-+/*
-+ * ccp2_try_format - Handle try format by pad subdev method
-+ * @ccp2  : Pointer to ISP CCP2 device
-+ * @fh    : V4L2 subdev file handle
-+ * @pad   : pad num
-+ * @fmt   : pointer to v4l2 mbus format structure
-+ * @which : wanted subdev format
-+ */
-+static void ccp2_try_format(struct isp_ccp2_device *ccp2,
-+			       struct v4l2_subdev_fh *fh, unsigned int pad,
-+			       struct v4l2_mbus_framefmt *fmt,
-+			       enum v4l2_subdev_format_whence which)
-+{
-+	struct v4l2_mbus_framefmt *format;
-+
-+	switch (pad) {
-+	case CCP2_PAD_SINK:
-+		if (fmt->code != V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8)
-+			fmt->code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+
-+		if (ccp2->input == CCP2_INPUT_SENSOR) {
-+			fmt->width = clamp_t(u32, fmt->width,
-+					     ISPCCP2_DAT_START_MIN,
-+					     ISPCCP2_DAT_START_MAX);
-+			fmt->height = clamp_t(u32, fmt->height,
-+					      ISPCCP2_DAT_SIZE_MIN,
-+					      ISPCCP2_DAT_SIZE_MAX);
-+		} else if (ccp2->input == CCP2_INPUT_MEMORY) {
-+			fmt->width = clamp_t(u32, fmt->width,
-+					     ISPCCP2_LCM_HSIZE_COUNT_MIN,
-+					     ISPCCP2_LCM_HSIZE_COUNT_MAX);
-+			fmt->height = clamp_t(u32, fmt->height,
-+					      ISPCCP2_LCM_VSIZE_MIN,
-+					      ISPCCP2_LCM_VSIZE_MAX);
-+		}
-+		break;
-+
-+	case CCP2_PAD_SOURCE:
-+		/* Source format - copy sink format and change pixel code
-+		 * to SGRBG10_1X10 as we don't support CCP2 write to memory.
-+		 * When CCP2 write to memory feature will be added this
-+		 * should be changed properly.
-+		 */
-+		format = __ccp2_get_format(ccp2, fh, CCP2_PAD_SINK, which);
-+		memcpy(fmt, format, sizeof(*fmt));
-+		fmt->code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+		break;
-+	}
-+
-+	fmt->field = V4L2_FIELD_NONE;
-+	fmt->colorspace = V4L2_COLORSPACE_SRGB;
-+}
-+
-+/*
-+ * ccp2_enum_mbus_code - Handle pixel format enumeration
-+ * @sd     : pointer to v4l2 subdev structure
-+ * @fh     : V4L2 subdev file handle
-+ * @code   : pointer to v4l2_subdev_mbus_code_enum structure
-+ * return -EINVAL or zero on success
-+ */
-+static int ccp2_enum_mbus_code(struct v4l2_subdev *sd,
-+				  struct v4l2_subdev_fh *fh,
-+				  struct v4l2_subdev_mbus_code_enum *code)
-+{
-+	struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	if (code->pad == CCP2_PAD_SINK) {
-+		if (code->index >= ARRAY_SIZE(ccp2_fmts))
-+			return -EINVAL;
-+
-+		code->code = ccp2_fmts[code->index];
-+	} else {
-+		if (code->index != 0)
-+			return -EINVAL;
-+
-+		format = __ccp2_get_format(ccp2, fh, CCP2_PAD_SINK,
-+					      V4L2_SUBDEV_FORMAT_TRY);
-+		code->code = format->code;
-+	}
-+
-+	return 0;
-+}
-+
-+static int ccp2_enum_frame_size(struct v4l2_subdev *sd,
-+				   struct v4l2_subdev_fh *fh,
-+				   struct v4l2_subdev_frame_size_enum *fse)
-+{
-+	struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt format;
-+
-+	if (fse->index != 0)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = 1;
-+	format.height = 1;
-+	ccp2_try_format(ccp2, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->min_width = format.width;
-+	fse->min_height = format.height;
-+
-+	if (format.code != fse->code)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = -1;
-+	format.height = -1;
-+	ccp2_try_format(ccp2, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->max_width = format.width;
-+	fse->max_height = format.height;
-+
-+	return 0;
-+}
-+
-+/*
-+ * ccp2_get_format - Handle get format by pads subdev method
-+ * @sd    : pointer to v4l2 subdev structure
-+ * @fh    : V4L2 subdev file handle
-+ * @fmt   : pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on sucess
-+ */
-+static int ccp2_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __ccp2_get_format(ccp2, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	fmt->format = *format;
-+	return 0;
-+}
-+
-+/*
-+ * ccp2_set_format - Handle set format by pads subdev method
-+ * @sd    : pointer to v4l2 subdev structure
-+ * @fh    : V4L2 subdev file handle
-+ * @fmt   : pointer to v4l2 subdev format structure
-+ * returns zero
-+ */
-+static int ccp2_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __ccp2_get_format(ccp2, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	ccp2_try_format(ccp2, fh, fmt->pad, &fmt->format, fmt->which);
-+	*format = fmt->format;
-+
-+	/* Propagate the format from sink to source */
-+	if (fmt->pad == CCP2_PAD_SINK) {
-+		format = __ccp2_get_format(ccp2, fh, CCP2_PAD_SOURCE,
-+					   fmt->which);
-+		*format = fmt->format;
-+		ccp2_try_format(ccp2, fh, CCP2_PAD_SOURCE, format, fmt->which);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * ccp2_init_formats - Initialize formats on all pads
-+ * @sd: ISP CCP2 V4L2 subdevice
-+ * @fh: V4L2 subdev file handle
-+ *
-+ * Initialize all pad formats with default values. If fh is not NULL, try
-+ * formats are initialized on the file handle. Otherwise active formats are
-+ * initialized on the device.
-+ */
-+static int ccp2_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
-+{
-+	struct v4l2_subdev_format format;
-+
-+	memset(&format, 0, sizeof(format));
-+	format.pad = CCP2_PAD_SINK;
-+	format.which = fh ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
-+	format.format.code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+	format.format.width = 4096;
-+	format.format.height = 4096;
-+	ccp2_set_format(sd, fh, &format);
-+
-+	return 0;
-+}
-+
-+/*
-+ * ccp2_s_stream - Enable/Disable streaming on ccp2 subdev
-+ * @sd    : pointer to v4l2 subdev structure
-+ * @enable: 1 == Enable, 0 == Disable
-+ * return zero
-+ */
-+static int ccp2_s_stream(struct v4l2_subdev *sd, int enable)
-+{
-+	struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
-+	struct isp_device *isp = to_isp_device(ccp2);
-+	struct device *dev = to_device(ccp2);
-+	int ret;
-+
-+	if (ccp2->state == ISP_PIPELINE_STREAM_STOPPED) {
-+		if (enable == ISP_PIPELINE_STREAM_STOPPED)
-+			return 0;
-+		atomic_set(&ccp2->stopping, 0);
-+		ccp2->error = 0;
-+	}
-+
-+	switch (enable) {
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		if (ccp2->phy) {
-+			ret = omap3isp_csiphy_acquire(ccp2->phy);
-+			if (ret < 0)
-+				return ret;
-+		}
-+
-+		ccp2_if_configure(ccp2);
-+		ccp2_print_status(ccp2);
-+
-+		/* Enable CSI1/CCP2 interface */
-+		ccp2_if_enable(ccp2, 1);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_SINGLESHOT:
-+		if (ccp2->state != ISP_PIPELINE_STREAM_SINGLESHOT) {
-+			struct v4l2_mbus_framefmt *format;
-+
-+			format = &ccp2->formats[CCP2_PAD_SINK];
-+
-+			ccp2->mem_cfg.hsize_count = format->width;
-+			ccp2->mem_cfg.vsize_count = format->height;
-+			ccp2->mem_cfg.src_ofst = 0;
-+
-+			ccp2_mem_configure(ccp2, &ccp2->mem_cfg);
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_CSI1_READ);
-+			ccp2_print_status(ccp2);
-+		}
-+		ccp2_mem_enable(ccp2, 1);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+		if (omap3isp_module_sync_idle(&sd->entity, &ccp2->wait,
-+					      &ccp2->stopping))
-+			dev_dbg(dev, "%s: module stop timeout.\n", sd->name);
-+		if (ccp2->input == CCP2_INPUT_MEMORY) {
-+			ccp2_mem_enable(ccp2, 0);
-+			omap3isp_sbl_disable(isp, OMAP3_ISP_SBL_CSI1_READ);
-+		} else if (ccp2->input == CCP2_INPUT_SENSOR) {
-+			/* Disable CSI1/CCP2 interface */
-+			ccp2_if_enable(ccp2, 0);
-+			if (ccp2->phy)
-+				omap3isp_csiphy_release(ccp2->phy);
-+		}
-+		break;
-+	}
-+
-+	ccp2->state = enable;
-+	return 0;
-+}
-+
-+/* subdev core operations */
-+static const struct v4l2_subdev_core_ops ccp2_sd_core_ops = {
-+	.queryctrl = v4l2_subdev_queryctrl,
-+	.querymenu = v4l2_subdev_querymenu,
-+	.g_ctrl = v4l2_subdev_g_ctrl,
-+	.s_ctrl = v4l2_subdev_s_ctrl,
-+	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
-+	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
-+	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
-+};
-+
-+/* subdev file operations */
-+static const struct v4l2_subdev_file_ops ccp2_sd_file_ops = {
-+	.open = ccp2_init_formats,
-+};
-+
-+/* subdev video operations */
-+static const struct v4l2_subdev_video_ops ccp2_sd_video_ops = {
-+	.s_stream = ccp2_s_stream,
-+};
-+
-+/* subdev pad operations */
-+static const struct v4l2_subdev_pad_ops ccp2_sd_pad_ops = {
-+	.enum_mbus_code = ccp2_enum_mbus_code,
-+	.enum_frame_size = ccp2_enum_frame_size,
-+	.get_fmt = ccp2_get_format,
-+	.set_fmt = ccp2_set_format,
-+};
-+
-+/* subdev operations */
-+static const struct v4l2_subdev_ops ccp2_sd_ops = {
-+	.core = &ccp2_sd_core_ops,
-+	.file = &ccp2_sd_file_ops,
-+	.video = &ccp2_sd_video_ops,
-+	.pad = &ccp2_sd_pad_ops,
-+};
-+
-+/* --------------------------------------------------------------------------
-+ * ISP ccp2 video device node
-+ */
-+
-+/*
-+ * ccp2_video_queue - Queue video buffer.
-+ * @video : Pointer to isp video structure
-+ * @buffer: Pointer to isp_buffer structure
-+ * return -EIO or zero on success
-+ */
-+static int ccp2_video_queue(struct isp_video *video, struct isp_buffer *buffer)
-+{
-+	struct isp_ccp2_device *ccp2 = &video->isp->isp_ccp2;
-+
-+	ccp2_set_inaddr(ccp2, buffer->isp_addr);
-+	return 0;
-+}
-+
-+static const struct isp_video_operations ccp2_video_ops = {
-+	.queue = ccp2_video_queue,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * Media entity operations
-+ */
-+
-+/*
-+ * ccp2_link_setup - Setup ccp2 connections.
-+ * @entity : Pointer to media entity structure
-+ * @local  : Pointer to local pad array
-+ * @remote : Pointer to remote pad array
-+ * @flags  : Link flags
-+ * return -EINVAL on error or zero on success
-+ */
-+static int ccp2_link_setup(struct media_entity *entity,
-+			   const struct media_pad *local,
-+			   const struct media_pad *remote, u32 flags)
-+{
-+	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
-+	struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
-+
-+	switch (local->index | media_entity_type(remote->entity)) {
-+	case CCP2_PAD_SINK | MEDIA_ENT_T_DEVNODE:
-+		/* read from memory */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (ccp2->input == CCP2_INPUT_SENSOR)
-+				return -EBUSY;
-+			ccp2->input = CCP2_INPUT_MEMORY;
-+		} else {
-+			if (ccp2->input == CCP2_INPUT_MEMORY)
-+				ccp2->input = CCP2_INPUT_NONE;
-+		}
-+		break;
-+
-+	case CCP2_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* read from sensor/phy */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (ccp2->input == CCP2_INPUT_MEMORY)
-+				return -EBUSY;
-+			ccp2->input = CCP2_INPUT_SENSOR;
-+		} else {
-+			if (ccp2->input == CCP2_INPUT_SENSOR)
-+				ccp2->input = CCP2_INPUT_NONE;
-+		} break;
-+
-+	case CCP2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* write to video port/ccdc */
-+		if (flags & MEDIA_LNK_FL_ENABLED)
-+			ccp2->output = CCP2_OUTPUT_CCDC;
-+		else
-+			ccp2->output = CCP2_OUTPUT_NONE;
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+/* media operations */
-+static const struct media_entity_operations ccp2_media_ops = {
-+	.link_setup = ccp2_link_setup,
-+};
-+
-+/*
-+ * ccp2_init_entities - Initialize ccp2 subdev and media entity.
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * return negative error code or zero on success
-+ */
-+static int ccp2_init_entities(struct isp_ccp2_device *ccp2)
-+{
-+	struct v4l2_subdev *sd = &ccp2->subdev;
-+	struct media_pad *pads = ccp2->pads;
-+	struct media_entity *me = &sd->entity;
-+	int ret;
-+
-+	ccp2->input = CCP2_INPUT_NONE;
-+	ccp2->output = CCP2_OUTPUT_NONE;
-+
-+	v4l2_subdev_init(sd, &ccp2_sd_ops);
-+	strlcpy(sd->name, "OMAP3 ISP CCP2", sizeof(sd->name));
-+	sd->grp_id = 1 << 16;   /* group ID for isp subdevs */
-+	v4l2_set_subdevdata(sd, ccp2);
-+	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
-+
-+	v4l2_ctrl_handler_init(&ccp2->ctrls, 1);
-+	sd->ctrl_handler = &ccp2->ctrls;
-+
-+	pads[CCP2_PAD_SINK].flags = MEDIA_PAD_FL_INPUT;
-+	pads[CCP2_PAD_SOURCE].flags = MEDIA_PAD_FL_OUTPUT;
-+
-+	me->ops = &ccp2_media_ops;
-+	ret = media_entity_init(me, CCP2_PADS_NUM, pads, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	ccp2_init_formats(sd, NULL);
-+
-+	/*
-+	 * The CCP2 has weird line alignment requirements, possibly caused by
-+	 * DPCM8 decompression. Line length for data read from memory must be a
-+	 * multiple of 128 bits (16 bytes) in continuous mode (when no padding
-+	 * is present at end of lines). Additionally, if padding is used, the
-+	 * padded line length must be a multiple of 32 bytes. To simplify the
-+	 * implementation we use a fixed 32 bytes alignment regardless of the
-+	 * input format and width. If strict 128 bits alignment support is
-+	 * required ispvideo will need to be made aware of this special dual
-+	 * alignement requirements.
-+	 */
-+	ccp2->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-+	ccp2->video_in.bpl_alignment = 32;
-+	ccp2->video_in.bpl_max = 0xffffffe0;
-+	ccp2->video_in.isp = to_isp_device(ccp2);
-+	ccp2->video_in.ops = &ccp2_video_ops;
-+	ccp2->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 3;
-+
-+	ret = omap3isp_video_init(&ccp2->video_in, "CCP2");
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Connect the video node to the ccp2 subdev. */
-+	ret = media_entity_create_link(&ccp2->video_in.video.entity, 0,
-+				       &ccp2->subdev.entity, CCP2_PAD_SINK, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+/*
-+ * omap3isp_ccp2_unregister_entities - Unregister media entities: subdev
-+ * @ccp2: Pointer to ISP CCP2 device
-+ */
-+void omap3isp_ccp2_unregister_entities(struct isp_ccp2_device *ccp2)
-+{
-+	media_entity_cleanup(&ccp2->subdev.entity);
-+
-+	v4l2_device_unregister_subdev(&ccp2->subdev);
-+	v4l2_ctrl_handler_free(&ccp2->ctrls);
-+	omap3isp_video_unregister(&ccp2->video_in);
-+}
-+
-+/*
-+ * omap3isp_ccp2_register_entities - Register the subdev media entity
-+ * @ccp2: Pointer to ISP CCP2 device
-+ * @vdev: Pointer to v4l device
-+ * return negative error code or zero on success
-+ */
-+
-+int omap3isp_ccp2_register_entities(struct isp_ccp2_device *ccp2,
-+				    struct v4l2_device *vdev)
-+{
-+	int ret;
-+
-+	/* Register the subdev and video nodes. */
-+	ret = v4l2_device_register_subdev(vdev, &ccp2->subdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&ccp2->video_in, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	return 0;
-+
-+error:
-+	omap3isp_ccp2_unregister_entities(ccp2);
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP ccp2 initialisation and cleanup
-+ */
-+
-+/*
-+ * omap3isp_ccp2_cleanup - CCP2 un-initialization
-+ * @isp : Pointer to ISP device
-+ */
-+void omap3isp_ccp2_cleanup(struct isp_device *isp)
-+{
-+}
-+
-+/*
-+ * omap3isp_ccp2_init - CCP2 initialization.
-+ * @isp : Pointer to ISP device
-+ * return negative error code or zero on success
-+ */
-+int omap3isp_ccp2_init(struct isp_device *isp)
-+{
-+	struct isp_ccp2_device *ccp2 = &isp->isp_ccp2;
-+	int ret;
-+
-+	init_waitqueue_head(&ccp2->wait);
-+
-+	/* On the OMAP36xx, the CCP2 uses the CSI PHY1 or PHY2, shared with
-+	 * the CSI2c or CSI2a receivers. The PHY then needs to be explicitly
-+	 * configured.
-+	 *
-+	 * TODO: Don't hardcode the usage of PHY1 (shared with CSI2c).
-+	 */
-+	if (isp->revision == ISP_REVISION_15_0)
-+		ccp2->phy = &isp->isp_csiphy1;
-+
-+	ret = ccp2_init_entities(ccp2);
-+	if (ret < 0)
-+		goto out;
-+
-+	ccp2_reset(ccp2);
-+out:
-+	if (ret)
-+		omap3isp_ccp2_cleanup(isp);
-+
-+	return ret;
-+}
-diff --git a/drivers/media/video/isp/ispccp2.h b/drivers/media/video/isp/ispccp2.h
-new file mode 100644
-index 0000000..1c1504e
---- /dev/null
-+++ b/drivers/media/video/isp/ispccp2.h
-@@ -0,0 +1,101 @@
-+/*
-+ * ispccp2.h
-+ *
-+ * TI OMAP3 ISP - CCP2 module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2010 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_CCP2_H
-+#define OMAP3_ISP_CCP2_H
-+
-+#include <linux/videodev2.h>
-+#include <media/v4l2-ctrls.h>
-+
-+struct isp_device;
-+struct isp_csiphy;
-+
-+/* Sink and source ccp2 pads */
-+#define CCP2_PAD_SINK			0
-+#define CCP2_PAD_SOURCE			1
-+#define CCP2_PADS_NUM			2
-+
-+/* CCP2 input media entity */
-+enum ccp2_input_entity {
-+	CCP2_INPUT_NONE,
-+	CCP2_INPUT_SENSOR,
-+	CCP2_INPUT_MEMORY,
-+};
-+
-+/* CCP2 output media entity */
-+enum ccp2_output_entity {
-+	CCP2_OUTPUT_NONE,
-+	CCP2_OUTPUT_CCDC,
-+	CCP2_OUTPUT_MEMORY,
-+};
-+
-+
-+/* Logical channel configuration */
-+struct isp_interface_lcx_config {
-+	int crc;
-+	u32 data_start;
-+	u32 data_size;
-+	u32 format;
-+};
-+
-+/* Memory channel configuration */
-+struct isp_interface_mem_config {
-+	u32 dst_port;
-+	u32 vsize_count;
-+	u32 hsize_count;
-+	u32 src_ofst;
-+	u32 dst_ofst;
-+};
-+
-+/* CCP2 device */
-+struct isp_ccp2_device {
-+	struct v4l2_subdev subdev;
-+	struct v4l2_mbus_framefmt formats[CCP2_PADS_NUM];
-+	struct media_pad pads[CCP2_PADS_NUM];
-+
-+	struct v4l2_ctrl_handler ctrls;
-+
-+	enum ccp2_input_entity input;
-+	enum ccp2_output_entity output;
-+	struct isp_interface_lcx_config if_cfg;
-+	struct isp_interface_mem_config mem_cfg;
-+	struct isp_video video_in;
-+	struct isp_csiphy *phy;
-+	unsigned int error;
-+	enum isp_pipeline_stream_state state;
-+	wait_queue_head_t wait;
-+	atomic_t stopping;
-+};
-+
-+/* Function declarations */
-+int omap3isp_ccp2_init(struct isp_device *isp);
-+void omap3isp_ccp2_cleanup(struct isp_device *isp);
-+int omap3isp_ccp2_register_entities(struct isp_ccp2_device *ccp2,
-+			struct v4l2_device *vdev);
-+void omap3isp_ccp2_unregister_entities(struct isp_ccp2_device *ccp2);
-+int omap3isp_ccp2_isr(struct isp_ccp2_device *ccp2);
-+
-+#endif	/* OMAP3_ISP_CCP2_H */
-diff --git a/drivers/media/video/isp/ispcsi2.c b/drivers/media/video/isp/ispcsi2.c
-new file mode 100644
-index 0000000..30ced95
---- /dev/null
-+++ b/drivers/media/video/isp/ispcsi2.c
-@@ -0,0 +1,1332 @@
-+/*
-+ * ispcsi2.c
-+ *
-+ * TI OMAP3 ISP - CSI2 module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 <media/v4l2-common.h>
-+#include <linux/v4l2-mediabus.h>
-+#include <linux/mm.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "ispcsi2.h"
-+
-+/*
-+ * csi2_if_enable - Enable CSI2 Receiver interface.
-+ * @enable: enable flag
-+ *
-+ */
-+static void csi2_if_enable(struct isp_device *isp,
-+			   struct isp_csi2_device *csi2, u8 enable)
-+{
-+	struct isp_csi2_ctrl_cfg *currctrl = &csi2->ctrl;
-+
-+	isp_reg_clr_set(isp, csi2->regs1, ISPCSI2_CTRL, ISPCSI2_CTRL_IF_EN,
-+			enable ? ISPCSI2_CTRL_IF_EN : 0);
-+
-+	currctrl->if_enable = enable;
-+}
-+
-+/*
-+ * csi2_recv_config - CSI2 receiver module configuration.
-+ * @currctrl: isp_csi2_ctrl_cfg structure
-+ *
-+ */
-+static void csi2_recv_config(struct isp_device *isp,
-+			     struct isp_csi2_device *csi2,
-+			     struct isp_csi2_ctrl_cfg *currctrl)
-+{
-+	u32 reg;
-+
-+	reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTRL);
-+
-+	if (currctrl->frame_mode)
-+		reg |= ISPCSI2_CTRL_FRAME;
-+	else
-+		reg &= ~ISPCSI2_CTRL_FRAME;
-+
-+	if (currctrl->vp_clk_enable)
-+		reg |= ISPCSI2_CTRL_VP_CLK_EN;
-+	else
-+		reg &= ~ISPCSI2_CTRL_VP_CLK_EN;
-+
-+	if (currctrl->vp_only_enable)
-+		reg |= ISPCSI2_CTRL_VP_ONLY_EN;
-+	else
-+		reg &= ~ISPCSI2_CTRL_VP_ONLY_EN;
-+
-+	reg &= ~ISPCSI2_CTRL_VP_OUT_CTRL_MASK;
-+	reg |= currctrl->vp_out_ctrl << ISPCSI2_CTRL_VP_OUT_CTRL_SHIFT;
-+
-+	if (currctrl->ecc_enable)
-+		reg |= ISPCSI2_CTRL_ECC_EN;
-+	else
-+		reg &= ~ISPCSI2_CTRL_ECC_EN;
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTRL);
-+}
-+
-+static const unsigned int csi2_input_fmts[] = {
-+	V4L2_MBUS_FMT_SGRBG10_1X10,
-+	V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8,
-+	V4L2_MBUS_FMT_SRGGB10_1X10,
-+	V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8,
-+	V4L2_MBUS_FMT_SBGGR10_1X10,
-+	V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8,
-+	V4L2_MBUS_FMT_SGBRG10_1X10,
-+	V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8,
-+};
-+
-+/* To set the format on the CSI2 requires a mapping function that takes
-+ * the following inputs:
-+ * - 2 different formats (at this time)
-+ * - 2 destinations (mem, vp+mem) (vp only handled separately)
-+ * - 2 decompression options (on, off)
-+ * - 2 isp revisions (certain format must be handled differently on OMAP3630)
-+ * Output should be CSI2 frame format code
-+ * Array indices as follows: [format][dest][decompr][is_3630]
-+ * Not all combinations are valid. 0 means invalid.
-+ */
-+static const u16 __csi2_fmt_map[2][2][2][2] = {
-+	/* RAW10 formats */
-+	{
-+		/* Output to memory */
-+		{
-+			/* No DPCM decompression */
-+			{ CSI2_PIX_FMT_RAW10_EXP16, CSI2_PIX_FMT_RAW10_EXP16 },
-+			/* DPCM decompression */
-+			{ 0, 0 },
-+		},
-+		/* Output to both */
-+		{
-+			/* No DPCM decompression */
-+			{ CSI2_PIX_FMT_RAW10_EXP16_VP,
-+			  CSI2_PIX_FMT_RAW10_EXP16_VP },
-+			/* DPCM decompression */
-+			{ 0, 0 },
-+		},
-+	},
-+	/* RAW10 DPCM8 formats */
-+	{
-+		/* Output to memory */
-+		{
-+			/* No DPCM decompression */
-+			{ CSI2_PIX_FMT_RAW8, CSI2_USERDEF_8BIT_DATA1 },
-+			/* DPCM decompression */
-+			{ CSI2_PIX_FMT_RAW8_DPCM10_EXP16,
-+			  CSI2_USERDEF_8BIT_DATA1_DPCM10 },
-+		},
-+		/* Output to both */
-+		{
-+			/* No DPCM decompression */
-+			{ CSI2_PIX_FMT_RAW8_VP,
-+			  CSI2_PIX_FMT_RAW8_VP },
-+			/* DPCM decompression */
-+			{ CSI2_PIX_FMT_RAW8_DPCM10_VP,
-+			  CSI2_USERDEF_8BIT_DATA1_DPCM10_VP },
-+		},
-+	},
-+};
-+
-+/*
-+ * csi2_ctx_map_format - Map CSI2 sink media bus format to CSI2 format ID
-+ * @csi2: ISP CSI2 device
-+ *
-+ * Returns CSI2 physical format id
-+ */
-+static u16 csi2_ctx_map_format(struct isp_csi2_device *csi2)
-+{
-+	const struct v4l2_mbus_framefmt *fmt = &csi2->formats[CSI2_PAD_SINK];
-+	int fmtidx, destidx, is_3630;
-+
-+	switch (fmt->code) {
-+	case V4L2_MBUS_FMT_SGRBG10_1X10:
-+	case V4L2_MBUS_FMT_SRGGB10_1X10:
-+	case V4L2_MBUS_FMT_SBGGR10_1X10:
-+	case V4L2_MBUS_FMT_SGBRG10_1X10:
-+		fmtidx = 0;
-+		break;
-+	case V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8:
-+	case V4L2_MBUS_FMT_SRGGB10_DPCM8_1X8:
-+	case V4L2_MBUS_FMT_SBGGR10_DPCM8_1X8:
-+	case V4L2_MBUS_FMT_SGBRG10_DPCM8_1X8:
-+		fmtidx = 1;
-+		break;
-+	default:
-+		WARN(1, KERN_ERR "CSI2: pixel format %08x unsupported!\n",
-+		     fmt->code);
-+		return 0;
-+	}
-+
-+	if (!(csi2->output & CSI2_OUTPUT_CCDC) &&
-+	    !(csi2->output & CSI2_OUTPUT_MEMORY)) {
-+		/* Neither output enabled is a valid combination */
-+		return CSI2_PIX_FMT_OTHERS;
-+	}
-+
-+	/* If we need to skip frames at the beginning of the stream disable the
-+	 * video port to avoid sending the skipped frames to the CCDC.
-+	 */
-+	destidx = csi2->frame_skip ? 0 : !!(csi2->output & CSI2_OUTPUT_CCDC);
-+	is_3630 = csi2->isp->revision == ISP_REVISION_15_0;
-+
-+	return __csi2_fmt_map[fmtidx][destidx][csi2->dpcm_decompress][is_3630];
-+}
-+
-+/*
-+ * csi2_set_outaddr - Set memory address to save output image
-+ * @csi2: Pointer to ISP CSI2a device.
-+ * @addr: ISP MMU Mapped 32-bit memory address aligned on 32 byte boundary.
-+ *
-+ * Sets the memory address where the output will be saved.
-+ *
-+ * Returns 0 if successful, or -EINVAL if the address is not in the 32 byte
-+ * boundary.
-+ */
-+static void csi2_set_outaddr(struct isp_csi2_device *csi2, u32 addr)
-+{
-+	struct isp_device *isp = csi2->isp;
-+	struct isp_csi2_ctx_cfg *ctx = &csi2->contexts[0];
-+
-+	ctx->ping_addr = ctx->pong_addr = addr;
-+	isp_reg_writel(isp, ctx->ping_addr,
-+		       csi2->regs1, ISPCSI2_CTX_DAT_PING_ADDR(ctx->ctxnum));
-+	isp_reg_writel(isp, ctx->pong_addr,
-+		       csi2->regs1, ISPCSI2_CTX_DAT_PONG_ADDR(ctx->ctxnum));
-+}
-+
-+/*
-+ * is_usr_def_mapping - Checks whether USER_DEF_MAPPING should
-+ *			be enabled by CSI2.
-+ * @format_id: mapped format id
-+ *
-+ */
-+static inline int is_usr_def_mapping(u32 format_id)
-+{
-+	return (format_id & 0x40) ? 1 : 0;
-+}
-+
-+/*
-+ * csi2_ctx_enable - Enable specified CSI2 context
-+ * @ctxnum: Context number, valid between 0 and 7 values.
-+ * @enable: enable
-+ *
-+ */
-+static void csi2_ctx_enable(struct isp_device *isp,
-+			    struct isp_csi2_device *csi2, u8 ctxnum, u8 enable)
-+{
-+	struct isp_csi2_ctx_cfg *ctx = &csi2->contexts[ctxnum];
-+	unsigned int skip = 0;
-+	u32 reg;
-+
-+	reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL1(ctxnum));
-+
-+	if (enable) {
-+		if (csi2->frame_skip)
-+			skip = csi2->frame_skip;
-+		else if (csi2->output & CSI2_OUTPUT_MEMORY)
-+			skip = 1;
-+
-+		reg &= ~ISPCSI2_CTX_CTRL1_COUNT_MASK;
-+		reg |= ISPCSI2_CTX_CTRL1_COUNT_UNLOCK
-+		    |  (skip << ISPCSI2_CTX_CTRL1_COUNT_SHIFT)
-+		    |  ISPCSI2_CTX_CTRL1_CTX_EN;
-+	} else {
-+		reg &= ~ISPCSI2_CTX_CTRL1_CTX_EN;
-+	}
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL1(ctxnum));
-+	ctx->enabled = enable;
-+}
-+
-+/*
-+ * csi2_ctx_config - CSI2 context configuration.
-+ * @ctx: context configuration
-+ *
-+ */
-+static void csi2_ctx_config(struct isp_device *isp,
-+			    struct isp_csi2_device *csi2,
-+			    struct isp_csi2_ctx_cfg *ctx)
-+{
-+	u32 reg;
-+
-+	/* Set up CSI2_CTx_CTRL1 */
-+	reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL1(ctx->ctxnum));
-+
-+	if (ctx->eof_enabled)
-+		reg |= ISPCSI2_CTX_CTRL1_EOF_EN;
-+	else
-+		reg &= ~ISPCSI2_CTX_CTRL1_EOF_EN;
-+
-+	if (ctx->eol_enabled)
-+		reg |= ISPCSI2_CTX_CTRL1_EOL_EN;
-+	else
-+		reg &= ~ISPCSI2_CTX_CTRL1_EOL_EN;
-+
-+	if (ctx->checksum_enabled)
-+		reg |= ISPCSI2_CTX_CTRL1_CS_EN;
-+	else
-+		reg &= ~ISPCSI2_CTX_CTRL1_CS_EN;
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL1(ctx->ctxnum));
-+
-+	/* Set up CSI2_CTx_CTRL2 */
-+	reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL2(ctx->ctxnum));
-+
-+	reg &= ~(ISPCSI2_CTX_CTRL2_VIRTUAL_ID_MASK);
-+	reg |= ctx->virtual_id << ISPCSI2_CTX_CTRL2_VIRTUAL_ID_SHIFT;
-+
-+	reg &= ~(ISPCSI2_CTX_CTRL2_FORMAT_MASK);
-+	reg |= ctx->format_id << ISPCSI2_CTX_CTRL2_FORMAT_SHIFT;
-+
-+	if (ctx->dpcm_decompress) {
-+		if (ctx->dpcm_predictor)
-+			reg |= ISPCSI2_CTX_CTRL2_DPCM_PRED;
-+		else
-+			reg &= ~ISPCSI2_CTX_CTRL2_DPCM_PRED;
-+	}
-+
-+	if (is_usr_def_mapping(ctx->format_id)) {
-+		reg &= ~ISPCSI2_CTX_CTRL2_USER_DEF_MAP_MASK;
-+		reg |= 2 << ISPCSI2_CTX_CTRL2_USER_DEF_MAP_SHIFT;
-+	}
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL2(ctx->ctxnum));
-+
-+	/* Set up CSI2_CTx_CTRL3 */
-+	reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_CTRL3(ctx->ctxnum));
-+	reg &= ~(ISPCSI2_CTX_CTRL3_ALPHA_MASK);
-+	reg |= (ctx->alpha << ISPCSI2_CTX_CTRL3_ALPHA_SHIFT);
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_CTX_CTRL3(ctx->ctxnum));
-+
-+	/* Set up CSI2_CTx_DAT_OFST */
-+	reg = isp_reg_readl(isp, csi2->regs1,
-+			    ISPCSI2_CTX_DAT_OFST(ctx->ctxnum));
-+	reg &= ~ISPCSI2_CTX_DAT_OFST_OFST_MASK;
-+	reg |= ctx->data_offset << ISPCSI2_CTX_DAT_OFST_OFST_SHIFT;
-+	isp_reg_writel(isp, reg, csi2->regs1,
-+		       ISPCSI2_CTX_DAT_OFST(ctx->ctxnum));
-+
-+	isp_reg_writel(isp, ctx->ping_addr,
-+		       csi2->regs1, ISPCSI2_CTX_DAT_PING_ADDR(ctx->ctxnum));
-+
-+	isp_reg_writel(isp, ctx->pong_addr,
-+		       csi2->regs1, ISPCSI2_CTX_DAT_PONG_ADDR(ctx->ctxnum));
-+}
-+
-+/*
-+ * csi2_timing_config - CSI2 timing configuration.
-+ * @timing: csi2_timing_cfg structure
-+ */
-+static void csi2_timing_config(struct isp_device *isp,
-+			       struct isp_csi2_device *csi2,
-+			       struct isp_csi2_timing_cfg *timing)
-+{
-+	u32 reg;
-+
-+	reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_TIMING);
-+
-+	if (timing->force_rx_mode)
-+		reg |= ISPCSI2_TIMING_FORCE_RX_MODE_IO(timing->ionum);
-+	else
-+		reg &= ~ISPCSI2_TIMING_FORCE_RX_MODE_IO(timing->ionum);
-+
-+	if (timing->stop_state_16x)
-+		reg |= ISPCSI2_TIMING_STOP_STATE_X16_IO(timing->ionum);
-+	else
-+		reg &= ~ISPCSI2_TIMING_STOP_STATE_X16_IO(timing->ionum);
-+
-+	if (timing->stop_state_4x)
-+		reg |= ISPCSI2_TIMING_STOP_STATE_X4_IO(timing->ionum);
-+	else
-+		reg &= ~ISPCSI2_TIMING_STOP_STATE_X4_IO(timing->ionum);
-+
-+	reg &= ~ISPCSI2_TIMING_STOP_STATE_COUNTER_IO_MASK(timing->ionum);
-+	reg |= timing->stop_state_counter <<
-+	       ISPCSI2_TIMING_STOP_STATE_COUNTER_IO_SHIFT(timing->ionum);
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_TIMING);
-+}
-+
-+/*
-+ * csi2_irq_ctx_set - Enables CSI2 Context IRQs.
-+ * @enable: Enable/disable CSI2 Context interrupts
-+ */
-+static void csi2_irq_ctx_set(struct isp_device *isp,
-+			     struct isp_csi2_device *csi2, int enable)
-+{
-+	u32 reg = ISPCSI2_CTX_IRQSTATUS_FE_IRQ;
-+	int i;
-+
-+	if (csi2->use_fs_irq)
-+		reg |= ISPCSI2_CTX_IRQSTATUS_FS_IRQ;
-+
-+	for (i = 0; i < 8; i++) {
-+		isp_reg_writel(isp, reg, csi2->regs1,
-+			       ISPCSI2_CTX_IRQSTATUS(i));
-+		if (enable)
-+			isp_reg_set(isp, csi2->regs1, ISPCSI2_CTX_IRQENABLE(i),
-+				    reg);
-+		else
-+			isp_reg_clr(isp, csi2->regs1, ISPCSI2_CTX_IRQENABLE(i),
-+				    reg);
-+	}
-+}
-+
-+/*
-+ * csi2_irq_complexio1_set - Enables CSI2 ComplexIO IRQs.
-+ * @enable: Enable/disable CSI2 ComplexIO #1 interrupts
-+ */
-+static void csi2_irq_complexio1_set(struct isp_device *isp,
-+				    struct isp_csi2_device *csi2, int enable)
-+{
-+	u32 reg;
-+	reg = ISPCSI2_PHY_IRQENABLE_STATEALLULPMEXIT |
-+		ISPCSI2_PHY_IRQENABLE_STATEALLULPMENTER |
-+		ISPCSI2_PHY_IRQENABLE_STATEULPM5 |
-+		ISPCSI2_PHY_IRQENABLE_ERRCONTROL5 |
-+		ISPCSI2_PHY_IRQENABLE_ERRESC5 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS5 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTHS5 |
-+		ISPCSI2_PHY_IRQENABLE_STATEULPM4 |
-+		ISPCSI2_PHY_IRQENABLE_ERRCONTROL4 |
-+		ISPCSI2_PHY_IRQENABLE_ERRESC4 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS4 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTHS4 |
-+		ISPCSI2_PHY_IRQENABLE_STATEULPM3 |
-+		ISPCSI2_PHY_IRQENABLE_ERRCONTROL3 |
-+		ISPCSI2_PHY_IRQENABLE_ERRESC3 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS3 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTHS3 |
-+		ISPCSI2_PHY_IRQENABLE_STATEULPM2 |
-+		ISPCSI2_PHY_IRQENABLE_ERRCONTROL2 |
-+		ISPCSI2_PHY_IRQENABLE_ERRESC2 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS2 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTHS2 |
-+		ISPCSI2_PHY_IRQENABLE_STATEULPM1 |
-+		ISPCSI2_PHY_IRQENABLE_ERRCONTROL1 |
-+		ISPCSI2_PHY_IRQENABLE_ERRESC1 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS1 |
-+		ISPCSI2_PHY_IRQENABLE_ERRSOTHS1;
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_PHY_IRQSTATUS);
-+	if (enable)
-+		reg |= isp_reg_readl(isp, csi2->regs1, ISPCSI2_PHY_IRQENABLE);
-+	else
-+		reg = 0;
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_PHY_IRQENABLE);
-+}
-+
-+/*
-+ * csi2_irq_status_set - Enables CSI2 Status IRQs.
-+ * @enable: Enable/disable CSI2 Status interrupts
-+ */
-+static void csi2_irq_status_set(struct isp_device *isp,
-+				struct isp_csi2_device *csi2, int enable)
-+{
-+	u32 reg;
-+	reg = ISPCSI2_IRQSTATUS_OCP_ERR_IRQ |
-+		ISPCSI2_IRQSTATUS_SHORT_PACKET_IRQ |
-+		ISPCSI2_IRQSTATUS_ECC_CORRECTION_IRQ |
-+		ISPCSI2_IRQSTATUS_ECC_NO_CORRECTION_IRQ |
-+		ISPCSI2_IRQSTATUS_COMPLEXIO2_ERR_IRQ |
-+		ISPCSI2_IRQSTATUS_COMPLEXIO1_ERR_IRQ |
-+		ISPCSI2_IRQSTATUS_FIFO_OVF_IRQ |
-+		ISPCSI2_IRQSTATUS_CONTEXT(0);
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_IRQSTATUS);
-+	if (enable)
-+		reg |= isp_reg_readl(isp, csi2->regs1, ISPCSI2_IRQENABLE);
-+	else
-+		reg = 0;
-+
-+	isp_reg_writel(isp, reg, csi2->regs1, ISPCSI2_IRQENABLE);
-+}
-+
-+/*
-+ * omap3isp_csi2_reset - Resets the CSI2 module.
-+ *
-+ * Must be called with the phy lock held.
-+ *
-+ * Returns 0 if successful, or -EBUSY if power command didn't respond.
-+ */
-+int omap3isp_csi2_reset(struct isp_csi2_device *csi2)
-+{
-+	struct isp_device *isp = csi2->isp;
-+	u8 soft_reset_retries = 0;
-+	u32 reg;
-+	int i;
-+
-+	if (!csi2->available)
-+		return -ENODEV;
-+
-+	if (csi2->phy->phy_in_use)
-+		return -EBUSY;
-+
-+	isp_reg_set(isp, csi2->regs1, ISPCSI2_SYSCONFIG,
-+		    ISPCSI2_SYSCONFIG_SOFT_RESET);
-+
-+	do {
-+		reg = isp_reg_readl(isp, csi2->regs1, ISPCSI2_SYSSTATUS) &
-+				    ISPCSI2_SYSSTATUS_RESET_DONE;
-+		if (reg == ISPCSI2_SYSSTATUS_RESET_DONE)
-+			break;
-+		soft_reset_retries++;
-+		if (soft_reset_retries < 5)
-+			udelay(100);
-+	} while (soft_reset_retries < 5);
-+
-+	if (soft_reset_retries == 5) {
-+		printk(KERN_ERR "CSI2: Soft reset try count exceeded!\n");
-+		return -EBUSY;
-+	}
-+
-+	if (isp->revision == ISP_REVISION_15_0)
-+		isp_reg_set(isp, csi2->regs1, ISPCSI2_PHY_CFG,
-+			    ISPCSI2_PHY_CFG_RESET_CTRL);
-+
-+	i = 100;
-+	do {
-+		reg = isp_reg_readl(isp, csi2->phy->phy_regs, ISPCSIPHY_REG1)
-+		    & ISPCSIPHY_REG1_RESET_DONE_CTRLCLK;
-+		if (reg == ISPCSIPHY_REG1_RESET_DONE_CTRLCLK)
-+			break;
-+		udelay(100);
-+	} while (--i > 0);
-+
-+	if (i == 0) {
-+		printk(KERN_ERR
-+		       "CSI2: Reset for CSI2_96M_FCLK domain Failed!\n");
-+		return -EBUSY;
-+	}
-+
-+	if (isp->autoidle)
-+		isp_reg_clr_set(isp, csi2->regs1, ISPCSI2_SYSCONFIG,
-+				ISPCSI2_SYSCONFIG_MSTANDBY_MODE_MASK |
-+				ISPCSI2_SYSCONFIG_AUTO_IDLE,
-+				ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SMART |
-+				((isp->revision == ISP_REVISION_15_0) ?
-+				 ISPCSI2_SYSCONFIG_AUTO_IDLE : 0));
-+	else
-+		isp_reg_clr_set(isp, csi2->regs1, ISPCSI2_SYSCONFIG,
-+				ISPCSI2_SYSCONFIG_MSTANDBY_MODE_MASK |
-+				ISPCSI2_SYSCONFIG_AUTO_IDLE,
-+				ISPCSI2_SYSCONFIG_MSTANDBY_MODE_NO);
-+
-+	return 0;
-+}
-+
-+static int csi2_configure(struct isp_csi2_device *csi2)
-+{
-+	const struct isp_v4l2_subdevs_group *pdata;
-+	struct isp_device *isp = csi2->isp;
-+	struct isp_csi2_timing_cfg *timing = &csi2->timing[0];
-+	struct v4l2_subdev *sensor;
-+	struct media_pad *pad;
-+
-+	/*
-+	 * CSI2 fields that can be updated while the context has
-+	 * been enabled or the interface has been enabled are not
-+	 * updated dynamically currently. So we do not allow to
-+	 * reconfigure if either has been enabled
-+	 */
-+	if (csi2->contexts[0].enabled || csi2->ctrl.if_enable)
-+		return -EBUSY;
-+
-+	pad = media_entity_remote_source(&csi2->pads[CSI2_PAD_SINK]);
-+	sensor = media_entity_to_v4l2_subdev(pad->entity);
-+	pdata = sensor->host_priv;
-+
-+	csi2->frame_skip = 0;
-+	v4l2_subdev_call(sensor, sensor, g_skip_frames, &csi2->frame_skip);
-+
-+	csi2->ctrl.vp_out_ctrl = pdata->bus.csi2.vpclk_div;
-+	csi2->ctrl.frame_mode = ISP_CSI2_FRAME_IMMEDIATE;
-+	csi2->ctrl.ecc_enable = pdata->bus.csi2.crc;
-+
-+	timing->ionum = 1;
-+	timing->force_rx_mode = 1;
-+	timing->stop_state_16x = 1;
-+	timing->stop_state_4x = 1;
-+	timing->stop_state_counter = 0x1FF;
-+
-+	/*
-+	 * The CSI2 receiver can't do any format conversion except DPCM
-+	 * decompression, so every set_format call configures both pads
-+	 * and enables DPCM decompression as a special case:
-+	 */
-+	if (csi2->formats[CSI2_PAD_SINK].code !=
-+	    csi2->formats[CSI2_PAD_SOURCE].code)
-+		csi2->dpcm_decompress = true;
-+	else
-+		csi2->dpcm_decompress = false;
-+
-+	csi2->contexts[0].format_id = csi2_ctx_map_format(csi2);
-+
-+	if (csi2->video_out.bpl_padding == 0)
-+		csi2->contexts[0].data_offset = 0;
-+	else
-+		csi2->contexts[0].data_offset = csi2->video_out.bpl_value;
-+
-+	/*
-+	 * Enable end of frame and end of line signals generation for
-+	 * context 0. These signals are generated from CSI2 receiver to
-+	 * qualify the last pixel of a frame and the last pixel of a line.
-+	 * Without enabling the signals CSI2 receiver writes data to memory
-+	 * beyond buffer size and/or data line offset is not handled correctly.
-+	 */
-+	csi2->contexts[0].eof_enabled = 1;
-+	csi2->contexts[0].eol_enabled = 1;
-+
-+	csi2_irq_complexio1_set(isp, csi2, 1);
-+	csi2_irq_ctx_set(isp, csi2, 1);
-+	csi2_irq_status_set(isp, csi2, 1);
-+
-+	/* Set configuration (timings, format and links) */
-+	csi2_timing_config(isp, csi2, timing);
-+	csi2_recv_config(isp, csi2, &csi2->ctrl);
-+	csi2_ctx_config(isp, csi2, &csi2->contexts[0]);
-+
-+	return 0;
-+}
-+
-+/*
-+ * csi2_print_status - Prints CSI2 debug information.
-+ */
-+#define CSI2_PRINT_REGISTER(isp, regs, name)\
-+	dev_dbg(isp->dev, "###CSI2 " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, regs, ISPCSI2_##name))
-+
-+static void csi2_print_status(struct isp_csi2_device *csi2)
-+{
-+	struct isp_device *isp = csi2->isp;
-+
-+	if (!csi2->available)
-+		return;
-+
-+	dev_dbg(isp->dev, "-------------CSI2 Register dump-------------\n");
-+
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, SYSCONFIG);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, SYSSTATUS);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, IRQENABLE);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, IRQSTATUS);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTRL);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, DBG_H);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, GNQ);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, PHY_CFG);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, PHY_IRQSTATUS);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, SHORT_PACKET);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, PHY_IRQENABLE);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, DBG_P);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, TIMING);
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_CTRL1(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_CTRL2(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_DAT_OFST(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_DAT_PING_ADDR(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_DAT_PONG_ADDR(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_IRQENABLE(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_IRQSTATUS(0));
-+	CSI2_PRINT_REGISTER(isp, csi2->regs1, CTX_CTRL3(0));
-+
-+	dev_dbg(isp->dev, "--------------------------------------------\n");
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Interrupt handling
-+ */
-+
-+/*
-+ * csi2_isr_buffer - Does buffer handling at end-of-frame
-+ * when writing to memory.
-+ */
-+static void csi2_isr_buffer(struct isp_csi2_device *csi2)
-+{
-+	struct isp_device *isp = csi2->isp;
-+	struct isp_buffer *buffer;
-+
-+	csi2_ctx_enable(isp, csi2, 0, 0);
-+
-+	buffer = omap3isp_video_buffer_next(&csi2->video_out, 0);
-+
-+	/*
-+	 * Let video queue operation restart engine if there is an underrun
-+	 * condition.
-+	 */
-+	if (buffer == NULL)
-+		return;
-+
-+	csi2_set_outaddr(csi2, buffer->isp_addr);
-+	csi2_ctx_enable(isp, csi2, 0, 1);
-+}
-+
-+static void csi2_isr_ctx(struct isp_csi2_device *csi2,
-+			 struct isp_csi2_ctx_cfg *ctx)
-+{
-+	struct isp_device *isp = csi2->isp;
-+	unsigned int n = ctx->ctxnum;
-+	u32 status;
-+
-+	status = isp_reg_readl(isp, csi2->regs1, ISPCSI2_CTX_IRQSTATUS(n));
-+	isp_reg_writel(isp, status, csi2->regs1, ISPCSI2_CTX_IRQSTATUS(n));
-+
-+	/* Propagate frame number */
-+	if (status & ISPCSI2_CTX_IRQSTATUS_FS_IRQ) {
-+		struct isp_pipeline *pipe =
-+				     to_isp_pipeline(&csi2->subdev.entity);
-+		if (pipe->do_propagation)
-+			atomic_inc(&pipe->frame_number);
-+	}
-+
-+	if (!(status & ISPCSI2_CTX_IRQSTATUS_FE_IRQ))
-+		return;
-+
-+	/* Skip interrupts until we reach the frame skip count. The CSI2 will be
-+	 * automatically disabled, as the frame skip count has been programmed
-+	 * in the CSI2_CTx_CTRL1::COUNT field, so reenable it.
-+	 *
-+	 * It would have been nice to rely on the FRAME_NUMBER interrupt instead
-+	 * but it turned out that the interrupt is only generated when the CSI2
-+	 * writes to memory (the CSI2_CTx_CTRL1::COUNT field is decreased
-+	 * correctly and reaches 0 when data is forwarded to the video port only
-+	 * but no interrupt arrives). Maybe a CSI2 hardware bug.
-+	 */
-+	if (csi2->frame_skip) {
-+		csi2->frame_skip--;
-+		if (csi2->frame_skip == 0) {
-+			ctx->format_id = csi2_ctx_map_format(csi2);
-+			csi2_ctx_config(isp, csi2, ctx);
-+			csi2_ctx_enable(isp, csi2, n, 1);
-+		}
-+		return;
-+	}
-+
-+	if (csi2->output & CSI2_OUTPUT_MEMORY)
-+		csi2_isr_buffer(csi2);
-+}
-+
-+/*
-+ * omap3isp_csi2_isr - CSI2 interrupt handling.
-+ *
-+ * Return -EIO on Transmission error
-+ */
-+int omap3isp_csi2_isr(struct isp_csi2_device *csi2)
-+{
-+	u32 csi2_irqstatus, cpxio1_irqstatus;
-+	struct isp_device *isp = csi2->isp;
-+	int retval = 0;
-+
-+	if (!csi2->available)
-+		return -ENODEV;
-+
-+	csi2_irqstatus = isp_reg_readl(isp, csi2->regs1, ISPCSI2_IRQSTATUS);
-+	isp_reg_writel(isp, csi2_irqstatus, csi2->regs1, ISPCSI2_IRQSTATUS);
-+
-+	/* Failure Cases */
-+	if (csi2_irqstatus & ISPCSI2_IRQSTATUS_COMPLEXIO1_ERR_IRQ) {
-+		cpxio1_irqstatus = isp_reg_readl(isp, csi2->regs1,
-+						 ISPCSI2_PHY_IRQSTATUS);
-+		isp_reg_writel(isp, cpxio1_irqstatus,
-+			       csi2->regs1, ISPCSI2_PHY_IRQSTATUS);
-+		dev_dbg(isp->dev, "CSI2: ComplexIO Error IRQ "
-+			"%x\n", cpxio1_irqstatus);
-+		retval = -EIO;
-+	}
-+
-+	if (csi2_irqstatus & (ISPCSI2_IRQSTATUS_OCP_ERR_IRQ |
-+			      ISPCSI2_IRQSTATUS_SHORT_PACKET_IRQ |
-+			      ISPCSI2_IRQSTATUS_ECC_NO_CORRECTION_IRQ |
-+			      ISPCSI2_IRQSTATUS_COMPLEXIO2_ERR_IRQ |
-+			      ISPCSI2_IRQSTATUS_FIFO_OVF_IRQ)) {
-+		dev_dbg(isp->dev, "CSI2 Err:"
-+			" OCP:%d,"
-+			" Short_pack:%d,"
-+			" ECC:%d,"
-+			" CPXIO2:%d,"
-+			" FIFO_OVF:%d,"
-+			"\n",
-+			(csi2_irqstatus &
-+			 ISPCSI2_IRQSTATUS_OCP_ERR_IRQ) ? 1 : 0,
-+			(csi2_irqstatus &
-+			 ISPCSI2_IRQSTATUS_SHORT_PACKET_IRQ) ? 1 : 0,
-+			(csi2_irqstatus &
-+			 ISPCSI2_IRQSTATUS_ECC_NO_CORRECTION_IRQ) ? 1 : 0,
-+			(csi2_irqstatus &
-+			 ISPCSI2_IRQSTATUS_COMPLEXIO2_ERR_IRQ) ? 1 : 0,
-+			(csi2_irqstatus &
-+			 ISPCSI2_IRQSTATUS_FIFO_OVF_IRQ) ? 1 : 0);
-+		retval = -EIO;
-+	}
-+
-+	if (omap3isp_module_sync_is_stopping(&csi2->wait, &csi2->stopping))
-+		return 0;
-+
-+	/* Successful cases */
-+	if (csi2_irqstatus & ISPCSI2_IRQSTATUS_CONTEXT(0))
-+		csi2_isr_ctx(csi2, &csi2->contexts[0]);
-+
-+	if (csi2_irqstatus & ISPCSI2_IRQSTATUS_ECC_CORRECTION_IRQ)
-+		dev_dbg(isp->dev, "CSI2: ECC correction done\n");
-+
-+	return retval;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP video operations
-+ */
-+
-+/*
-+ * csi2_queue - Queues the first buffer when using memory output
-+ * @video: The video node
-+ * @buffer: buffer to queue
-+ */
-+static int csi2_queue(struct isp_video *video, struct isp_buffer *buffer)
-+{
-+	struct isp_device *isp = video->isp;
-+	struct isp_csi2_device *csi2 = &isp->isp_csi2a;
-+
-+	csi2_set_outaddr(csi2, buffer->isp_addr);
-+
-+	/*
-+	 * If streaming was enabled before there was a buffer queued
-+	 * or underrun happened in the ISR, the hardware was not enabled
-+	 * and DMA queue flag ISP_VIDEO_DMAQUEUE_UNDERRUN is still set.
-+	 * Enable it now.
-+	 */
-+	if (csi2->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_UNDERRUN) {
-+		/* Enable / disable context 0 and IRQs */
-+		csi2_if_enable(isp, csi2, 1);
-+		csi2_ctx_enable(isp, csi2, 0, 1);
-+		isp_video_dmaqueue_flags_clr(&csi2->video_out);
-+	}
-+
-+	return 0;
-+}
-+
-+static const struct isp_video_operations csi2_ispvideo_ops = {
-+	.queue = csi2_queue,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 subdev operations
-+ */
-+
-+static struct v4l2_mbus_framefmt *
-+__csi2_get_format(struct isp_csi2_device *csi2, struct v4l2_subdev_fh *fh,
-+		  unsigned int pad, enum v4l2_subdev_format_whence which)
-+{
-+	if (which == V4L2_SUBDEV_FORMAT_TRY)
-+		return v4l2_subdev_get_try_format(fh, pad);
-+	else
-+		return &csi2->formats[pad];
-+}
-+
-+static void
-+csi2_try_format(struct isp_csi2_device *csi2, struct v4l2_subdev_fh *fh,
-+		unsigned int pad, struct v4l2_mbus_framefmt *fmt,
-+		enum v4l2_subdev_format_whence which)
-+{
-+	enum v4l2_mbus_pixelcode pixelcode;
-+	struct v4l2_mbus_framefmt *format;
-+	const struct isp_format_info *info;
-+	unsigned int i;
-+
-+	switch (pad) {
-+	case CSI2_PAD_SINK:
-+		/* Clamp the width and height to valid range (1-8191). */
-+		for (i = 0; i < ARRAY_SIZE(csi2_input_fmts); i++) {
-+			if (fmt->code == csi2_input_fmts[i])
-+				break;
-+		}
-+
-+		/* If not found, use SGRBG10 as default */
-+		if (i >= ARRAY_SIZE(csi2_input_fmts))
-+			fmt->code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+
-+		fmt->width = clamp_t(u32, fmt->width, 1, 8191);
-+		fmt->height = clamp_t(u32, fmt->height, 1, 8191);
-+		break;
-+
-+	case CSI2_PAD_SOURCE:
-+		/* Source format same as sink format, except for DPCM
-+		 * compression.
-+		 */
-+		pixelcode = fmt->code;
-+		format = __csi2_get_format(csi2, fh, CSI2_PAD_SINK, which);
-+		memcpy(fmt, format, sizeof(*fmt));
-+
-+		/*
-+		 * Only Allow DPCM decompression, and check that the
-+		 * pattern is preserved
-+		 */
-+		info = omap3isp_video_format_info(fmt->code);
-+		if (info->uncompressed == pixelcode)
-+			fmt->code = pixelcode;
-+		break;
-+	}
-+
-+	/* RGB, non-interlaced */
-+	fmt->colorspace = V4L2_COLORSPACE_SRGB;
-+	fmt->field = V4L2_FIELD_NONE;
-+}
-+
-+/*
-+ * csi2_enum_mbus_code - Handle pixel format enumeration
-+ * @sd     : pointer to v4l2 subdev structure
-+ * @fh     : V4L2 subdev file handle
-+ * @code   : pointer to v4l2_subdev_mbus_code_enum structure
-+ * return -EINVAL or zero on success
-+ */
-+static int csi2_enum_mbus_code(struct v4l2_subdev *sd,
-+			       struct v4l2_subdev_fh *fh,
-+			       struct v4l2_subdev_mbus_code_enum *code)
-+{
-+	struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+	const struct isp_format_info *info;
-+
-+	if (code->pad == CSI2_PAD_SINK) {
-+		if (code->index >= ARRAY_SIZE(csi2_input_fmts))
-+			return -EINVAL;
-+
-+		code->code = csi2_input_fmts[code->index];
-+	} else {
-+		format = __csi2_get_format(csi2, fh, CSI2_PAD_SINK,
-+					   V4L2_SUBDEV_FORMAT_TRY);
-+		switch (code->index) {
-+		case 0:
-+			/* Passthrough sink pad code */
-+			code->code = format->code;
-+			break;
-+		case 1:
-+			/* Uncompressed code */
-+			info = omap3isp_video_format_info(format->code);
-+			if (info->uncompressed == format->code)
-+				return -EINVAL;
-+
-+			code->code = info->uncompressed;
-+			break;
-+		default:
-+			return -EINVAL;
-+		}
-+	}
-+
-+	return 0;
-+}
-+
-+static int csi2_enum_frame_size(struct v4l2_subdev *sd,
-+				struct v4l2_subdev_fh *fh,
-+				struct v4l2_subdev_frame_size_enum *fse)
-+{
-+	struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt format;
-+
-+	if (fse->index != 0)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = 1;
-+	format.height = 1;
-+	csi2_try_format(csi2, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->min_width = format.width;
-+	fse->min_height = format.height;
-+
-+	if (format.code != fse->code)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = -1;
-+	format.height = -1;
-+	csi2_try_format(csi2, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->max_width = format.width;
-+	fse->max_height = format.height;
-+
-+	return 0;
-+}
-+
-+/*
-+ * csi2_get_format - Handle get format by pads subdev method
-+ * @sd : pointer to v4l2 subdev structure
-+ * @fh : V4L2 subdev file handle
-+ * @fmt: pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on sucess
-+ */
-+static int csi2_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			   struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __csi2_get_format(csi2, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	fmt->format = *format;
-+	return 0;
-+}
-+
-+/*
-+ * csi2_set_format - Handle set format by pads subdev method
-+ * @sd : pointer to v4l2 subdev structure
-+ * @fh : V4L2 subdev file handle
-+ * @fmt: pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on success
-+ */
-+static int csi2_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			   struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __csi2_get_format(csi2, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	csi2_try_format(csi2, fh, fmt->pad, &fmt->format, fmt->which);
-+	*format = fmt->format;
-+
-+	/* Propagate the format from sink to source */
-+	if (fmt->pad == CSI2_PAD_SINK) {
-+		format = __csi2_get_format(csi2, fh, CSI2_PAD_SOURCE,
-+					   fmt->which);
-+		*format = fmt->format;
-+		csi2_try_format(csi2, fh, CSI2_PAD_SOURCE, format, fmt->which);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * csi2_init_formats - Initialize formats on all pads
-+ * @sd: ISP CSI2 V4L2 subdevice
-+ * @fh: V4L2 subdev file handle
-+ *
-+ * Initialize all pad formats with default values. If fh is not NULL, try
-+ * formats are initialized on the file handle. Otherwise active formats are
-+ * initialized on the device.
-+ */
-+static int csi2_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
-+{
-+	struct v4l2_subdev_format format;
-+
-+	memset(&format, 0, sizeof(format));
-+	format.pad = CSI2_PAD_SINK;
-+	format.which = fh ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
-+	format.format.code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+	format.format.width = 4096;
-+	format.format.height = 4096;
-+	csi2_set_format(sd, fh, &format);
-+
-+	return 0;
-+}
-+
-+/*
-+ * csi2_set_stream - Enable/Disable streaming on the CSI2 module
-+ * @sd: ISP CSI2 V4L2 subdevice
-+ * @enable: ISP pipeline stream state
-+ *
-+ * Return 0 on success or a negative error code otherwise.
-+ */
-+static int csi2_set_stream(struct v4l2_subdev *sd, int enable)
-+{
-+	struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-+	struct isp_device *isp = csi2->isp;
-+	struct isp_pipeline *pipe = to_isp_pipeline(&csi2->subdev.entity);
-+	struct isp_video *video_out = &csi2->video_out;
-+
-+	switch (enable) {
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		if (omap3isp_csiphy_acquire(csi2->phy) < 0)
-+			return -ENODEV;
-+		csi2->use_fs_irq = pipe->do_propagation;
-+		if (csi2->output & CSI2_OUTPUT_MEMORY)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_CSI2A_WRITE);
-+		csi2_configure(csi2);
-+		csi2_print_status(csi2);
-+
-+		/*
-+		 * When outputting to memory with no buffer available, let the
-+		 * buffer queue handler start the hardware. A DMA queue flag
-+		 * ISP_VIDEO_DMAQUEUE_QUEUED will be set as soon as there is
-+		 * a buffer available.
-+		 */
-+		if (csi2->output & CSI2_OUTPUT_MEMORY &&
-+		    !(video_out->dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED))
-+			break;
-+		/* Enable context 0 and IRQs */
-+		atomic_set(&csi2->stopping, 0);
-+		csi2_ctx_enable(isp, csi2, 0, 1);
-+		csi2_if_enable(isp, csi2, 1);
-+		isp_video_dmaqueue_flags_clr(video_out);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+		if (csi2->state == ISP_PIPELINE_STREAM_STOPPED)
-+			return 0;
-+		if (omap3isp_module_sync_idle(&sd->entity, &csi2->wait,
-+					      &csi2->stopping))
-+			dev_dbg(isp->dev, "%s: module stop timeout.\n",
-+				sd->name);
-+		csi2_ctx_enable(isp, csi2, 0, 0);
-+		csi2_if_enable(isp, csi2, 0);
-+		csi2_irq_ctx_set(isp, csi2, 0);
-+		omap3isp_csiphy_release(csi2->phy);
-+		isp_video_dmaqueue_flags_clr(video_out);
-+		omap3isp_sbl_disable(isp, OMAP3_ISP_SBL_CSI2A_WRITE);
-+		break;
-+	}
-+
-+	csi2->state = enable;
-+	return 0;
-+}
-+
-+/* subdev core operations */
-+static const struct v4l2_subdev_core_ops csi2_core_ops = {
-+	.queryctrl = v4l2_subdev_queryctrl,
-+	.querymenu = v4l2_subdev_querymenu,
-+	.g_ctrl = v4l2_subdev_g_ctrl,
-+	.s_ctrl = v4l2_subdev_s_ctrl,
-+	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
-+	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
-+	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
-+};
-+
-+/* subdev file operations */
-+static const struct v4l2_subdev_file_ops csi2_file_ops = {
-+	.open = csi2_init_formats,
-+};
-+
-+/* subdev video operations */
-+static const struct v4l2_subdev_video_ops csi2_video_ops = {
-+	.s_stream = csi2_set_stream,
-+};
-+
-+/* subdev pad operations */
-+static const struct v4l2_subdev_pad_ops csi2_pad_ops = {
-+	.enum_mbus_code = csi2_enum_mbus_code,
-+	.enum_frame_size = csi2_enum_frame_size,
-+	.get_fmt = csi2_get_format,
-+	.set_fmt = csi2_set_format,
-+};
-+
-+/* subdev operations */
-+static const struct v4l2_subdev_ops csi2_ops = {
-+	.core = &csi2_core_ops,
-+	.file = &csi2_file_ops,
-+	.video = &csi2_video_ops,
-+	.pad = &csi2_pad_ops,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * Media entity operations
-+ */
-+
-+/*
-+ * csi2_link_setup - Setup CSI2 connections.
-+ * @entity : Pointer to media entity structure
-+ * @local  : Pointer to local pad array
-+ * @remote : Pointer to remote pad array
-+ * @flags  : Link flags
-+ * return -EINVAL or zero on success
-+ */
-+static int csi2_link_setup(struct media_entity *entity,
-+			   const struct media_pad *local,
-+			   const struct media_pad *remote, u32 flags)
-+{
-+	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
-+	struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-+	struct isp_csi2_ctrl_cfg *ctrl = &csi2->ctrl;
-+
-+	/*
-+	 * The ISP core doesn't support pipelines with multiple video outputs.
-+	 * Revisit this when it will be implemented, and return -EBUSY for now.
-+	 */
-+
-+	switch (local->index | media_entity_type(remote->entity)) {
-+	case CSI2_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (csi2->output & ~CSI2_OUTPUT_MEMORY)
-+				return -EBUSY;
-+			csi2->output |= CSI2_OUTPUT_MEMORY;
-+		} else {
-+			csi2->output &= ~CSI2_OUTPUT_MEMORY;
-+		}
-+		break;
-+
-+	case CSI2_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (csi2->output & ~CSI2_OUTPUT_CCDC)
-+				return -EBUSY;
-+			csi2->output |= CSI2_OUTPUT_CCDC;
-+		} else {
-+			csi2->output &= ~CSI2_OUTPUT_CCDC;
-+		}
-+		break;
-+
-+	default:
-+		/* Link from camera to CSI2 is fixed... */
-+		return -EINVAL;
-+	}
-+
-+	ctrl->vp_only_enable =
-+		(csi2->output & CSI2_OUTPUT_MEMORY) ? false : true;
-+	ctrl->vp_clk_enable = !!(csi2->output & CSI2_OUTPUT_CCDC);
-+
-+	return 0;
-+}
-+
-+/* media operations */
-+static const struct media_entity_operations csi2_media_ops = {
-+	.link_setup = csi2_link_setup,
-+};
-+
-+/*
-+ * csi2_init_entities - Initialize subdev and media entity.
-+ * @csi2: Pointer to csi2 structure.
-+ * return -ENOMEM or zero on success
-+ */
-+static int csi2_init_entities(struct isp_csi2_device *csi2)
-+{
-+	struct v4l2_subdev *sd = &csi2->subdev;
-+	struct media_pad *pads = csi2->pads;
-+	struct media_entity *me = &sd->entity;
-+	int ret;
-+
-+	v4l2_subdev_init(sd, &csi2_ops);
-+	strlcpy(sd->name, "OMAP3 ISP CSI2a", sizeof(sd->name));
-+
-+	sd->grp_id = 1 << 16;	/* group ID for isp subdevs */
-+	v4l2_set_subdevdata(sd, csi2);
-+	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
-+
-+	v4l2_ctrl_handler_init(&csi2->ctrls, 1);
-+	sd->ctrl_handler = &csi2->ctrls;
-+
-+	pads[CSI2_PAD_SOURCE].flags = MEDIA_PAD_FL_OUTPUT;
-+	pads[CSI2_PAD_SINK].flags = MEDIA_PAD_FL_INPUT;
-+
-+	me->ops = &csi2_media_ops;
-+	ret = media_entity_init(me, CSI2_PADS_NUM, pads, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	csi2_init_formats(sd, NULL);
-+
-+	/* Video device node */
-+	csi2->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+	csi2->video_out.ops = &csi2_ispvideo_ops;
-+	csi2->video_out.bpl_alignment = 32;
-+	csi2->video_out.bpl_zero_padding = 1;
-+	csi2->video_out.bpl_max = 0x1ffe0;
-+	csi2->video_out.isp = csi2->isp;
-+	csi2->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 3;
-+
-+	ret = omap3isp_video_init(&csi2->video_out, "CSI2a");
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Connect the CSI2 subdev to the video node. */
-+	ret = media_entity_create_link(&csi2->subdev.entity, CSI2_PAD_SOURCE,
-+				       &csi2->video_out.video.entity, 0, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+void omap3isp_csi2_unregister_entities(struct isp_csi2_device *csi2)
-+{
-+	media_entity_cleanup(&csi2->subdev.entity);
-+
-+	v4l2_device_unregister_subdev(&csi2->subdev);
-+	v4l2_ctrl_handler_free(&csi2->ctrls);
-+	omap3isp_video_unregister(&csi2->video_out);
-+}
-+
-+int omap3isp_csi2_register_entities(struct isp_csi2_device *csi2,
-+				    struct v4l2_device *vdev)
-+{
-+	int ret;
-+
-+	/* Register the subdev and video nodes. */
-+	ret = v4l2_device_register_subdev(vdev, &csi2->subdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&csi2->video_out, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	return 0;
-+
-+error:
-+	omap3isp_csi2_unregister_entities(csi2);
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP CSI2 initialisation and cleanup
-+ */
-+
-+/*
-+ * omap3isp_csi2_cleanup - Routine for module driver cleanup
-+ */
-+void omap3isp_csi2_cleanup(struct isp_device *isp)
-+{
-+}
-+
-+/*
-+ * omap3isp_csi2_init - Routine for module driver init
-+ */
-+int omap3isp_csi2_init(struct isp_device *isp)
-+{
-+	struct isp_csi2_device *csi2a = &isp->isp_csi2a;
-+	struct isp_csi2_device *csi2c = &isp->isp_csi2c;
-+	int ret;
-+
-+	csi2a->isp = isp;
-+	csi2a->available = 1;
-+	csi2a->regs1 = OMAP3_ISP_IOMEM_CSI2A_REGS1;
-+	csi2a->regs2 = OMAP3_ISP_IOMEM_CSI2A_REGS2;
-+	csi2a->phy = &isp->isp_csiphy2;
-+	csi2a->state = ISP_PIPELINE_STREAM_STOPPED;
-+	init_waitqueue_head(&csi2a->wait);
-+
-+	ret = csi2_init_entities(csi2a);
-+	if (ret < 0)
-+		goto fail;
-+
-+	if (isp->revision == ISP_REVISION_15_0) {
-+		csi2c->isp = isp;
-+		csi2c->available = 1;
-+		csi2c->regs1 = OMAP3_ISP_IOMEM_CSI2C_REGS1;
-+		csi2c->regs2 = OMAP3_ISP_IOMEM_CSI2C_REGS2;
-+		csi2c->phy = &isp->isp_csiphy1;
-+		csi2c->state = ISP_PIPELINE_STREAM_STOPPED;
-+		init_waitqueue_head(&csi2c->wait);
-+	}
-+
-+	return 0;
-+fail:
-+	omap3isp_csi2_cleanup(isp);
-+	return ret;
-+}
-diff --git a/drivers/media/video/isp/ispcsi2.h b/drivers/media/video/isp/ispcsi2.h
-new file mode 100644
-index 0000000..b367326
---- /dev/null
-+++ b/drivers/media/video/isp/ispcsi2.h
-@@ -0,0 +1,169 @@
-+/*
-+ * ispcsi2.h
-+ *
-+ * TI OMAP3 ISP - CSI2 module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_CSI2_H
-+#define OMAP3_ISP_CSI2_H
-+
-+#include <linux/types.h>
-+#include <linux/videodev2.h>
-+#include <media/v4l2-ctrls.h>
-+
-+struct isp_csiphy;
-+
-+/* This is not an exhaustive list */
-+enum isp_csi2_pix_formats {
-+	CSI2_PIX_FMT_OTHERS = 0,
-+	CSI2_PIX_FMT_YUV422_8BIT = 0x1e,
-+	CSI2_PIX_FMT_YUV422_8BIT_VP = 0x9e,
-+	CSI2_PIX_FMT_RAW10_EXP16 = 0xab,
-+	CSI2_PIX_FMT_RAW10_EXP16_VP = 0x12f,
-+	CSI2_PIX_FMT_RAW8 = 0x2a,
-+	CSI2_PIX_FMT_RAW8_DPCM10_EXP16 = 0x2aa,
-+	CSI2_PIX_FMT_RAW8_DPCM10_VP = 0x32a,
-+	CSI2_PIX_FMT_RAW8_VP = 0x12a,
-+	CSI2_USERDEF_8BIT_DATA1_DPCM10_VP = 0x340,
-+	CSI2_USERDEF_8BIT_DATA1_DPCM10 = 0x2c0,
-+	CSI2_USERDEF_8BIT_DATA1 = 0x40,
-+};
-+
-+enum isp_csi2_irqevents {
-+	OCP_ERR_IRQ = 0x4000,
-+	SHORT_PACKET_IRQ = 0x2000,
-+	ECC_CORRECTION_IRQ = 0x1000,
-+	ECC_NO_CORRECTION_IRQ = 0x800,
-+	COMPLEXIO2_ERR_IRQ = 0x400,
-+	COMPLEXIO1_ERR_IRQ = 0x200,
-+	FIFO_OVF_IRQ = 0x100,
-+	CONTEXT7 = 0x80,
-+	CONTEXT6 = 0x40,
-+	CONTEXT5 = 0x20,
-+	CONTEXT4 = 0x10,
-+	CONTEXT3 = 0x8,
-+	CONTEXT2 = 0x4,
-+	CONTEXT1 = 0x2,
-+	CONTEXT0 = 0x1,
-+};
-+
-+enum isp_csi2_ctx_irqevents {
-+	CTX_ECC_CORRECTION = 0x100,
-+	CTX_LINE_NUMBER = 0x80,
-+	CTX_FRAME_NUMBER = 0x40,
-+	CTX_CS = 0x20,
-+	CTX_LE = 0x8,
-+	CTX_LS = 0x4,
-+	CTX_FE = 0x2,
-+	CTX_FS = 0x1,
-+};
-+
-+enum isp_csi2_frame_mode {
-+	ISP_CSI2_FRAME_IMMEDIATE,
-+	ISP_CSI2_FRAME_AFTERFEC,
-+};
-+
-+#define ISP_CSI2_MAX_CTX_NUM	7
-+
-+struct isp_csi2_ctx_cfg {
-+	u8 ctxnum;		/* context number 0 - 7 */
-+	u8 dpcm_decompress;
-+
-+	/* Fields in CSI2_CTx_CTRL2 - locked by CSI2_CTx_CTRL1.CTX_EN */
-+	u8 virtual_id;
-+	u16 format_id;		/* as in CSI2_CTx_CTRL2[9:0] */
-+	u8 dpcm_predictor;	/* 1: simple, 0: advanced */
-+
-+	/* Fields in CSI2_CTx_CTRL1/3 - Shadowed */
-+	u16 alpha;
-+	u16 data_offset;
-+	u32 ping_addr;
-+	u32 pong_addr;
-+	u8 eof_enabled;
-+	u8 eol_enabled;
-+	u8 checksum_enabled;
-+	u8 enabled;
-+};
-+
-+struct isp_csi2_timing_cfg {
-+	u8 ionum;			/* IO1 or IO2 as in CSI2_TIMING */
-+	unsigned force_rx_mode:1;
-+	unsigned stop_state_16x:1;
-+	unsigned stop_state_4x:1;
-+	u16 stop_state_counter;
-+};
-+
-+struct isp_csi2_ctrl_cfg {
-+	bool vp_clk_enable;
-+	bool vp_only_enable;
-+	u8 vp_out_ctrl;
-+	enum isp_csi2_frame_mode frame_mode;
-+	bool ecc_enable;
-+	bool if_enable;
-+};
-+
-+#define CSI2_PAD_SINK		0
-+#define CSI2_PAD_SOURCE		1
-+#define CSI2_PADS_NUM		2
-+
-+#define CSI2_OUTPUT_CCDC	(1 << 0)
-+#define CSI2_OUTPUT_MEMORY	(1 << 1)
-+
-+struct isp_csi2_device {
-+	struct v4l2_subdev subdev;
-+	struct media_pad pads[CSI2_PADS_NUM];
-+	struct v4l2_mbus_framefmt formats[CSI2_PADS_NUM];
-+
-+	struct v4l2_ctrl_handler ctrls;
-+
-+	struct isp_video video_out;
-+	struct isp_device *isp;
-+
-+	u8 available;		/* Is the IP present on the silicon? */
-+
-+	/* mem resources - enums as defined in enum isp_mem_resources */
-+	u8 regs1;
-+	u8 regs2;
-+
-+	u32 output; /* output to CCDC, memory or both? */
-+	bool dpcm_decompress;
-+	unsigned int frame_skip;
-+	bool use_fs_irq;
-+
-+	struct isp_csiphy *phy;
-+	struct isp_csi2_ctx_cfg contexts[ISP_CSI2_MAX_CTX_NUM + 1];
-+	struct isp_csi2_timing_cfg timing[2];
-+	struct isp_csi2_ctrl_cfg ctrl;
-+	enum isp_pipeline_stream_state state;
-+	wait_queue_head_t wait;
-+	atomic_t stopping;
-+};
-+
-+int omap3isp_csi2_isr(struct isp_csi2_device *csi2);
-+int omap3isp_csi2_reset(struct isp_csi2_device *csi2);
-+int omap3isp_csi2_init(struct isp_device *isp);
-+void omap3isp_csi2_cleanup(struct isp_device *isp);
-+void omap3isp_csi2_unregister_entities(struct isp_csi2_device *csi2);
-+int omap3isp_csi2_register_entities(struct isp_csi2_device *csi2,
-+				    struct v4l2_device *vdev);
-+#endif	/* OMAP3_ISP_CSI2_H */
-diff --git a/drivers/media/video/isp/ispcsiphy.c b/drivers/media/video/isp/ispcsiphy.c
-new file mode 100644
-index 0000000..59cd477
---- /dev/null
-+++ b/drivers/media/video/isp/ispcsiphy.c
-@@ -0,0 +1,247 @@
-+/*
-+ * ispcsiphy.c
-+ *
-+ * TI OMAP3 ISP - CSI PHY module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/device.h>
-+#include <linux/regulator/consumer.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "ispcsiphy.h"
-+
-+/*
-+ * csiphy_lanes_config - Configuration of CSIPHY lanes.
-+ *
-+ * Updates HW configuration.
-+ * Called with phy->mutex taken.
-+ */
-+static void csiphy_lanes_config(struct isp_csiphy *phy)
-+{
-+	unsigned int i;
-+	u32 reg;
-+
-+	reg = isp_reg_readl(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG);
-+
-+	for (i = 0; i < phy->num_data_lanes; i++) {
-+		reg &= ~(ISPCSI2_PHY_CFG_DATA_POL_MASK(i + 1) |
-+			 ISPCSI2_PHY_CFG_DATA_POSITION_MASK(i + 1));
-+		reg |= (phy->lanes.data[i].pol <<
-+			ISPCSI2_PHY_CFG_DATA_POL_SHIFT(i + 1));
-+		reg |= (phy->lanes.data[i].pos <<
-+			ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(i + 1));
-+	}
-+
-+	reg &= ~(ISPCSI2_PHY_CFG_CLOCK_POL_MASK |
-+		 ISPCSI2_PHY_CFG_CLOCK_POSITION_MASK);
-+	reg |= phy->lanes.clk.pol << ISPCSI2_PHY_CFG_CLOCK_POL_SHIFT;
-+	reg |= phy->lanes.clk.pos << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT;
-+
-+	isp_reg_writel(phy->isp, reg, phy->cfg_regs, ISPCSI2_PHY_CFG);
-+}
-+
-+/*
-+ * csiphy_power_autoswitch_enable
-+ * @enable: Sets or clears the autoswitch function enable flag.
-+ */
-+static void csiphy_power_autoswitch_enable(struct isp_csiphy *phy, bool enable)
-+{
-+	isp_reg_clr_set(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG,
-+			ISPCSI2_PHY_CFG_PWR_AUTO,
-+			enable ? ISPCSI2_PHY_CFG_PWR_AUTO : 0);
-+}
-+
-+/*
-+ * csiphy_set_power
-+ * @power: Power state to be set.
-+ *
-+ * Returns 0 if successful, or -EBUSY if the retry count is exceeded.
-+ */
-+static int csiphy_set_power(struct isp_csiphy *phy, u32 power)
-+{
-+	u32 reg;
-+	u8 retry_count;
-+
-+	isp_reg_clr_set(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG,
-+			ISPCSI2_PHY_CFG_PWR_CMD_MASK, power);
-+
-+	retry_count = 0;
-+	do {
-+		udelay(50);
-+		reg = isp_reg_readl(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG) &
-+				    ISPCSI2_PHY_CFG_PWR_STATUS_MASK;
-+
-+		if (reg != power >> 2)
-+			retry_count++;
-+
-+	} while ((reg != power >> 2) && (retry_count < 100));
-+
-+	if (retry_count == 100) {
-+		printk(KERN_ERR "CSI2 CIO set power failed!\n");
-+		return -EBUSY;
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * csiphy_dphy_config - Configure CSI2 D-PHY parameters.
-+ *
-+ * Called with phy->mutex taken.
-+ */
-+static void csiphy_dphy_config(struct isp_csiphy *phy)
-+{
-+	u32 reg;
-+
-+	/* Set up ISPCSIPHY_REG0 */
-+	reg = isp_reg_readl(phy->isp, phy->phy_regs, ISPCSIPHY_REG0);
-+
-+	reg &= ~(ISPCSIPHY_REG0_THS_TERM_MASK |
-+		 ISPCSIPHY_REG0_THS_SETTLE_MASK);
-+	reg |= phy->dphy.ths_term << ISPCSIPHY_REG0_THS_TERM_SHIFT;
-+	reg |= phy->dphy.ths_settle << ISPCSIPHY_REG0_THS_SETTLE_SHIFT;
-+
-+	isp_reg_writel(phy->isp, reg, phy->phy_regs, ISPCSIPHY_REG0);
-+
-+	/* Set up ISPCSIPHY_REG1 */
-+	reg = isp_reg_readl(phy->isp, phy->phy_regs, ISPCSIPHY_REG1);
-+
-+	reg &= ~(ISPCSIPHY_REG1_TCLK_TERM_MASK |
-+		 ISPCSIPHY_REG1_TCLK_MISS_MASK |
-+		 ISPCSIPHY_REG1_TCLK_SETTLE_MASK);
-+	reg |= phy->dphy.tclk_term << ISPCSIPHY_REG1_TCLK_TERM_SHIFT;
-+	reg |= phy->dphy.tclk_miss << ISPCSIPHY_REG1_TCLK_MISS_SHIFT;
-+	reg |= phy->dphy.tclk_settle << ISPCSIPHY_REG1_TCLK_SETTLE_SHIFT;
-+
-+	isp_reg_writel(phy->isp, reg, phy->phy_regs, ISPCSIPHY_REG1);
-+}
-+
-+static int csiphy_config(struct isp_csiphy *phy,
-+			 struct isp_csiphy_dphy_cfg *dphy,
-+			 struct isp_csiphy_lanes_cfg *lanes)
-+{
-+	unsigned int used_lanes = 0;
-+	unsigned int i;
-+
-+	/* Clock and data lanes verification */
-+	for (i = 0; i < phy->num_data_lanes; i++) {
-+		if (lanes->data[i].pol > 1 || lanes->data[i].pos > 3)
-+			return -EINVAL;
-+
-+		if (used_lanes & (1 << lanes->data[i].pos))
-+			return -EINVAL;
-+
-+		used_lanes |= 1 << lanes->data[i].pos;
-+	}
-+
-+	if (lanes->clk.pol > 1 || lanes->clk.pos > 3)
-+		return -EINVAL;
-+
-+	if (lanes->clk.pos == 0 || used_lanes & (1 << lanes->clk.pos))
-+		return -EINVAL;
-+
-+	mutex_lock(&phy->mutex);
-+	phy->dphy = *dphy;
-+	phy->lanes = *lanes;
-+	mutex_unlock(&phy->mutex);
-+
-+	return 0;
-+}
-+
-+int omap3isp_csiphy_acquire(struct isp_csiphy *phy)
-+{
-+	int rval;
-+
-+	if (phy->vdd == NULL) {
-+		dev_err(phy->isp->dev, "Power regulator for CSI PHY not "
-+			"available\n");
-+		return -ENODEV;
-+	}
-+
-+	mutex_lock(&phy->mutex);
-+
-+	rval = regulator_enable(phy->vdd);
-+	if (rval < 0)
-+		goto done;
-+
-+	omap3isp_csi2_reset(phy->csi2);
-+
-+	csiphy_dphy_config(phy);
-+	csiphy_lanes_config(phy);
-+
-+	rval = csiphy_set_power(phy, ISPCSI2_PHY_CFG_PWR_CMD_ON);
-+	if (rval) {
-+		regulator_disable(phy->vdd);
-+		goto done;
-+	}
-+
-+	csiphy_power_autoswitch_enable(phy, true);
-+	phy->phy_in_use = 1;
-+
-+done:
-+	mutex_unlock(&phy->mutex);
-+	return rval;
-+}
-+
-+void omap3isp_csiphy_release(struct isp_csiphy *phy)
-+{
-+	mutex_lock(&phy->mutex);
-+	if (phy->phy_in_use) {
-+		csiphy_power_autoswitch_enable(phy, false);
-+		csiphy_set_power(phy, ISPCSI2_PHY_CFG_PWR_CMD_OFF);
-+		regulator_disable(phy->vdd);
-+		phy->phy_in_use = 0;
-+	}
-+	mutex_unlock(&phy->mutex);
-+}
-+
-+/*
-+ * omap3isp_csiphy_init - Initialize the CSI PHY frontends
-+ */
-+int omap3isp_csiphy_init(struct isp_device *isp)
-+{
-+	struct isp_csiphy *phy1 = &isp->isp_csiphy1;
-+	struct isp_csiphy *phy2 = &isp->isp_csiphy2;
-+
-+	isp->platform_cb.csiphy_config = csiphy_config;
-+
-+	phy2->isp = isp;
-+	phy2->csi2 = &isp->isp_csi2a;
-+	phy2->num_data_lanes = ISP_CSIPHY2_NUM_DATA_LANES;
-+	phy2->cfg_regs = OMAP3_ISP_IOMEM_CSI2A_REGS1;
-+	phy2->phy_regs = OMAP3_ISP_IOMEM_CSIPHY2;
-+	mutex_init(&phy2->mutex);
-+
-+	if (isp->revision == ISP_REVISION_15_0) {
-+		phy1->isp = isp;
-+		phy1->csi2 = &isp->isp_csi2c;
-+		phy1->num_data_lanes = ISP_CSIPHY1_NUM_DATA_LANES;
-+		phy1->cfg_regs = OMAP3_ISP_IOMEM_CSI2C_REGS1;
-+		phy1->phy_regs = OMAP3_ISP_IOMEM_CSIPHY1;
-+		mutex_init(&phy1->mutex);
-+	}
-+
-+	return 0;
-+}
-diff --git a/drivers/media/video/isp/ispcsiphy.h b/drivers/media/video/isp/ispcsiphy.h
-new file mode 100644
-index 0000000..39a7e6b
---- /dev/null
-+++ b/drivers/media/video/isp/ispcsiphy.h
-@@ -0,0 +1,74 @@
-+/*
-+ * ispcsiphy.h
-+ *
-+ * TI OMAP3 ISP - CSI PHY module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_CSI_PHY_H
-+#define OMAP3_ISP_CSI_PHY_H
-+
-+struct isp_csi2_device;
-+struct regulator;
-+
-+struct csiphy_lane {
-+	u8 pos;
-+	u8 pol;
-+};
-+
-+#define ISP_CSIPHY2_NUM_DATA_LANES	2
-+#define ISP_CSIPHY1_NUM_DATA_LANES	1
-+
-+struct isp_csiphy_lanes_cfg {
-+	struct csiphy_lane data[ISP_CSIPHY2_NUM_DATA_LANES];
-+	struct csiphy_lane clk;
-+};
-+
-+struct isp_csiphy_dphy_cfg {
-+	u8 ths_term;
-+	u8 ths_settle;
-+	u8 tclk_term;
-+	unsigned tclk_miss:1;
-+	u8 tclk_settle;
-+};
-+
-+struct isp_csiphy {
-+	struct isp_device *isp;
-+	struct mutex mutex;	/* serialize csiphy configuration */
-+	u8 phy_in_use;
-+	struct isp_csi2_device *csi2;
-+	struct regulator *vdd;
-+
-+	/* mem resources - enums as defined in enum isp_mem_resources */
-+	unsigned int cfg_regs;
-+	unsigned int phy_regs;
-+
-+	u8 num_data_lanes;	/* number of CSI2 Data Lanes supported */
-+	struct isp_csiphy_lanes_cfg lanes;
-+	struct isp_csiphy_dphy_cfg dphy;
-+};
-+
-+int omap3isp_csiphy_acquire(struct isp_csiphy *phy);
-+void omap3isp_csiphy_release(struct isp_csiphy *phy);
-+int omap3isp_csiphy_init(struct isp_device *isp);
-+
-+#endif	/* OMAP3_ISP_CSI_PHY_H */
-diff --git a/drivers/media/video/isp/isph3a.h b/drivers/media/video/isp/isph3a.h
-new file mode 100644
-index 0000000..6d43529
---- /dev/null
-+++ b/drivers/media/video/isp/isph3a.h
-@@ -0,0 +1,117 @@
-+/*
-+ * isph3a.h
-+ *
-+ * TI OMAP3 ISP - H3A AF module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_H3A_H
-+#define OMAP3_ISP_H3A_H
-+
-+#include <linux/omap3isp.h>
-+
-+/*
-+ * ----------
-+ * -H3A AEWB-
-+ * ----------
-+ */
-+
-+#define AEWB_PACKET_SIZE	16
-+#define AEWB_SATURATION_LIMIT	0x3ff
-+
-+/* Flags for changed registers */
-+#define PCR_CHNG		(1 << 0)
-+#define AEWWIN1_CHNG		(1 << 1)
-+#define AEWINSTART_CHNG		(1 << 2)
-+#define AEWINBLK_CHNG		(1 << 3)
-+#define AEWSUBWIN_CHNG		(1 << 4)
-+#define PRV_WBDGAIN_CHNG	(1 << 5)
-+#define PRV_WBGAIN_CHNG		(1 << 6)
-+
-+/* ISPH3A REGISTERS bits */
-+#define ISPH3A_PCR_AF_EN	(1 << 0)
-+#define ISPH3A_PCR_AF_ALAW_EN	(1 << 1)
-+#define ISPH3A_PCR_AF_MED_EN	(1 << 2)
-+#define ISPH3A_PCR_AF_BUSY	(1 << 15)
-+#define ISPH3A_PCR_AEW_EN	(1 << 16)
-+#define ISPH3A_PCR_AEW_ALAW_EN	(1 << 17)
-+#define ISPH3A_PCR_AEW_BUSY	(1 << 18)
-+#define ISPH3A_PCR_AEW_MASK	(ISPH3A_PCR_AEW_ALAW_EN | \
-+				 ISPH3A_PCR_AEW_AVE2LMT_MASK)
-+
-+/*
-+ * --------
-+ * -H3A AF-
-+ * --------
-+ */
-+
-+/* Peripheral Revision */
-+#define AFPID				0x0
-+
-+#define AFCOEF_OFFSET			0x00000004	/* COEF base address */
-+
-+/* PCR fields */
-+#define AF_BUSYAF			(1 << 15)
-+#define AF_FVMODE			(1 << 14)
-+#define AF_RGBPOS			(0x7 << 11)
-+#define AF_MED_TH			(0xFF << 3)
-+#define AF_MED_EN			(1 << 2)
-+#define AF_ALAW_EN			(1 << 1)
-+#define AF_EN				(1 << 0)
-+#define AF_PCR_MASK			(AF_FVMODE | AF_RGBPOS | AF_MED_TH | \
-+					 AF_MED_EN | AF_ALAW_EN)
-+
-+/* AFPAX1 fields */
-+#define AF_PAXW				(0x7F << 16)
-+#define AF_PAXH				0x7F
-+
-+/* AFPAX2 fields */
-+#define AF_AFINCV			(0xF << 13)
-+#define AF_PAXVC			(0x7F << 6)
-+#define AF_PAXHC			0x3F
-+
-+/* AFPAXSTART fields */
-+#define AF_PAXSH			(0xFFF<<16)
-+#define AF_PAXSV			0xFFF
-+
-+/* COEFFICIENT MASK */
-+#define AF_COEF_MASK0			0xFFF
-+#define AF_COEF_MASK1			(0xFFF<<16)
-+
-+/* BIT SHIFTS */
-+#define AF_RGBPOS_SHIFT			11
-+#define AF_MED_TH_SHIFT			3
-+#define AF_PAXW_SHIFT			16
-+#define AF_LINE_INCR_SHIFT		13
-+#define AF_VT_COUNT_SHIFT		6
-+#define AF_HZ_START_SHIFT		16
-+#define AF_COEF_SHIFT			16
-+
-+/* Init and cleanup functions */
-+int omap3isp_h3a_aewb_init(struct isp_device *isp);
-+int omap3isp_h3a_af_init(struct isp_device *isp);
-+
-+void omap3isp_h3a_aewb_cleanup(struct isp_device *isp);
-+void omap3isp_h3a_af_cleanup(struct isp_device *isp);
-+
-+#endif /* OMAP3_ISP_H3A_H */
-diff --git a/drivers/media/video/isp/isph3a_aewb.c b/drivers/media/video/isp/isph3a_aewb.c
-new file mode 100644
-index 0000000..b4e97f2
---- /dev/null
-+++ b/drivers/media/video/isp/isph3a_aewb.c
-@@ -0,0 +1,374 @@
-+/*
-+ * isph3a.c
-+ *
-+ * TI OMAP3 ISP - H3A module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/slab.h>
-+#include <linux/uaccess.h>
-+
-+#include "isp.h"
-+#include "isph3a.h"
-+#include "ispstat.h"
-+
-+/*
-+ * h3a_aewb_update_regs - Helper function to update h3a registers.
-+ */
-+static void h3a_aewb_setup_regs(struct ispstat *aewb, void *priv)
-+{
-+	struct omap3isp_h3a_aewb_config *conf = priv;
-+	u32 pcr;
-+	u32 win1;
-+	u32 start;
-+	u32 blk;
-+	u32 subwin;
-+
-+	if (aewb->state == ISPSTAT_DISABLED)
-+		return;
-+
-+	isp_reg_writel(aewb->isp, aewb->active_buf->iommu_addr,
-+		       OMAP3_ISP_IOMEM_H3A, ISPH3A_AEWBUFST);
-+
-+	if (!aewb->update)
-+		return;
-+
-+	/* Converting config metadata into reg values */
-+	pcr = conf->saturation_limit << ISPH3A_PCR_AEW_AVE2LMT_SHIFT;
-+	pcr |= !!conf->alaw_enable << ISPH3A_PCR_AEW_ALAW_EN_SHIFT;
-+
-+	win1 = ((conf->win_height >> 1) - 1) << ISPH3A_AEWWIN1_WINH_SHIFT;
-+	win1 |= ((conf->win_width >> 1) - 1) << ISPH3A_AEWWIN1_WINW_SHIFT;
-+	win1 |= (conf->ver_win_count - 1) << ISPH3A_AEWWIN1_WINVC_SHIFT;
-+	win1 |= (conf->hor_win_count - 1) << ISPH3A_AEWWIN1_WINHC_SHIFT;
-+
-+	start = conf->hor_win_start << ISPH3A_AEWINSTART_WINSH_SHIFT;
-+	start |= conf->ver_win_start << ISPH3A_AEWINSTART_WINSV_SHIFT;
-+
-+	blk = conf->blk_ver_win_start << ISPH3A_AEWINBLK_WINSV_SHIFT;
-+	blk |= ((conf->blk_win_height >> 1) - 1) << ISPH3A_AEWINBLK_WINH_SHIFT;
-+
-+	subwin = ((conf->subsample_ver_inc >> 1) - 1) <<
-+		 ISPH3A_AEWSUBWIN_AEWINCV_SHIFT;
-+	subwin |= ((conf->subsample_hor_inc >> 1) - 1) <<
-+		  ISPH3A_AEWSUBWIN_AEWINCH_SHIFT;
-+
-+	isp_reg_writel(aewb->isp, win1, OMAP3_ISP_IOMEM_H3A, ISPH3A_AEWWIN1);
-+	isp_reg_writel(aewb->isp, start, OMAP3_ISP_IOMEM_H3A,
-+		       ISPH3A_AEWINSTART);
-+	isp_reg_writel(aewb->isp, blk, OMAP3_ISP_IOMEM_H3A, ISPH3A_AEWINBLK);
-+	isp_reg_writel(aewb->isp, subwin, OMAP3_ISP_IOMEM_H3A,
-+		       ISPH3A_AEWSUBWIN);
-+	isp_reg_clr_set(aewb->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR,
-+			ISPH3A_PCR_AEW_MASK, pcr);
-+
-+	aewb->update = 0;
-+	aewb->config_counter += aewb->inc_config;
-+	aewb->inc_config = 0;
-+	aewb->buf_size = conf->buf_size;
-+}
-+
-+static void h3a_aewb_enable(struct ispstat *aewb, int enable)
-+{
-+	if (enable) {
-+		isp_reg_set(aewb->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR,
-+			    ISPH3A_PCR_AEW_EN);
-+		/* This bit is already set if AF is enabled */
-+		if (aewb->isp->isp_af.state != ISPSTAT_ENABLED)
-+			isp_reg_set(aewb->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+				    ISPCTRL_H3A_CLK_EN);
-+	} else {
-+		isp_reg_clr(aewb->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR,
-+			    ISPH3A_PCR_AEW_EN);
-+		/* This bit can't be cleared if AF is enabled */
-+		if (aewb->isp->isp_af.state != ISPSTAT_ENABLED)
-+			isp_reg_clr(aewb->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+				    ISPCTRL_H3A_CLK_EN);
-+	}
-+}
-+
-+static int h3a_aewb_busy(struct ispstat *aewb)
-+{
-+	return isp_reg_readl(aewb->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR)
-+						& ISPH3A_PCR_BUSYAEAWB;
-+}
-+
-+static u32 h3a_aewb_get_buf_size(struct omap3isp_h3a_aewb_config *conf)
-+{
-+	/* Number of configured windows + extra row for black data */
-+	u32 win_count = (conf->ver_win_count + 1) * conf->hor_win_count;
-+
-+	/*
-+	 * Unsaturated block counts for each 8 windows.
-+	 * 1 extra for the last (win_count % 8) windows if win_count is not
-+	 * divisible by 8.
-+	 */
-+	win_count += (win_count + 7) / 8;
-+
-+	return win_count * AEWB_PACKET_SIZE;
-+}
-+
-+static int h3a_aewb_validate_params(struct ispstat *aewb, void *new_conf)
-+{
-+	struct omap3isp_h3a_aewb_config *user_cfg = new_conf;
-+	u32 buf_size;
-+
-+	if (unlikely(user_cfg->saturation_limit >
-+		     OMAP3ISP_AEWB_MAX_SATURATION_LIM))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->win_height < OMAP3ISP_AEWB_MIN_WIN_H ||
-+		     user_cfg->win_height > OMAP3ISP_AEWB_MAX_WIN_H ||
-+		     user_cfg->win_height & 0x01))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->win_width < OMAP3ISP_AEWB_MIN_WIN_W ||
-+		     user_cfg->win_width > OMAP3ISP_AEWB_MAX_WIN_W ||
-+		     user_cfg->win_width & 0x01))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->ver_win_count < OMAP3ISP_AEWB_MIN_WINVC ||
-+		     user_cfg->ver_win_count > OMAP3ISP_AEWB_MAX_WINVC))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->hor_win_count < OMAP3ISP_AEWB_MIN_WINHC ||
-+		     user_cfg->hor_win_count > OMAP3ISP_AEWB_MAX_WINHC))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->ver_win_start > OMAP3ISP_AEWB_MAX_WINSTART))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->hor_win_start > OMAP3ISP_AEWB_MAX_WINSTART))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->blk_ver_win_start > OMAP3ISP_AEWB_MAX_WINSTART))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->blk_win_height < OMAP3ISP_AEWB_MIN_WIN_H ||
-+		     user_cfg->blk_win_height > OMAP3ISP_AEWB_MAX_WIN_H ||
-+		     user_cfg->blk_win_height & 0x01))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->subsample_ver_inc < OMAP3ISP_AEWB_MIN_SUB_INC ||
-+		     user_cfg->subsample_ver_inc > OMAP3ISP_AEWB_MAX_SUB_INC ||
-+		     user_cfg->subsample_ver_inc & 0x01))
-+		return -EINVAL;
-+
-+	if (unlikely(user_cfg->subsample_hor_inc < OMAP3ISP_AEWB_MIN_SUB_INC ||
-+		     user_cfg->subsample_hor_inc > OMAP3ISP_AEWB_MAX_SUB_INC ||
-+		     user_cfg->subsample_hor_inc & 0x01))
-+		return -EINVAL;
-+
-+	buf_size = h3a_aewb_get_buf_size(user_cfg);
-+	if (buf_size > user_cfg->buf_size)
-+		user_cfg->buf_size = buf_size;
-+	else if (user_cfg->buf_size > OMAP3ISP_AEWB_MAX_BUF_SIZE)
-+		user_cfg->buf_size = OMAP3ISP_AEWB_MAX_BUF_SIZE;
-+
-+	return 0;
-+}
-+
-+/*
-+ * h3a_aewb_set_params - Helper function to check & store user given params.
-+ * @new_conf: Pointer to AE and AWB parameters struct.
-+ *
-+ * As most of them are busy-lock registers, need to wait until AEW_BUSY = 0 to
-+ * program them during ISR.
-+ */
-+static void h3a_aewb_set_params(struct ispstat *aewb, void *new_conf)
-+{
-+	struct omap3isp_h3a_aewb_config *user_cfg = new_conf;
-+	struct omap3isp_h3a_aewb_config *cur_cfg = aewb->priv;
-+	int update = 0;
-+
-+	if (cur_cfg->saturation_limit != user_cfg->saturation_limit) {
-+		cur_cfg->saturation_limit = user_cfg->saturation_limit;
-+		update = 1;
-+	}
-+	if (cur_cfg->alaw_enable != user_cfg->alaw_enable) {
-+		cur_cfg->alaw_enable = user_cfg->alaw_enable;
-+		update = 1;
-+	}
-+	if (cur_cfg->win_height != user_cfg->win_height) {
-+		cur_cfg->win_height = user_cfg->win_height;
-+		update = 1;
-+	}
-+	if (cur_cfg->win_width != user_cfg->win_width) {
-+		cur_cfg->win_width = user_cfg->win_width;
-+		update = 1;
-+	}
-+	if (cur_cfg->ver_win_count != user_cfg->ver_win_count) {
-+		cur_cfg->ver_win_count = user_cfg->ver_win_count;
-+		update = 1;
-+	}
-+	if (cur_cfg->hor_win_count != user_cfg->hor_win_count) {
-+		cur_cfg->hor_win_count = user_cfg->hor_win_count;
-+		update = 1;
-+	}
-+	if (cur_cfg->ver_win_start != user_cfg->ver_win_start) {
-+		cur_cfg->ver_win_start = user_cfg->ver_win_start;
-+		update = 1;
-+	}
-+	if (cur_cfg->hor_win_start != user_cfg->hor_win_start) {
-+		cur_cfg->hor_win_start = user_cfg->hor_win_start;
-+		update = 1;
-+	}
-+	if (cur_cfg->blk_ver_win_start != user_cfg->blk_ver_win_start) {
-+		cur_cfg->blk_ver_win_start = user_cfg->blk_ver_win_start;
-+		update = 1;
-+	}
-+	if (cur_cfg->blk_win_height != user_cfg->blk_win_height) {
-+		cur_cfg->blk_win_height = user_cfg->blk_win_height;
-+		update = 1;
-+	}
-+	if (cur_cfg->subsample_ver_inc != user_cfg->subsample_ver_inc) {
-+		cur_cfg->subsample_ver_inc = user_cfg->subsample_ver_inc;
-+		update = 1;
-+	}
-+	if (cur_cfg->subsample_hor_inc != user_cfg->subsample_hor_inc) {
-+		cur_cfg->subsample_hor_inc = user_cfg->subsample_hor_inc;
-+		update = 1;
-+	}
-+
-+	if (update || !aewb->configured) {
-+		aewb->inc_config++;
-+		aewb->update = 1;
-+		cur_cfg->buf_size = h3a_aewb_get_buf_size(cur_cfg);
-+	}
-+}
-+
-+static long h3a_aewb_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
-+{
-+	struct ispstat *stat = v4l2_get_subdevdata(sd);
-+
-+	switch (cmd) {
-+	case VIDIOC_OMAP3ISP_AEWB_CFG:
-+		return omap3isp_stat_config(stat, arg);
-+	case VIDIOC_OMAP3ISP_STAT_REQ:
-+		return omap3isp_stat_request_statistics(stat, arg);
-+	case VIDIOC_OMAP3ISP_STAT_EN: {
-+		unsigned long *en = arg;
-+		return omap3isp_stat_enable(stat, !!*en);
-+	}
-+	}
-+
-+	return -ENOIOCTLCMD;
-+}
-+
-+static const struct ispstat_ops h3a_aewb_ops = {
-+	.validate_params	= h3a_aewb_validate_params,
-+	.set_params		= h3a_aewb_set_params,
-+	.setup_regs		= h3a_aewb_setup_regs,
-+	.enable			= h3a_aewb_enable,
-+	.busy			= h3a_aewb_busy,
-+};
-+
-+static const struct v4l2_subdev_core_ops h3a_aewb_subdev_core_ops = {
-+	.ioctl = h3a_aewb_ioctl,
-+	.subscribe_event = omap3isp_stat_subscribe_event,
-+	.unsubscribe_event = omap3isp_stat_unsubscribe_event,
-+};
-+
-+static const struct v4l2_subdev_video_ops h3a_aewb_subdev_video_ops = {
-+	.s_stream = omap3isp_stat_s_stream,
-+};
-+
-+static const struct v4l2_subdev_ops h3a_aewb_subdev_ops = {
-+	.core = &h3a_aewb_subdev_core_ops,
-+	.video = &h3a_aewb_subdev_video_ops,
-+};
-+
-+/*
-+ * omap3isp_h3a_aewb_init - Module Initialisation.
-+ */
-+int omap3isp_h3a_aewb_init(struct isp_device *isp)
-+{
-+	struct ispstat *aewb = &isp->isp_aewb;
-+	struct omap3isp_h3a_aewb_config *aewb_cfg;
-+	struct omap3isp_h3a_aewb_config *aewb_recover_cfg;
-+	int ret;
-+
-+	aewb_cfg = kzalloc(sizeof(*aewb_cfg), GFP_KERNEL);
-+	if (!aewb_cfg)
-+		return -ENOMEM;
-+
-+	memset(aewb, 0, sizeof(*aewb));
-+	aewb->ops = &h3a_aewb_ops;
-+	aewb->priv = aewb_cfg;
-+	aewb->dma_ch = -1;
-+	aewb->event_type = V4L2_EVENT_OMAP3ISP_AEWB;
-+	aewb->isp = isp;
-+
-+	/* Set recover state configuration */
-+	aewb_recover_cfg = kzalloc(sizeof(*aewb_recover_cfg), GFP_KERNEL);
-+	if (!aewb_recover_cfg) {
-+		dev_err(aewb->isp->dev, "AEWB: cannot allocate memory for "
-+					"recover configuration.\n");
-+		ret = -ENOMEM;
-+		goto err_recover_alloc;
-+	}
-+
-+	aewb_recover_cfg->saturation_limit = OMAP3ISP_AEWB_MAX_SATURATION_LIM;
-+	aewb_recover_cfg->win_height = OMAP3ISP_AEWB_MIN_WIN_H;
-+	aewb_recover_cfg->win_width = OMAP3ISP_AEWB_MIN_WIN_W;
-+	aewb_recover_cfg->ver_win_count = OMAP3ISP_AEWB_MIN_WINVC;
-+	aewb_recover_cfg->hor_win_count = OMAP3ISP_AEWB_MIN_WINHC;
-+	aewb_recover_cfg->blk_ver_win_start = aewb_recover_cfg->ver_win_start +
-+		aewb_recover_cfg->win_height * aewb_recover_cfg->ver_win_count;
-+	aewb_recover_cfg->blk_win_height = OMAP3ISP_AEWB_MIN_WIN_H;
-+	aewb_recover_cfg->subsample_ver_inc = OMAP3ISP_AEWB_MIN_SUB_INC;
-+	aewb_recover_cfg->subsample_hor_inc = OMAP3ISP_AEWB_MIN_SUB_INC;
-+
-+	if (h3a_aewb_validate_params(aewb, aewb_recover_cfg)) {
-+		dev_err(aewb->isp->dev, "AEWB: recover configuration is "
-+					"invalid.\n");
-+		ret = -EINVAL;
-+		goto err_conf;
-+	}
-+
-+	aewb_recover_cfg->buf_size = h3a_aewb_get_buf_size(aewb_recover_cfg);
-+	aewb->recover_priv = aewb_recover_cfg;
-+
-+	ret = omap3isp_stat_init(aewb, "AEWB", &h3a_aewb_subdev_ops);
-+	if (ret)
-+		goto err_conf;
-+
-+	return 0;
-+
-+err_conf:
-+	kfree(aewb_recover_cfg);
-+err_recover_alloc:
-+	kfree(aewb_cfg);
-+
-+	return ret;
-+}
-+
-+/*
-+ * omap3isp_h3a_aewb_cleanup - Module exit.
-+ */
-+void omap3isp_h3a_aewb_cleanup(struct isp_device *isp)
-+{
-+	kfree(isp->isp_aewb.priv);
-+	kfree(isp->isp_aewb.recover_priv);
-+	omap3isp_stat_free(&isp->isp_aewb);
-+}
-diff --git a/drivers/media/video/isp/isph3a_af.c b/drivers/media/video/isp/isph3a_af.c
-new file mode 100644
-index 0000000..c32a18e
---- /dev/null
-+++ b/drivers/media/video/isp/isph3a_af.c
-@@ -0,0 +1,429 @@
-+/*
-+ * isph3a_af.c
-+ *
-+ * TI OMAP3 ISP - H3A AF module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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
-+ */
-+
-+/* Linux specific include files */
-+#include <linux/device.h>
-+#include <linux/slab.h>
-+
-+#include "isp.h"
-+#include "isph3a.h"
-+#include "ispstat.h"
-+
-+#define IS_OUT_OF_BOUNDS(value, min, max)		\
-+	(((value) < (min)) || ((value) > (max)))
-+
-+static void h3a_af_setup_regs(struct ispstat *af, void *priv)
-+{
-+	struct omap3isp_h3a_af_config *conf = priv;
-+	u32 pcr;
-+	u32 pax1;
-+	u32 pax2;
-+	u32 paxstart;
-+	u32 coef;
-+	u32 base_coef_set0;
-+	u32 base_coef_set1;
-+	int index;
-+
-+	if (af->state == ISPSTAT_DISABLED)
-+		return;
-+
-+	isp_reg_writel(af->isp, af->active_buf->iommu_addr, OMAP3_ISP_IOMEM_H3A,
-+		       ISPH3A_AFBUFST);
-+
-+	if (!af->update)
-+		return;
-+
-+	/* Configure Hardware Registers */
-+	pax1 = ((conf->paxel.width >> 1) - 1) << AF_PAXW_SHIFT;
-+	/* Set height in AFPAX1 */
-+	pax1 |= (conf->paxel.height >> 1) - 1;
-+	isp_reg_writel(af->isp, pax1, OMAP3_ISP_IOMEM_H3A, ISPH3A_AFPAX1);
-+
-+	/* Configure AFPAX2 Register */
-+	/* Set Line Increment in AFPAX2 Register */
-+	pax2 = ((conf->paxel.line_inc >> 1) - 1) << AF_LINE_INCR_SHIFT;
-+	/* Set Vertical Count */
-+	pax2 |= (conf->paxel.v_cnt - 1) << AF_VT_COUNT_SHIFT;
-+	/* Set Horizontal Count */
-+	pax2 |= (conf->paxel.h_cnt - 1);
-+	isp_reg_writel(af->isp, pax2, OMAP3_ISP_IOMEM_H3A, ISPH3A_AFPAX2);
-+
-+	/* Configure PAXSTART Register */
-+	/*Configure Horizontal Start */
-+	paxstart = conf->paxel.h_start << AF_HZ_START_SHIFT;
-+	/* Configure Vertical Start */
-+	paxstart |= conf->paxel.v_start;
-+	isp_reg_writel(af->isp, paxstart, OMAP3_ISP_IOMEM_H3A,
-+		       ISPH3A_AFPAXSTART);
-+
-+	/*SetIIRSH Register */
-+	isp_reg_writel(af->isp, conf->iir.h_start,
-+		       OMAP3_ISP_IOMEM_H3A, ISPH3A_AFIIRSH);
-+
-+	base_coef_set0 = ISPH3A_AFCOEF010;
-+	base_coef_set1 = ISPH3A_AFCOEF110;
-+	for (index = 0; index <= 8; index += 2) {
-+		/*Set IIR Filter0 Coefficients */
-+		coef = 0;
-+		coef |= conf->iir.coeff_set0[index];
-+		coef |= conf->iir.coeff_set0[index + 1] <<
-+			AF_COEF_SHIFT;
-+		isp_reg_writel(af->isp, coef, OMAP3_ISP_IOMEM_H3A,
-+			       base_coef_set0);
-+		base_coef_set0 += AFCOEF_OFFSET;
-+
-+		/*Set IIR Filter1 Coefficients */
-+		coef = 0;
-+		coef |= conf->iir.coeff_set1[index];
-+		coef |= conf->iir.coeff_set1[index + 1] <<
-+			AF_COEF_SHIFT;
-+		isp_reg_writel(af->isp, coef, OMAP3_ISP_IOMEM_H3A,
-+			       base_coef_set1);
-+		base_coef_set1 += AFCOEF_OFFSET;
-+	}
-+	/* set AFCOEF0010 Register */
-+	isp_reg_writel(af->isp, conf->iir.coeff_set0[10],
-+		       OMAP3_ISP_IOMEM_H3A, ISPH3A_AFCOEF0010);
-+	/* set AFCOEF1010 Register */
-+	isp_reg_writel(af->isp, conf->iir.coeff_set1[10],
-+		       OMAP3_ISP_IOMEM_H3A, ISPH3A_AFCOEF1010);
-+
-+	/* PCR Register */
-+	/* Set RGB Position */
-+	pcr = conf->rgb_pos << AF_RGBPOS_SHIFT;
-+	/* Set Accumulator Mode */
-+	if (conf->fvmode == OMAP3ISP_AF_MODE_PEAK)
-+		pcr |= AF_FVMODE;
-+	/* Set A-law */
-+	if (conf->alaw_enable)
-+		pcr |= AF_ALAW_EN;
-+	/* HMF Configurations */
-+	if (conf->hmf.enable) {
-+		/* Enable HMF */
-+		pcr |= AF_MED_EN;
-+		/* Set Median Threshold */
-+		pcr |= conf->hmf.threshold << AF_MED_TH_SHIFT;
-+	}
-+	/* Set PCR Register */
-+	isp_reg_clr_set(af->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR,
-+			AF_PCR_MASK, pcr);
-+
-+	af->update = 0;
-+	af->config_counter += af->inc_config;
-+	af->inc_config = 0;
-+	af->buf_size = conf->buf_size;
-+}
-+
-+static void h3a_af_enable(struct ispstat *af, int enable)
-+{
-+	if (enable) {
-+		isp_reg_set(af->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR,
-+			    ISPH3A_PCR_AF_EN);
-+		/* This bit is already set if AEWB is enabled */
-+		if (af->isp->isp_aewb.state != ISPSTAT_ENABLED)
-+			isp_reg_set(af->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+				    ISPCTRL_H3A_CLK_EN);
-+	} else {
-+		isp_reg_clr(af->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR,
-+			    ISPH3A_PCR_AF_EN);
-+		/* This bit can't be cleared if AEWB is enabled */
-+		if (af->isp->isp_aewb.state != ISPSTAT_ENABLED)
-+			isp_reg_clr(af->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+				    ISPCTRL_H3A_CLK_EN);
-+	}
-+}
-+
-+static int h3a_af_busy(struct ispstat *af)
-+{
-+	return isp_reg_readl(af->isp, OMAP3_ISP_IOMEM_H3A, ISPH3A_PCR)
-+						& ISPH3A_PCR_BUSYAF;
-+}
-+
-+static u32 h3a_af_get_buf_size(struct omap3isp_h3a_af_config *conf)
-+{
-+	return conf->paxel.h_cnt * conf->paxel.v_cnt * OMAP3ISP_AF_PAXEL_SIZE;
-+}
-+
-+/* Function to check paxel parameters */
-+static int h3a_af_validate_params(struct ispstat *af, void *new_conf)
-+{
-+	struct omap3isp_h3a_af_config *user_cfg = new_conf;
-+	struct omap3isp_h3a_af_paxel *paxel_cfg = &user_cfg->paxel;
-+	struct omap3isp_h3a_af_iir *iir_cfg = &user_cfg->iir;
-+	int index;
-+	u32 buf_size;
-+
-+	/* Check horizontal Count */
-+	if (IS_OUT_OF_BOUNDS(paxel_cfg->h_cnt,
-+			     OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN,
-+			     OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MAX))
-+		return -EINVAL;
-+
-+	/* Check Vertical Count */
-+	if (IS_OUT_OF_BOUNDS(paxel_cfg->v_cnt,
-+			     OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN,
-+			     OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MAX))
-+		return -EINVAL;
-+
-+	if (IS_OUT_OF_BOUNDS(paxel_cfg->height, OMAP3ISP_AF_PAXEL_HEIGHT_MIN,
-+			     OMAP3ISP_AF_PAXEL_HEIGHT_MAX) ||
-+	    paxel_cfg->height % 2)
-+		return -EINVAL;
-+
-+	/* Check width */
-+	if (IS_OUT_OF_BOUNDS(paxel_cfg->width, OMAP3ISP_AF_PAXEL_WIDTH_MIN,
-+			     OMAP3ISP_AF_PAXEL_WIDTH_MAX) ||
-+	    paxel_cfg->width % 2)
-+		return -EINVAL;
-+
-+	/* Check Line Increment */
-+	if (IS_OUT_OF_BOUNDS(paxel_cfg->line_inc,
-+			     OMAP3ISP_AF_PAXEL_INCREMENT_MIN,
-+			     OMAP3ISP_AF_PAXEL_INCREMENT_MAX) ||
-+	    paxel_cfg->line_inc % 2)
-+		return -EINVAL;
-+
-+	/* Check Horizontal Start */
-+	if ((paxel_cfg->h_start < iir_cfg->h_start) ||
-+	    IS_OUT_OF_BOUNDS(paxel_cfg->h_start,
-+			     OMAP3ISP_AF_PAXEL_HZSTART_MIN,
-+			     OMAP3ISP_AF_PAXEL_HZSTART_MAX))
-+		return -EINVAL;
-+
-+	/* Check IIR */
-+	for (index = 0; index < OMAP3ISP_AF_NUM_COEF; index++) {
-+		if ((iir_cfg->coeff_set0[index]) > OMAP3ISP_AF_COEF_MAX)
-+			return -EINVAL;
-+
-+		if ((iir_cfg->coeff_set1[index]) > OMAP3ISP_AF_COEF_MAX)
-+			return -EINVAL;
-+	}
-+
-+	if (IS_OUT_OF_BOUNDS(iir_cfg->h_start, OMAP3ISP_AF_IIRSH_MIN,
-+			     OMAP3ISP_AF_IIRSH_MAX))
-+		return -EINVAL;
-+
-+	/* Hack: If paxel size is 12, the 10th AF window may be corrupted */
-+	if ((paxel_cfg->h_cnt * paxel_cfg->v_cnt > 9) &&
-+	    (paxel_cfg->width * paxel_cfg->height == 12))
-+		return -EINVAL;
-+
-+	buf_size = h3a_af_get_buf_size(user_cfg);
-+	if (buf_size > user_cfg->buf_size)
-+		/* User buf_size request wasn't enough */
-+		user_cfg->buf_size = buf_size;
-+	else if (user_cfg->buf_size > OMAP3ISP_AF_MAX_BUF_SIZE)
-+		user_cfg->buf_size = OMAP3ISP_AF_MAX_BUF_SIZE;
-+
-+	return 0;
-+}
-+
-+/* Update local parameters */
-+static void h3a_af_set_params(struct ispstat *af, void *new_conf)
-+{
-+	struct omap3isp_h3a_af_config *user_cfg = new_conf;
-+	struct omap3isp_h3a_af_config *cur_cfg = af->priv;
-+	int update = 0;
-+	int index;
-+
-+	/* alaw */
-+	if (cur_cfg->alaw_enable != user_cfg->alaw_enable) {
-+		update = 1;
-+		goto out;
-+	}
-+
-+	/* hmf */
-+	if (cur_cfg->hmf.enable != user_cfg->hmf.enable) {
-+		update = 1;
-+		goto out;
-+	}
-+	if (cur_cfg->hmf.threshold != user_cfg->hmf.threshold) {
-+		update = 1;
-+		goto out;
-+	}
-+
-+	/* rgbpos */
-+	if (cur_cfg->rgb_pos != user_cfg->rgb_pos) {
-+		update = 1;
-+		goto out;
-+	}
-+
-+	/* iir */
-+	if (cur_cfg->iir.h_start != user_cfg->iir.h_start) {
-+		update = 1;
-+		goto out;
-+	}
-+	for (index = 0; index < OMAP3ISP_AF_NUM_COEF; index++) {
-+		if (cur_cfg->iir.coeff_set0[index] !=
-+				user_cfg->iir.coeff_set0[index]) {
-+			update = 1;
-+			goto out;
-+		}
-+		if (cur_cfg->iir.coeff_set1[index] !=
-+				user_cfg->iir.coeff_set1[index]) {
-+			update = 1;
-+			goto out;
-+		}
-+	}
-+
-+	/* paxel */
-+	if ((cur_cfg->paxel.width != user_cfg->paxel.width) ||
-+	    (cur_cfg->paxel.height != user_cfg->paxel.height) ||
-+	    (cur_cfg->paxel.h_start != user_cfg->paxel.h_start) ||
-+	    (cur_cfg->paxel.v_start != user_cfg->paxel.v_start) ||
-+	    (cur_cfg->paxel.h_cnt != user_cfg->paxel.h_cnt) ||
-+	    (cur_cfg->paxel.v_cnt != user_cfg->paxel.v_cnt) ||
-+	    (cur_cfg->paxel.line_inc != user_cfg->paxel.line_inc)) {
-+		update = 1;
-+		goto out;
-+	}
-+
-+	/* af_mode */
-+	if (cur_cfg->fvmode != user_cfg->fvmode)
-+		update = 1;
-+
-+out:
-+	if (update || !af->configured) {
-+		memcpy(cur_cfg, user_cfg, sizeof(*cur_cfg));
-+		af->inc_config++;
-+		af->update = 1;
-+		/*
-+		 * User might be asked for a bigger buffer than necessary for
-+		 * this configuration. In order to return the right amount of
-+		 * data during buffer request, let's calculate the size here
-+		 * instead of stick with user_cfg->buf_size.
-+		 */
-+		cur_cfg->buf_size = h3a_af_get_buf_size(cur_cfg);
-+	}
-+}
-+
-+static long h3a_af_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
-+{
-+	struct ispstat *stat = v4l2_get_subdevdata(sd);
-+
-+	switch (cmd) {
-+	case VIDIOC_OMAP3ISP_AF_CFG:
-+		return omap3isp_stat_config(stat, arg);
-+	case VIDIOC_OMAP3ISP_STAT_REQ:
-+		return omap3isp_stat_request_statistics(stat, arg);
-+	case VIDIOC_OMAP3ISP_STAT_EN: {
-+		int *en = arg;
-+		return omap3isp_stat_enable(stat, !!*en);
-+	}
-+	}
-+
-+	return -ENOIOCTLCMD;
-+
-+}
-+
-+static const struct ispstat_ops h3a_af_ops = {
-+	.validate_params	= h3a_af_validate_params,
-+	.set_params		= h3a_af_set_params,
-+	.setup_regs		= h3a_af_setup_regs,
-+	.enable			= h3a_af_enable,
-+	.busy			= h3a_af_busy,
-+};
-+
-+static const struct v4l2_subdev_core_ops h3a_af_subdev_core_ops = {
-+	.ioctl = h3a_af_ioctl,
-+	.subscribe_event = omap3isp_stat_subscribe_event,
-+	.unsubscribe_event = omap3isp_stat_unsubscribe_event,
-+};
-+
-+static const struct v4l2_subdev_video_ops h3a_af_subdev_video_ops = {
-+	.s_stream = omap3isp_stat_s_stream,
-+};
-+
-+static const struct v4l2_subdev_ops h3a_af_subdev_ops = {
-+	.core = &h3a_af_subdev_core_ops,
-+	.video = &h3a_af_subdev_video_ops,
-+};
-+
-+/* Function to register the AF character device driver. */
-+int omap3isp_h3a_af_init(struct isp_device *isp)
-+{
-+	struct ispstat *af = &isp->isp_af;
-+	struct omap3isp_h3a_af_config *af_cfg;
-+	struct omap3isp_h3a_af_config *af_recover_cfg;
-+	int ret;
-+
-+	af_cfg = kzalloc(sizeof(*af_cfg), GFP_KERNEL);
-+	if (af_cfg == NULL)
-+		return -ENOMEM;
-+
-+	memset(af, 0, sizeof(*af));
-+	af->ops = &h3a_af_ops;
-+	af->priv = af_cfg;
-+	af->dma_ch = -1;
-+	af->event_type = V4L2_EVENT_OMAP3ISP_AF;
-+	af->isp = isp;
-+
-+	/* Set recover state configuration */
-+	af_recover_cfg = kzalloc(sizeof(*af_recover_cfg), GFP_KERNEL);
-+	if (!af_recover_cfg) {
-+		dev_err(af->isp->dev, "AF: cannot allocate memory for recover "
-+				      "configuration.\n");
-+		ret = -ENOMEM;
-+		goto err_recover_alloc;
-+	}
-+
-+	af_recover_cfg->paxel.h_start = OMAP3ISP_AF_PAXEL_HZSTART_MIN;
-+	af_recover_cfg->paxel.width = OMAP3ISP_AF_PAXEL_WIDTH_MIN;
-+	af_recover_cfg->paxel.height = OMAP3ISP_AF_PAXEL_HEIGHT_MIN;
-+	af_recover_cfg->paxel.h_cnt = OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN;
-+	af_recover_cfg->paxel.v_cnt = OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN;
-+	af_recover_cfg->paxel.line_inc = OMAP3ISP_AF_PAXEL_INCREMENT_MIN;
-+	if (h3a_af_validate_params(af, af_recover_cfg)) {
-+		dev_err(af->isp->dev, "AF: recover configuration is "
-+				      "invalid.\n");
-+		ret = -EINVAL;
-+		goto err_conf;
-+	}
-+
-+	af_recover_cfg->buf_size = h3a_af_get_buf_size(af_recover_cfg);
-+	af->recover_priv = af_recover_cfg;
-+
-+	ret = omap3isp_stat_init(af, "AF", &h3a_af_subdev_ops);
-+	if (ret)
-+		goto err_conf;
-+
-+	return 0;
-+
-+err_conf:
-+	kfree(af_recover_cfg);
-+err_recover_alloc:
-+	kfree(af_cfg);
-+
-+	return ret;
-+}
-+
-+void omap3isp_h3a_af_cleanup(struct isp_device *isp)
-+{
-+	kfree(isp->isp_af.priv);
-+	kfree(isp->isp_af.recover_priv);
-+	omap3isp_stat_free(&isp->isp_af);
-+}
-diff --git a/drivers/media/video/isp/isphist.c b/drivers/media/video/isp/isphist.c
-new file mode 100644
-index 0000000..a43eb92
---- /dev/null
-+++ b/drivers/media/video/isp/isphist.c
-@@ -0,0 +1,520 @@
-+/*
-+ * isphist.c
-+ *
-+ * TI OMAP3 ISP - Histogram module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/slab.h>
-+#include <linux/uaccess.h>
-+#include <linux/device.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "isphist.h"
-+
-+#define HIST_CONFIG_DMA	1
-+
-+#define HIST_USING_DMA(hist) ((hist)->dma_ch >= 0)
-+
-+/*
-+ * hist_reset_mem - clear Histogram memory before start stats engine.
-+ */
-+static void hist_reset_mem(struct ispstat *hist)
-+{
-+	struct isp_device *isp = hist->isp;
-+	struct omap3isp_hist_config *conf = hist->priv;
-+	unsigned int i;
-+
-+	isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_HIST, ISPHIST_ADDR);
-+
-+	/*
-+	 * By setting it, the histogram internal buffer is being cleared at the
-+	 * same time it's being read. This bit must be cleared afterwards.
-+	 */
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT, ISPHIST_CNT_CLEAR);
-+
-+	/*
-+	 * We'll clear 4 words at each iteration for optimization. It avoids
-+	 * 3/4 of the jumps. We also know HIST_MEM_SIZE is divisible by 4.
-+	 */
-+	for (i = OMAP3ISP_HIST_MEM_SIZE / 4; i > 0; i--) {
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+	}
-+	isp_reg_clr(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT, ISPHIST_CNT_CLEAR);
-+
-+	hist->wait_acc_frames = conf->num_acc_frames;
-+}
-+
-+static void hist_dma_config(struct ispstat *hist)
-+{
-+	hist->dma_config.data_type = OMAP_DMA_DATA_TYPE_S32;
-+	hist->dma_config.sync_mode = OMAP_DMA_SYNC_ELEMENT;
-+	hist->dma_config.frame_count = 1;
-+	hist->dma_config.src_amode = OMAP_DMA_AMODE_CONSTANT;
-+	hist->dma_config.src_start = OMAP3ISP_HIST_REG_BASE + ISPHIST_DATA;
-+	hist->dma_config.dst_amode = OMAP_DMA_AMODE_POST_INC;
-+	hist->dma_config.src_or_dst_synch = OMAP_DMA_SRC_SYNC;
-+}
-+
-+/*
-+ * hist_setup_regs - Helper function to update Histogram registers.
-+ */
-+static void hist_setup_regs(struct ispstat *hist, void *priv)
-+{
-+	struct isp_device *isp = hist->isp;
-+	struct omap3isp_hist_config *conf = priv;
-+	int c;
-+	u32 cnt;
-+	u32 wb_gain;
-+	u32 reg_hor[OMAP3ISP_HIST_MAX_REGIONS];
-+	u32 reg_ver[OMAP3ISP_HIST_MAX_REGIONS];
-+
-+	if (!hist->update || hist->state == ISPSTAT_DISABLED ||
-+	    hist->state == ISPSTAT_DISABLING)
-+		return;
-+
-+	cnt = conf->cfa << ISPHIST_CNT_CFA_SHIFT;
-+
-+	wb_gain = conf->wg[0] << ISPHIST_WB_GAIN_WG00_SHIFT;
-+	wb_gain |= conf->wg[1] << ISPHIST_WB_GAIN_WG01_SHIFT;
-+	wb_gain |= conf->wg[2] << ISPHIST_WB_GAIN_WG02_SHIFT;
-+	if (conf->cfa == OMAP3ISP_HIST_CFA_BAYER)
-+		wb_gain |= conf->wg[3] << ISPHIST_WB_GAIN_WG03_SHIFT;
-+
-+	/* Regions size and position */
-+	for (c = 0; c < OMAP3ISP_HIST_MAX_REGIONS; c++) {
-+		if (c < conf->num_regions) {
-+			reg_hor[c] = conf->region[c].h_start <<
-+				     ISPHIST_REG_START_SHIFT;
-+			reg_hor[c] = conf->region[c].h_end <<
-+				     ISPHIST_REG_END_SHIFT;
-+			reg_ver[c] = conf->region[c].v_start <<
-+				     ISPHIST_REG_START_SHIFT;
-+			reg_ver[c] = conf->region[c].v_end <<
-+				     ISPHIST_REG_END_SHIFT;
-+		} else {
-+			reg_hor[c] = 0;
-+			reg_ver[c] = 0;
-+		}
-+	}
-+
-+	cnt |= conf->hist_bins << ISPHIST_CNT_BINS_SHIFT;
-+	switch (conf->hist_bins) {
-+	case OMAP3ISP_HIST_BINS_256:
-+		cnt |= (ISPHIST_IN_BIT_WIDTH_CCDC - 8) <<
-+			ISPHIST_CNT_SHIFT_SHIFT;
-+		break;
-+	case OMAP3ISP_HIST_BINS_128:
-+		cnt |= (ISPHIST_IN_BIT_WIDTH_CCDC - 7) <<
-+			ISPHIST_CNT_SHIFT_SHIFT;
-+		break;
-+	case OMAP3ISP_HIST_BINS_64:
-+		cnt |= (ISPHIST_IN_BIT_WIDTH_CCDC - 6) <<
-+			ISPHIST_CNT_SHIFT_SHIFT;
-+		break;
-+	default: /* OMAP3ISP_HIST_BINS_32 */
-+		cnt |= (ISPHIST_IN_BIT_WIDTH_CCDC - 5) <<
-+			ISPHIST_CNT_SHIFT_SHIFT;
-+		break;
-+	}
-+
-+	hist_reset_mem(hist);
-+
-+	isp_reg_writel(isp, cnt, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT);
-+	isp_reg_writel(isp, wb_gain,  OMAP3_ISP_IOMEM_HIST, ISPHIST_WB_GAIN);
-+	isp_reg_writel(isp, reg_hor[0], OMAP3_ISP_IOMEM_HIST, ISPHIST_R0_HORZ);
-+	isp_reg_writel(isp, reg_ver[0], OMAP3_ISP_IOMEM_HIST, ISPHIST_R0_VERT);
-+	isp_reg_writel(isp, reg_hor[1], OMAP3_ISP_IOMEM_HIST, ISPHIST_R1_HORZ);
-+	isp_reg_writel(isp, reg_ver[1], OMAP3_ISP_IOMEM_HIST, ISPHIST_R1_VERT);
-+	isp_reg_writel(isp, reg_hor[2], OMAP3_ISP_IOMEM_HIST, ISPHIST_R2_HORZ);
-+	isp_reg_writel(isp, reg_ver[2], OMAP3_ISP_IOMEM_HIST, ISPHIST_R2_VERT);
-+	isp_reg_writel(isp, reg_hor[3], OMAP3_ISP_IOMEM_HIST, ISPHIST_R3_HORZ);
-+	isp_reg_writel(isp, reg_ver[3], OMAP3_ISP_IOMEM_HIST, ISPHIST_R3_VERT);
-+
-+	hist->update = 0;
-+	hist->config_counter += hist->inc_config;
-+	hist->inc_config = 0;
-+	hist->buf_size = conf->buf_size;
-+}
-+
-+static void hist_enable(struct ispstat *hist, int enable)
-+{
-+	if (enable) {
-+		isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR,
-+			    ISPHIST_PCR_ENABLE);
-+		isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+			    ISPCTRL_HIST_CLK_EN);
-+	} else {
-+		isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR,
-+			    ISPHIST_PCR_ENABLE);
-+		isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL,
-+			    ISPCTRL_HIST_CLK_EN);
-+	}
-+}
-+
-+static int hist_busy(struct ispstat *hist)
-+{
-+	return isp_reg_readl(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_PCR)
-+						& ISPHIST_PCR_BUSY;
-+}
-+
-+static void hist_dma_cb(int lch, u16 ch_status, void *data)
-+{
-+	struct ispstat *hist = data;
-+
-+	if (ch_status & ~OMAP_DMA_BLOCK_IRQ) {
-+		dev_dbg(hist->isp->dev, "hist: DMA error. status = 0x%04x\n",
-+			ch_status);
-+		omap_stop_dma(lch);
-+		hist_reset_mem(hist);
-+		atomic_set(&hist->buf_err, 1);
-+	}
-+	isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT,
-+		    ISPHIST_CNT_CLEAR);
-+
-+	omap3isp_stat_dma_isr(hist);
-+	if (hist->state != ISPSTAT_DISABLED)
-+		omap3isp_hist_dma_done(hist->isp);
-+}
-+
-+static int hist_buf_dma(struct ispstat *hist)
-+{
-+	dma_addr_t dma_addr = hist->active_buf->dma_addr;
-+
-+	if (unlikely(!dma_addr)) {
-+		dev_dbg(hist->isp->dev, "hist: invalid DMA buffer address\n");
-+		hist_reset_mem(hist);
-+		return STAT_NO_BUF;
-+	}
-+
-+	isp_reg_writel(hist->isp, 0, OMAP3_ISP_IOMEM_HIST, ISPHIST_ADDR);
-+	isp_reg_set(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT,
-+		    ISPHIST_CNT_CLEAR);
-+	omap3isp_flush(hist->isp);
-+	hist->dma_config.dst_start = dma_addr;
-+	hist->dma_config.elem_count = hist->buf_size / sizeof(u32);
-+	omap_set_dma_params(hist->dma_ch, &hist->dma_config);
-+
-+	omap_start_dma(hist->dma_ch);
-+
-+	return STAT_BUF_WAITING_DMA;
-+}
-+
-+static int hist_buf_pio(struct ispstat *hist)
-+{
-+	struct isp_device *isp = hist->isp;
-+	u32 *buf = hist->active_buf->virt_addr;
-+	unsigned int i;
-+
-+	if (!buf) {
-+		dev_dbg(isp->dev, "hist: invalid PIO buffer address\n");
-+		hist_reset_mem(hist);
-+		return STAT_NO_BUF;
-+	}
-+
-+	isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_HIST, ISPHIST_ADDR);
-+
-+	/*
-+	 * By setting it, the histogram internal buffer is being cleared at the
-+	 * same time it's being read. This bit must be cleared just after all
-+	 * data is acquired.
-+	 */
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT, ISPHIST_CNT_CLEAR);
-+
-+	/*
-+	 * We'll read 4 times a 4-bytes-word at each iteration for
-+	 * optimization. It avoids 3/4 of the jumps. We also know buf_size is
-+	 * divisible by 16.
-+	 */
-+	for (i = hist->buf_size / 16; i > 0; i--) {
-+		*buf++ = isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+		*buf++ = isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+		*buf++ = isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+		*buf++ = isp_reg_readl(isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_DATA);
-+	}
-+	isp_reg_clr(hist->isp, OMAP3_ISP_IOMEM_HIST, ISPHIST_CNT,
-+		    ISPHIST_CNT_CLEAR);
-+
-+	return STAT_BUF_DONE;
-+}
-+
-+/*
-+ * hist_buf_process - Callback from ISP driver for HIST interrupt.
-+ */
-+static int hist_buf_process(struct ispstat *hist)
-+{
-+	struct omap3isp_hist_config *user_cfg = hist->priv;
-+	int ret;
-+
-+	if (atomic_read(&hist->buf_err) || hist->state != ISPSTAT_ENABLED) {
-+		hist_reset_mem(hist);
-+		return STAT_NO_BUF;
-+	}
-+
-+	if (--(hist->wait_acc_frames))
-+		return STAT_NO_BUF;
-+
-+	if (HIST_USING_DMA(hist))
-+		ret = hist_buf_dma(hist);
-+	else
-+		ret = hist_buf_pio(hist);
-+
-+	hist->wait_acc_frames = user_cfg->num_acc_frames;
-+
-+	return ret;
-+}
-+
-+static u32 hist_get_buf_size(struct omap3isp_hist_config *conf)
-+{
-+	return OMAP3ISP_HIST_MEM_SIZE_BINS(conf->hist_bins) * conf->num_regions;
-+}
-+
-+/*
-+ * hist_validate_params - Helper function to check user given params.
-+ * @user_cfg: Pointer to user configuration structure.
-+ *
-+ * Returns 0 on success configuration.
-+ */
-+static int hist_validate_params(struct ispstat *hist, void *new_conf)
-+{
-+	struct omap3isp_hist_config *user_cfg = new_conf;
-+	int c;
-+	u32 buf_size;
-+
-+	if (user_cfg->cfa > OMAP3ISP_HIST_CFA_FOVEONX3)
-+		return -EINVAL;
-+
-+	/* Regions size and position */
-+
-+	if ((user_cfg->num_regions < OMAP3ISP_HIST_MIN_REGIONS) ||
-+	    (user_cfg->num_regions > OMAP3ISP_HIST_MAX_REGIONS))
-+		return -EINVAL;
-+
-+	/* Regions */
-+	for (c = 0; c < user_cfg->num_regions; c++) {
-+		if (user_cfg->region[c].h_start & ~ISPHIST_REG_START_END_MASK)
-+			return -EINVAL;
-+		if (user_cfg->region[c].h_end & ~ISPHIST_REG_START_END_MASK)
-+			return -EINVAL;
-+		if (user_cfg->region[c].v_start & ~ISPHIST_REG_START_END_MASK)
-+			return -EINVAL;
-+		if (user_cfg->region[c].v_end & ~ISPHIST_REG_START_END_MASK)
-+			return -EINVAL;
-+		if (user_cfg->region[c].h_start > user_cfg->region[c].h_end)
-+			return -EINVAL;
-+		if (user_cfg->region[c].v_start > user_cfg->region[c].v_end)
-+			return -EINVAL;
-+	}
-+
-+	switch (user_cfg->num_regions) {
-+	case 1:
-+		if (user_cfg->hist_bins > OMAP3ISP_HIST_BINS_256)
-+			return -EINVAL;
-+		break;
-+	case 2:
-+		if (user_cfg->hist_bins > OMAP3ISP_HIST_BINS_128)
-+			return -EINVAL;
-+		break;
-+	default: /* 3 or 4 */
-+		if (user_cfg->hist_bins > OMAP3ISP_HIST_BINS_64)
-+			return -EINVAL;
-+		break;
-+	}
-+
-+	buf_size = hist_get_buf_size(user_cfg);
-+	if (buf_size > user_cfg->buf_size)
-+		/* User's buf_size request wasn't enoght */
-+		user_cfg->buf_size = buf_size;
-+	else if (user_cfg->buf_size > OMAP3ISP_HIST_MAX_BUF_SIZE)
-+		user_cfg->buf_size = OMAP3ISP_HIST_MAX_BUF_SIZE;
-+
-+	return 0;
-+}
-+
-+static int hist_comp_params(struct ispstat *hist,
-+			    struct omap3isp_hist_config *user_cfg)
-+{
-+	struct omap3isp_hist_config *cur_cfg = hist->priv;
-+	int c;
-+
-+	if (cur_cfg->cfa != user_cfg->cfa)
-+		return 1;
-+
-+	if (cur_cfg->num_acc_frames != user_cfg->num_acc_frames)
-+		return 1;
-+
-+	if (cur_cfg->hist_bins != user_cfg->hist_bins)
-+		return 1;
-+
-+	for (c = 0; c < OMAP3ISP_HIST_MAX_WG; c++) {
-+		if (c == 3 && user_cfg->cfa == OMAP3ISP_HIST_CFA_FOVEONX3)
-+			break;
-+		else if (cur_cfg->wg[c] != user_cfg->wg[c])
-+			return 1;
-+	}
-+
-+	if (cur_cfg->num_regions != user_cfg->num_regions)
-+		return 1;
-+
-+	/* Regions */
-+	for (c = 0; c < user_cfg->num_regions; c++) {
-+		if (cur_cfg->region[c].h_start != user_cfg->region[c].h_start)
-+			return 1;
-+		if (cur_cfg->region[c].h_end != user_cfg->region[c].h_end)
-+			return 1;
-+		if (cur_cfg->region[c].v_start != user_cfg->region[c].v_start)
-+			return 1;
-+		if (cur_cfg->region[c].v_end != user_cfg->region[c].v_end)
-+			return 1;
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * hist_update_params - Helper function to check and store user given params.
-+ * @new_conf: Pointer to user configuration structure.
-+ */
-+static void hist_set_params(struct ispstat *hist, void *new_conf)
-+{
-+	struct omap3isp_hist_config *user_cfg = new_conf;
-+	struct omap3isp_hist_config *cur_cfg = hist->priv;
-+
-+	if (!hist->configured || hist_comp_params(hist, user_cfg)) {
-+		memcpy(cur_cfg, user_cfg, sizeof(*user_cfg));
-+		if (user_cfg->num_acc_frames == 0)
-+			user_cfg->num_acc_frames = 1;
-+		hist->inc_config++;
-+		hist->update = 1;
-+		/*
-+		 * User might be asked for a bigger buffer than necessary for
-+		 * this configuration. In order to return the right amount of
-+		 * data during buffer request, let's calculate the size here
-+		 * instead of stick with user_cfg->buf_size.
-+		 */
-+		cur_cfg->buf_size = hist_get_buf_size(cur_cfg);
-+
-+	}
-+}
-+
-+static long hist_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
-+{
-+	struct ispstat *stat = v4l2_get_subdevdata(sd);
-+
-+	switch (cmd) {
-+	case VIDIOC_OMAP3ISP_HIST_CFG:
-+		return omap3isp_stat_config(stat, arg);
-+	case VIDIOC_OMAP3ISP_STAT_REQ:
-+		return omap3isp_stat_request_statistics(stat, arg);
-+	case VIDIOC_OMAP3ISP_STAT_EN: {
-+		int *en = arg;
-+		return omap3isp_stat_enable(stat, !!*en);
-+	}
-+	}
-+
-+	return -ENOIOCTLCMD;
-+
-+}
-+
-+static const struct ispstat_ops hist_ops = {
-+	.validate_params	= hist_validate_params,
-+	.set_params		= hist_set_params,
-+	.setup_regs		= hist_setup_regs,
-+	.enable			= hist_enable,
-+	.busy			= hist_busy,
-+	.buf_process		= hist_buf_process,
-+};
-+
-+static const struct v4l2_subdev_core_ops hist_subdev_core_ops = {
-+	.ioctl = hist_ioctl,
-+	.subscribe_event = omap3isp_stat_subscribe_event,
-+	.unsubscribe_event = omap3isp_stat_unsubscribe_event,
-+};
-+
-+static const struct v4l2_subdev_video_ops hist_subdev_video_ops = {
-+	.s_stream = omap3isp_stat_s_stream,
-+};
-+
-+static const struct v4l2_subdev_ops hist_subdev_ops = {
-+	.core = &hist_subdev_core_ops,
-+	.video = &hist_subdev_video_ops,
-+};
-+
-+/*
-+ * omap3isp_hist_init - Module Initialization.
-+ */
-+int omap3isp_hist_init(struct isp_device *isp)
-+{
-+	struct ispstat *hist = &isp->isp_hist;
-+	struct omap3isp_hist_config *hist_cfg;
-+	int ret = -1;
-+
-+	hist_cfg = kzalloc(sizeof(*hist_cfg), GFP_KERNEL);
-+	if (hist_cfg == NULL)
-+		return -ENOMEM;
-+
-+	memset(hist, 0, sizeof(*hist));
-+	if (HIST_CONFIG_DMA)
-+		ret = omap_request_dma(OMAP24XX_DMA_NO_DEVICE, "DMA_ISP_HIST",
-+				       hist_dma_cb, hist, &hist->dma_ch);
-+	if (ret) {
-+		if (HIST_CONFIG_DMA)
-+			dev_warn(isp->dev, "hist: DMA request channel failed. "
-+					   "Using PIO only.\n");
-+		hist->dma_ch = -1;
-+	} else {
-+		dev_dbg(isp->dev, "hist: DMA channel = %d\n", hist->dma_ch);
-+		hist_dma_config(hist);
-+		omap_enable_dma_irq(hist->dma_ch, OMAP_DMA_BLOCK_IRQ);
-+	}
-+
-+	hist->ops = &hist_ops;
-+	hist->priv = hist_cfg;
-+	hist->event_type = V4L2_EVENT_OMAP3ISP_HIST;
-+	hist->isp = isp;
-+
-+	ret = omap3isp_stat_init(hist, "histogram", &hist_subdev_ops);
-+	if (ret) {
-+		kfree(hist_cfg);
-+		if (HIST_USING_DMA(hist))
-+			omap_free_dma(hist->dma_ch);
-+	}
-+
-+	return ret;
-+}
-+
-+/*
-+ * omap3isp_hist_cleanup - Module cleanup.
-+ */
-+void omap3isp_hist_cleanup(struct isp_device *isp)
-+{
-+	if (HIST_USING_DMA(&isp->isp_hist))
-+		omap_free_dma(isp->isp_hist.dma_ch);
-+	kfree(isp->isp_hist.priv);
-+	omap3isp_stat_free(&isp->isp_hist);
-+}
-diff --git a/drivers/media/video/isp/isphist.h b/drivers/media/video/isp/isphist.h
-new file mode 100644
-index 0000000..247192b
---- /dev/null
-+++ b/drivers/media/video/isp/isphist.h
-@@ -0,0 +1,40 @@
-+/*
-+ * isphist.h
-+ *
-+ * TI OMAP3 ISP - Histogram module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_HIST_H
-+#define OMAP3_ISP_HIST_H
-+
-+#include <linux/omap3isp.h>
-+
-+#define ISPHIST_IN_BIT_WIDTH_CCDC	10
-+
-+struct isp_device;
-+
-+int omap3isp_hist_init(struct isp_device *isp);
-+void omap3isp_hist_cleanup(struct isp_device *isp);
-+
-+#endif /* OMAP3_ISP_HIST */
-diff --git a/drivers/media/video/isp/isppreview.c b/drivers/media/video/isp/isppreview.c
-new file mode 100644
-index 0000000..869583c
---- /dev/null
-+++ b/drivers/media/video/isp/isppreview.c
-@@ -0,0 +1,2120 @@
-+/*
-+ * isppreview.c
-+ *
-+ * TI OMAP3 ISP driver - Preview module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/device.h>
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+#include <linux/mutex.h>
-+#include <linux/uaccess.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "isppreview.h"
-+
-+/* Default values in Office Flourescent Light for RGBtoRGB Blending */
-+static struct omap3isp_prev_rgbtorgb flr_rgb2rgb = {
-+	{	/* RGB-RGB Matrix */
-+		{0x01E2, 0x0F30, 0x0FEE},
-+		{0x0F9B, 0x01AC, 0x0FB9},
-+		{0x0FE0, 0x0EC0, 0x0260}
-+	},	/* RGB Offset */
-+	{0x0000, 0x0000, 0x0000}
-+};
-+
-+/* Default values in Office Flourescent Light for RGB to YUV Conversion*/
-+static struct omap3isp_prev_csc flr_prev_csc = {
-+	{	/* CSC Coef Matrix */
-+		{66, 129, 25},
-+		{-38, -75, 112},
-+		{112, -94 , -18}
-+	},	/* CSC Offset */
-+	{0x0, 0x0, 0x0}
-+};
-+
-+/* Default values in Office Flourescent Light for CFA Gradient*/
-+#define FLR_CFA_GRADTHRS_HORZ	0x28
-+#define FLR_CFA_GRADTHRS_VERT	0x28
-+
-+/* Default values in Office Flourescent Light for Chroma Suppression*/
-+#define FLR_CSUP_GAIN		0x0D
-+#define FLR_CSUP_THRES		0xEB
-+
-+/* Default values in Office Flourescent Light for Noise Filter*/
-+#define FLR_NF_STRGTH		0x03
-+
-+/* Default values for White Balance */
-+#define FLR_WBAL_DGAIN		0x100
-+#define FLR_WBAL_COEF		0x20
-+
-+/* Default values in Office Flourescent Light for Black Adjustment*/
-+#define FLR_BLKADJ_BLUE		0x0
-+#define FLR_BLKADJ_GREEN	0x0
-+#define FLR_BLKADJ_RED		0x0
-+
-+#define DEF_DETECT_CORRECT_VAL	0xe
-+
-+#define PREV_MIN_WIDTH		64
-+#define PREV_MIN_HEIGHT		8
-+#define PREV_MAX_HEIGHT		16384
-+
-+/*
-+ * Coeficient Tables for the submodules in Preview.
-+ * Array is initialised with the values from.the tables text file.
-+ */
-+
-+/*
-+ * CFA Filter Coefficient Table
-+ *
-+ */
-+static u32 cfa_coef_table[] = {
-+#include "cfa_coef_table.h"
-+};
-+
-+/*
-+ * Default Gamma Correction Table - All components
-+ */
-+static u32 gamma_table[] = {
-+#include "gamma_table.h"
-+};
-+
-+/*
-+ * Noise Filter Threshold table
-+ */
-+static u32 noise_filter_table[] = {
-+#include "noise_filter_table.h"
-+};
-+
-+/*
-+ * Luminance Enhancement Table
-+ */
-+static u32 luma_enhance_table[] = {
-+#include "luma_enhance_table.h"
-+};
-+
-+/*
-+ * preview_enable_invalaw - Enable/Disable Inverse A-Law module in Preview.
-+ * @enable: 1 - Reverse the A-Law done in CCDC.
-+ */
-+static void
-+preview_enable_invalaw(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_WIDTH | ISPPRV_PCR_INVALAW);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_WIDTH | ISPPRV_PCR_INVALAW);
-+}
-+
-+/*
-+ * preview_enable_drkframe_capture - Enable/Disable of the darkframe capture.
-+ * @prev -
-+ * @enable: 1 - Enable, 0 - Disable
-+ *
-+ * NOTE: PRV_WSDR_ADDR and PRV_WADD_OFFSET must be set also
-+ * The proccess is applied for each captured frame.
-+ */
-+static void
-+preview_enable_drkframe_capture(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_DRKFCAP);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_DRKFCAP);
-+}
-+
-+/*
-+ * preview_enable_drkframe - Enable/Disable of the darkframe subtract.
-+ * @enable: 1 - Acquires memory bandwidth since the pixels in each frame is
-+ *          subtracted with the pixels in the current frame.
-+ *
-+ * The proccess is applied for each captured frame.
-+ */
-+static void
-+preview_enable_drkframe(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_DRKFEN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_DRKFEN);
-+}
-+
-+/*
-+ * preview_config_drkf_shadcomp - Configures shift value in shading comp.
-+ * @scomp_shtval: 3bit value of shift used in shading compensation.
-+ */
-+static void
-+preview_config_drkf_shadcomp(struct isp_prev_device *prev,
-+			     const void *scomp_shtval)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const u32 *shtval = scomp_shtval;
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			ISPPRV_PCR_SCOMP_SFT_MASK,
-+			*shtval << ISPPRV_PCR_SCOMP_SFT_SHIFT);
-+}
-+
-+/*
-+ * preview_enable_hmed - Enables/Disables of the Horizontal Median Filter.
-+ * @enable: 1 - Enables Horizontal Median Filter.
-+ */
-+static void
-+preview_enable_hmed(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_HMEDEN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_HMEDEN);
-+}
-+
-+/*
-+ * preview_config_hmed - Configures the Horizontal Median Filter.
-+ * @prev_hmed: Structure containing the odd and even distance between the
-+ *             pixels in the image along with the filter threshold.
-+ */
-+static void
-+preview_config_hmed(struct isp_prev_device *prev, const void *prev_hmed)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_hmed *hmed = prev_hmed;
-+
-+	isp_reg_writel(isp, (hmed->odddist == 1 ? 0 : ISPPRV_HMED_ODDDIST) |
-+		       (hmed->evendist == 1 ? 0 : ISPPRV_HMED_EVENDIST) |
-+		       (hmed->thres << ISPPRV_HMED_THRESHOLD_SHIFT),
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_HMED);
-+}
-+
-+/*
-+ * preview_config_noisefilter - Configures the Noise Filter.
-+ * @prev_nf: Structure containing the noisefilter table, strength to be used
-+ *           for the noise filter and the defect correction enable flag.
-+ */
-+static void
-+preview_config_noisefilter(struct isp_prev_device *prev, const void *prev_nf)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_nf *nf = prev_nf;
-+	unsigned int i;
-+
-+	isp_reg_writel(isp, nf->spread, OMAP3_ISP_IOMEM_PREV, ISPPRV_NF);
-+	isp_reg_writel(isp, ISPPRV_NF_TABLE_ADDR,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);
-+	for (i = 0; i < OMAP3ISP_PREV_NF_TBL_SIZE; i++) {
-+		isp_reg_writel(isp, nf->table[i],
-+			       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_DATA);
-+	}
-+}
-+
-+/*
-+ * preview_config_dcor - Configures the defect correction
-+ * @prev_dcor: Structure containing the defect correct thresholds
-+ */
-+static void
-+preview_config_dcor(struct isp_prev_device *prev, const void *prev_dcor)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_dcor *dcor = prev_dcor;
-+
-+	isp_reg_writel(isp, dcor->detect_correct[0],
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR0);
-+	isp_reg_writel(isp, dcor->detect_correct[1],
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR1);
-+	isp_reg_writel(isp, dcor->detect_correct[2],
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR2);
-+	isp_reg_writel(isp, dcor->detect_correct[3],
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR3);
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			ISPPRV_PCR_DCCOUP,
-+			dcor->couplet_mode_en ? ISPPRV_PCR_DCCOUP : 0);
-+}
-+
-+/*
-+ * preview_config_cfa - Configures the CFA Interpolation parameters.
-+ * @prev_cfa: Structure containing the CFA interpolation table, CFA format
-+ *            in the image, vertical and horizontal gradient threshold.
-+ */
-+static void
-+preview_config_cfa(struct isp_prev_device *prev, const void *prev_cfa)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_cfa *cfa = prev_cfa;
-+	unsigned int i;
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			ISPPRV_PCR_CFAFMT_MASK,
-+			cfa->format << ISPPRV_PCR_CFAFMT_SHIFT);
-+
-+	isp_reg_writel(isp,
-+		(cfa->gradthrs_vert << ISPPRV_CFA_GRADTH_VER_SHIFT) |
-+		(cfa->gradthrs_horz << ISPPRV_CFA_GRADTH_HOR_SHIFT),
-+		OMAP3_ISP_IOMEM_PREV, ISPPRV_CFA);
-+
-+	isp_reg_writel(isp, ISPPRV_CFA_TABLE_ADDR,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);
-+
-+	for (i = 0; i < OMAP3ISP_PREV_CFA_TBL_SIZE; i++) {
-+		isp_reg_writel(isp, cfa->table[i],
-+			       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_DATA);
-+	}
-+}
-+
-+/*
-+ * preview_config_gammacorrn - Configures the Gamma Correction table values
-+ * @gtable: Structure containing the table for red, blue, green gamma table.
-+ */
-+static void
-+preview_config_gammacorrn(struct isp_prev_device *prev, const void *gtable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_gtables *gt = gtable;
-+	unsigned int i;
-+
-+	isp_reg_writel(isp, ISPPRV_REDGAMMA_TABLE_ADDR,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);
-+	for (i = 0; i < OMAP3ISP_PREV_GAMMA_TBL_SIZE; i++)
-+		isp_reg_writel(isp, gt->red[i], OMAP3_ISP_IOMEM_PREV,
-+			       ISPPRV_SET_TBL_DATA);
-+
-+	isp_reg_writel(isp, ISPPRV_GREENGAMMA_TABLE_ADDR,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);
-+	for (i = 0; i < OMAP3ISP_PREV_GAMMA_TBL_SIZE; i++)
-+		isp_reg_writel(isp, gt->green[i], OMAP3_ISP_IOMEM_PREV,
-+			       ISPPRV_SET_TBL_DATA);
-+
-+	isp_reg_writel(isp, ISPPRV_BLUEGAMMA_TABLE_ADDR,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);
-+	for (i = 0; i < OMAP3ISP_PREV_GAMMA_TBL_SIZE; i++)
-+		isp_reg_writel(isp, gt->blue[i], OMAP3_ISP_IOMEM_PREV,
-+			       ISPPRV_SET_TBL_DATA);
-+}
-+
-+/*
-+ * preview_config_luma_enhancement - Sets the Luminance Enhancement table.
-+ * @ytable: Structure containing the table for Luminance Enhancement table.
-+ */
-+static void
-+preview_config_luma_enhancement(struct isp_prev_device *prev,
-+				const void *ytable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_luma *yt = ytable;
-+	unsigned int i;
-+
-+	isp_reg_writel(isp, ISPPRV_YENH_TABLE_ADDR,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);
-+	for (i = 0; i < OMAP3ISP_PREV_YENH_TBL_SIZE; i++) {
-+		isp_reg_writel(isp, yt->table[i],
-+			       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_DATA);
-+	}
-+}
-+
-+/*
-+ * preview_config_chroma_suppression - Configures the Chroma Suppression.
-+ * @csup: Structure containing the threshold value for suppression
-+ *        and the hypass filter enable flag.
-+ */
-+static void
-+preview_config_chroma_suppression(struct isp_prev_device *prev,
-+				  const void *csup)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_csup *cs = csup;
-+
-+	isp_reg_writel(isp,
-+		       cs->gain | (cs->thres << ISPPRV_CSUP_THRES_SHIFT) |
-+		       (cs->hypf_en << ISPPRV_CSUP_HPYF_SHIFT),
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_CSUP);
-+}
-+
-+/*
-+ * preview_enable_noisefilter - Enables/Disables the Noise Filter.
-+ * @enable: 1 - Enables the Noise Filter.
-+ */
-+static void
-+preview_enable_noisefilter(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_NFEN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_NFEN);
-+}
-+
-+/*
-+ * preview_enable_dcor - Enables/Disables the defect correction.
-+ * @enable: 1 - Enables the defect correction.
-+ */
-+static void
-+preview_enable_dcor(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_DCOREN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_DCOREN);
-+}
-+
-+/*
-+ * preview_enable_cfa - Enable/Disable the CFA Interpolation.
-+ * @enable: 1 - Enables the CFA.
-+ */
-+static void
-+preview_enable_cfa(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_CFAEN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_CFAEN);
-+}
-+
-+/*
-+ * preview_enable_gammabypass - Enables/Disables the GammaByPass
-+ * @enable: 1 - Bypasses Gamma - 10bit input is cropped to 8MSB.
-+ *          0 - Goes through Gamma Correction. input and output is 10bit.
-+ */
-+static void
-+preview_enable_gammabypass(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_GAMMA_BYPASS);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_GAMMA_BYPASS);
-+}
-+
-+/*
-+ * preview_enable_luma_enhancement - Enables/Disables Luminance Enhancement
-+ * @enable: 1 - Enable the Luminance Enhancement.
-+ */
-+static void
-+preview_enable_luma_enhancement(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_YNENHEN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_YNENHEN);
-+}
-+
-+/*
-+ * preview_enable_chroma_suppression - Enables/Disables Chrominance Suppr.
-+ * @enable: 1 - Enable the Chrominance Suppression.
-+ */
-+static void
-+preview_enable_chroma_suppression(struct isp_prev_device *prev, u8 enable)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	if (enable)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_SUPEN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_SUPEN);
-+}
-+
-+/*
-+ * preview_config_whitebalance - Configures the White Balance parameters.
-+ * @prev_wbal: Structure containing the digital gain and white balance
-+ *             coefficient.
-+ *
-+ * Coefficient matrix always with default values.
-+ */
-+static void
-+preview_config_whitebalance(struct isp_prev_device *prev, const void *prev_wbal)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_wbal *wbal = prev_wbal;
-+	u32 val;
-+
-+	isp_reg_writel(isp, wbal->dgain, OMAP3_ISP_IOMEM_PREV, ISPPRV_WB_DGAIN);
-+
-+	val = wbal->coef0 << ISPPRV_WBGAIN_COEF0_SHIFT;
-+	val |= wbal->coef1 << ISPPRV_WBGAIN_COEF1_SHIFT;
-+	val |= wbal->coef2 << ISPPRV_WBGAIN_COEF2_SHIFT;
-+	val |= wbal->coef3 << ISPPRV_WBGAIN_COEF3_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_WBGAIN);
-+
-+	isp_reg_writel(isp,
-+		       ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N0_0_SHIFT |
-+		       ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N0_1_SHIFT |
-+		       ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N0_2_SHIFT |
-+		       ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N0_3_SHIFT |
-+		       ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N1_0_SHIFT |
-+		       ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N1_1_SHIFT |
-+		       ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N1_2_SHIFT |
-+		       ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N1_3_SHIFT |
-+		       ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N2_0_SHIFT |
-+		       ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N2_1_SHIFT |
-+		       ISPPRV_WBSEL_COEF0 << ISPPRV_WBSEL_N2_2_SHIFT |
-+		       ISPPRV_WBSEL_COEF1 << ISPPRV_WBSEL_N2_3_SHIFT |
-+		       ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N3_0_SHIFT |
-+		       ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N3_1_SHIFT |
-+		       ISPPRV_WBSEL_COEF2 << ISPPRV_WBSEL_N3_2_SHIFT |
-+		       ISPPRV_WBSEL_COEF3 << ISPPRV_WBSEL_N3_3_SHIFT,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_WBSEL);
-+}
-+
-+/*
-+ * preview_config_blkadj - Configures the Black Adjustment parameters.
-+ * @prev_blkadj: Structure containing the black adjustment towards red, green,
-+ *               blue.
-+ */
-+static void
-+preview_config_blkadj(struct isp_prev_device *prev, const void *prev_blkadj)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_blkadj *blkadj = prev_blkadj;
-+
-+	isp_reg_writel(isp, (blkadj->blue << ISPPRV_BLKADJOFF_B_SHIFT) |
-+		       (blkadj->green << ISPPRV_BLKADJOFF_G_SHIFT) |
-+		       (blkadj->red << ISPPRV_BLKADJOFF_R_SHIFT),
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_BLKADJOFF);
-+}
-+
-+/*
-+ * preview_config_rgb_blending - Configures the RGB-RGB Blending matrix.
-+ * @rgb2rgb: Structure containing the rgb to rgb blending matrix and the rgb
-+ *           offset.
-+ */
-+static void
-+preview_config_rgb_blending(struct isp_prev_device *prev, const void *rgb2rgb)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_rgbtorgb *rgbrgb = rgb2rgb;
-+	u32 val;
-+
-+	val = (rgbrgb->matrix[0][0] & 0xfff) << ISPPRV_RGB_MAT1_MTX_RR_SHIFT;
-+	val |= (rgbrgb->matrix[0][1] & 0xfff) << ISPPRV_RGB_MAT1_MTX_GR_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT1);
-+
-+	val = (rgbrgb->matrix[0][2] & 0xfff) << ISPPRV_RGB_MAT2_MTX_BR_SHIFT;
-+	val |= (rgbrgb->matrix[1][0] & 0xfff) << ISPPRV_RGB_MAT2_MTX_RG_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT2);
-+
-+	val = (rgbrgb->matrix[1][1] & 0xfff) << ISPPRV_RGB_MAT3_MTX_GG_SHIFT;
-+	val |= (rgbrgb->matrix[1][2] & 0xfff) << ISPPRV_RGB_MAT3_MTX_BG_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT3);
-+
-+	val = (rgbrgb->matrix[2][0] & 0xfff) << ISPPRV_RGB_MAT4_MTX_RB_SHIFT;
-+	val |= (rgbrgb->matrix[2][1] & 0xfff) << ISPPRV_RGB_MAT4_MTX_GB_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT4);
-+
-+	val = (rgbrgb->matrix[2][2] & 0xfff) << ISPPRV_RGB_MAT5_MTX_BB_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT5);
-+
-+	val = (rgbrgb->offset[0] & 0x3ff) << ISPPRV_RGB_OFF1_MTX_OFFR_SHIFT;
-+	val |= (rgbrgb->offset[1] & 0x3ff) << ISPPRV_RGB_OFF1_MTX_OFFG_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_OFF1);
-+
-+	val = (rgbrgb->offset[2] & 0x3ff) << ISPPRV_RGB_OFF2_MTX_OFFB_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_OFF2);
-+}
-+
-+/*
-+ * Configures the RGB-YCbYCr conversion matrix
-+ * @prev_csc: Structure containing the RGB to YCbYCr matrix and the
-+ *            YCbCr offset.
-+ */
-+static void
-+preview_config_rgb_to_ycbcr(struct isp_prev_device *prev, const void *prev_csc)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_csc *csc = prev_csc;
-+	u32 val;
-+
-+	val = (csc->matrix[0][0] & 0x3ff) << ISPPRV_CSC0_RY_SHIFT;
-+	val |= (csc->matrix[0][1] & 0x3ff) << ISPPRV_CSC0_GY_SHIFT;
-+	val |= (csc->matrix[0][2] & 0x3ff) << ISPPRV_CSC0_BY_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC0);
-+
-+	val = (csc->matrix[1][0] & 0x3ff) << ISPPRV_CSC1_RCB_SHIFT;
-+	val |= (csc->matrix[1][1] & 0x3ff) << ISPPRV_CSC1_GCB_SHIFT;
-+	val |= (csc->matrix[1][2] & 0x3ff) << ISPPRV_CSC1_BCB_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC1);
-+
-+	val = (csc->matrix[2][0] & 0x3ff) << ISPPRV_CSC2_RCR_SHIFT;
-+	val |= (csc->matrix[2][1] & 0x3ff) << ISPPRV_CSC2_GCR_SHIFT;
-+	val |= (csc->matrix[2][2] & 0x3ff) << ISPPRV_CSC2_BCR_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC2);
-+
-+	val = (csc->offset[0] & 0xff) << ISPPRV_CSC_OFFSET_Y_SHIFT;
-+	val |= (csc->offset[1] & 0xff) << ISPPRV_CSC_OFFSET_CB_SHIFT;
-+	val |= (csc->offset[2] & 0xff) << ISPPRV_CSC_OFFSET_CR_SHIFT;
-+	isp_reg_writel(isp, val, OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC_OFFSET);
-+}
-+
-+/*
-+ * preview_update_contrast - Updates the contrast.
-+ * @contrast: Pointer to hold the current programmed contrast value.
-+ *
-+ * Value should be programmed before enabling the module.
-+ */
-+static void
-+preview_update_contrast(struct isp_prev_device *prev, u8 contrast)
-+{
-+	struct prev_params *params = &prev->params;
-+
-+	if (params->contrast != (contrast * ISPPRV_CONTRAST_UNITS)) {
-+		params->contrast = contrast * ISPPRV_CONTRAST_UNITS;
-+		prev->update |= PREV_CONTRAST;
-+	}
-+}
-+
-+/*
-+ * preview_config_contrast - Configures the Contrast.
-+ * @params: Contrast value (u8 pointer, U8Q0 format).
-+ *
-+ * Value should be programmed before enabling the module.
-+ */
-+static void
-+preview_config_contrast(struct isp_prev_device *prev, const void *params)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_CNT_BRT,
-+			0xff << ISPPRV_CNT_BRT_CNT_SHIFT,
-+			*(u8 *)params << ISPPRV_CNT_BRT_CNT_SHIFT);
-+}
-+
-+/*
-+ * preview_update_brightness - Updates the brightness in preview module.
-+ * @brightness: Pointer to hold the current programmed brightness value.
-+ *
-+ */
-+static void
-+preview_update_brightness(struct isp_prev_device *prev, u8 brightness)
-+{
-+	struct prev_params *params = &prev->params;
-+
-+	if (params->brightness != (brightness * ISPPRV_BRIGHT_UNITS)) {
-+		params->brightness = brightness * ISPPRV_BRIGHT_UNITS;
-+		prev->update |= PREV_BRIGHTNESS;
-+	}
-+}
-+
-+/*
-+ * preview_config_brightness - Configures the brightness.
-+ * @params: Brightness value (u8 pointer, U8Q0 format).
-+ */
-+static void
-+preview_config_brightness(struct isp_prev_device *prev, const void *params)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_CNT_BRT,
-+			0xff << ISPPRV_CNT_BRT_BRT_SHIFT,
-+			*(u8 *)params << ISPPRV_CNT_BRT_BRT_SHIFT);
-+}
-+
-+/*
-+ * preview_config_yc_range - Configures the max and min Y and C values.
-+ * @yclimit: Structure containing the range of Y and C values.
-+ */
-+static void
-+preview_config_yc_range(struct isp_prev_device *prev, const void *yclimit)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct omap3isp_prev_yclimit *yc = yclimit;
-+
-+	isp_reg_writel(isp,
-+		       yc->maxC << ISPPRV_SETUP_YC_MAXC_SHIFT |
-+		       yc->maxY << ISPPRV_SETUP_YC_MAXY_SHIFT |
-+		       yc->minC << ISPPRV_SETUP_YC_MINC_SHIFT |
-+		       yc->minY << ISPPRV_SETUP_YC_MINY_SHIFT,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_SETUP_YC);
-+}
-+
-+/* preview parameters update structure */
-+struct preview_update {
-+	int cfg_bit;
-+	int feature_bit;
-+	void (*config)(struct isp_prev_device *, const void *);
-+	void (*enable)(struct isp_prev_device *, u8);
-+};
-+
-+static struct preview_update update_attrs[] = {
-+	{OMAP3ISP_PREV_LUMAENH, PREV_LUMA_ENHANCE,
-+		preview_config_luma_enhancement,
-+		preview_enable_luma_enhancement},
-+	{OMAP3ISP_PREV_INVALAW, PREV_INVERSE_ALAW,
-+		NULL,
-+		preview_enable_invalaw},
-+	{OMAP3ISP_PREV_HRZ_MED, PREV_HORZ_MEDIAN_FILTER,
-+		preview_config_hmed,
-+		preview_enable_hmed},
-+	{OMAP3ISP_PREV_CFA, PREV_CFA,
-+		preview_config_cfa,
-+		preview_enable_cfa},
-+	{OMAP3ISP_PREV_CHROMA_SUPP, PREV_CHROMA_SUPPRESS,
-+		preview_config_chroma_suppression,
-+		preview_enable_chroma_suppression},
-+	{OMAP3ISP_PREV_WB, PREV_WB,
-+		preview_config_whitebalance,
-+		NULL},
-+	{OMAP3ISP_PREV_BLKADJ, PREV_BLKADJ,
-+		preview_config_blkadj,
-+		NULL},
-+	{OMAP3ISP_PREV_RGB2RGB, PREV_RGB2RGB,
-+		preview_config_rgb_blending,
-+		NULL},
-+	{OMAP3ISP_PREV_COLOR_CONV, PREV_COLOR_CONV,
-+		preview_config_rgb_to_ycbcr,
-+		NULL},
-+	{OMAP3ISP_PREV_YC_LIMIT, PREV_YCLIMITS,
-+		preview_config_yc_range,
-+		NULL},
-+	{OMAP3ISP_PREV_DEFECT_COR, PREV_DEFECT_COR,
-+		preview_config_dcor,
-+		preview_enable_dcor},
-+	{OMAP3ISP_PREV_GAMMABYPASS, PREV_GAMMA_BYPASS,
-+		NULL,
-+		preview_enable_gammabypass},
-+	{OMAP3ISP_PREV_DRK_FRM_CAPTURE, PREV_DARK_FRAME_CAPTURE,
-+		NULL,
-+		preview_enable_drkframe_capture},
-+	{OMAP3ISP_PREV_DRK_FRM_SUBTRACT, PREV_DARK_FRAME_SUBTRACT,
-+		NULL,
-+		preview_enable_drkframe},
-+	{OMAP3ISP_PREV_LENS_SHADING, PREV_LENS_SHADING,
-+		preview_config_drkf_shadcomp,
-+		preview_enable_drkframe},
-+	{OMAP3ISP_PREV_NF, PREV_NOISE_FILTER,
-+		preview_config_noisefilter,
-+		preview_enable_noisefilter},
-+	{OMAP3ISP_PREV_GAMMA, PREV_GAMMA,
-+		preview_config_gammacorrn,
-+		NULL},
-+	{-1, PREV_CONTRAST,
-+		preview_config_contrast,
-+		NULL},
-+	{-1, PREV_BRIGHTNESS,
-+		preview_config_brightness,
-+		NULL},
-+};
-+
-+/*
-+ * __preview_get_ptrs - helper function which return pointers to members
-+ *                         of params and config structures.
-+ * @params - pointer to preview_params structure.
-+ * @param - return pointer to appropriate structure field.
-+ * @configs - pointer to update config structure.
-+ * @config - return pointer to appropriate structure field.
-+ * @bit - for which feature to return pointers.
-+ * Return size of coresponding prev_params member
-+ */
-+static u32
-+__preview_get_ptrs(struct prev_params *params, void **param,
-+		   struct omap3isp_prev_update_config *configs,
-+		   void __user **config, u32 bit)
-+{
-+#define CHKARG(cfgs, cfg, field)				\
-+	if (cfgs && cfg) {					\
-+		*(cfg) = (cfgs)->field;				\
-+	}
-+
-+	switch (bit) {
-+	case PREV_HORZ_MEDIAN_FILTER:
-+		*param = &params->hmed;
-+		CHKARG(configs, config, hmed)
-+		return sizeof(params->hmed);
-+	case PREV_NOISE_FILTER:
-+		*param = &params->nf;
-+		CHKARG(configs, config, nf)
-+		return sizeof(params->nf);
-+		break;
-+	case PREV_CFA:
-+		*param = &params->cfa;
-+		CHKARG(configs, config, cfa)
-+		return sizeof(params->cfa);
-+	case PREV_LUMA_ENHANCE:
-+		*param = &params->luma;
-+		CHKARG(configs, config, luma)
-+		return sizeof(params->luma);
-+	case PREV_CHROMA_SUPPRESS:
-+		*param = &params->csup;
-+		CHKARG(configs, config, csup)
-+		return sizeof(params->csup);
-+	case PREV_DEFECT_COR:
-+		*param = &params->dcor;
-+		CHKARG(configs, config, dcor)
-+		return sizeof(params->dcor);
-+	case PREV_BLKADJ:
-+		*param = &params->blk_adj;
-+		CHKARG(configs, config, blkadj)
-+		return sizeof(params->blk_adj);
-+	case PREV_YCLIMITS:
-+		*param = &params->yclimit;
-+		CHKARG(configs, config, yclimit)
-+		return sizeof(params->yclimit);
-+	case PREV_RGB2RGB:
-+		*param = &params->rgb2rgb;
-+		CHKARG(configs, config, rgb2rgb)
-+		return sizeof(params->rgb2rgb);
-+	case PREV_COLOR_CONV:
-+		*param = &params->rgb2ycbcr;
-+		CHKARG(configs, config, csc)
-+		return sizeof(params->rgb2ycbcr);
-+	case PREV_WB:
-+		*param = &params->wbal;
-+		CHKARG(configs, config, wbal)
-+		return sizeof(params->wbal);
-+	case PREV_GAMMA:
-+		*param = &params->gamma;
-+		CHKARG(configs, config, gamma)
-+		return sizeof(params->gamma);
-+	case PREV_CONTRAST:
-+		*param = &params->contrast;
-+		return 0;
-+	case PREV_BRIGHTNESS:
-+		*param = &params->brightness;
-+		return 0;
-+	default:
-+		*param = NULL;
-+		*config = NULL;
-+		break;
-+	}
-+	return 0;
-+}
-+
-+/*
-+ * preview_config - Copy and update local structure with userspace preview
-+ *                  configuration.
-+ * @prev: ISP preview engine
-+ * @cfg: Configuration
-+ *
-+ * Return zero if success or -EFAULT if the configuration can't be copied from
-+ * userspace.
-+ */
-+static int preview_config(struct isp_prev_device *prev,
-+			  struct omap3isp_prev_update_config *cfg)
-+{
-+	struct prev_params *params;
-+	struct preview_update *attr;
-+	int i, bit, rval = 0;
-+
-+	params = &prev->params;
-+
-+	if (prev->state != ISP_PIPELINE_STREAM_STOPPED) {
-+		unsigned long flags;
-+
-+		spin_lock_irqsave(&prev->lock, flags);
-+		prev->shadow_update = 1;
-+		spin_unlock_irqrestore(&prev->lock, flags);
-+	}
-+
-+	for (i = 0; i < ARRAY_SIZE(update_attrs); i++) {
-+		attr = &update_attrs[i];
-+		bit = 0;
-+
-+		if (!(cfg->update & attr->cfg_bit))
-+			continue;
-+
-+		bit = cfg->flag & attr->cfg_bit;
-+		if (bit) {
-+			void *to = NULL, __user *from = NULL;
-+			unsigned long sz = 0;
-+
-+			sz = __preview_get_ptrs(params, &to, cfg, &from,
-+						   bit);
-+			if (to && from && sz) {
-+				if (copy_from_user(to, from, sz)) {
-+					rval = -EFAULT;
-+					break;
-+				}
-+			}
-+			params->features |= attr->feature_bit;
-+		} else {
-+			params->features &= ~attr->feature_bit;
-+		}
-+
-+		prev->update |= attr->feature_bit;
-+	}
-+
-+	prev->shadow_update = 0;
-+	return rval;
-+}
-+
-+/*
-+ * preview_setup_hw - Setup preview registers and/or internal memory
-+ * @prev: pointer to preview private structure
-+ * Note: can be called from interrupt context
-+ * Return none
-+ */
-+static void preview_setup_hw(struct isp_prev_device *prev)
-+{
-+	struct prev_params *params = &prev->params;
-+	struct preview_update *attr;
-+	int i, bit;
-+	void *param_ptr;
-+
-+	for (i = 0; i < ARRAY_SIZE(update_attrs); i++) {
-+		attr = &update_attrs[i];
-+
-+		if (!(prev->update & attr->feature_bit))
-+			continue;
-+		bit = params->features & attr->feature_bit;
-+		if (bit) {
-+			if (attr->config) {
-+				__preview_get_ptrs(params, &param_ptr, NULL,
-+						      NULL, bit);
-+				attr->config(prev, param_ptr);
-+			}
-+			if (attr->enable)
-+				attr->enable(prev, 1);
-+		} else
-+			if (attr->enable)
-+				attr->enable(prev, 0);
-+
-+		prev->update &= ~attr->feature_bit;
-+	}
-+}
-+
-+/*
-+ * preview_config_ycpos - Configure byte layout of YUV image.
-+ * @mode: Indicates the required byte layout.
-+ */
-+static void
-+preview_config_ycpos(struct isp_prev_device *prev,
-+		     enum v4l2_mbus_pixelcode pixelcode)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	enum preview_ycpos_mode mode;
-+
-+	switch (pixelcode) {
-+	case V4L2_MBUS_FMT_YUYV8_1X16:
-+		mode = YCPOS_CrYCbY;
-+		break;
-+	case V4L2_MBUS_FMT_UYVY8_1X16:
-+		mode = YCPOS_YCrYCb;
-+		break;
-+	default:
-+		return;
-+	}
-+
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			ISPPRV_PCR_YCPOS_CrYCbY,
-+			mode << ISPPRV_PCR_YCPOS_SHIFT);
-+}
-+
-+/*
-+ * preview_config_averager - Enable / disable / configure averager
-+ * @average: Average value to be configured.
-+ */
-+static void preview_config_averager(struct isp_prev_device *prev, u8 average)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	int reg = 0;
-+
-+	if (prev->params.cfa.format == OMAP3ISP_CFAFMT_BAYER)
-+		reg = ISPPRV_AVE_EVENDIST_2 << ISPPRV_AVE_EVENDIST_SHIFT |
-+		      ISPPRV_AVE_ODDDIST_2 << ISPPRV_AVE_ODDDIST_SHIFT |
-+		      average;
-+	else if (prev->params.cfa.format == OMAP3ISP_CFAFMT_RGBFOVEON)
-+		reg = ISPPRV_AVE_EVENDIST_3 << ISPPRV_AVE_EVENDIST_SHIFT |
-+		      ISPPRV_AVE_ODDDIST_3 << ISPPRV_AVE_ODDDIST_SHIFT |
-+		      average;
-+	isp_reg_writel(isp, reg, OMAP3_ISP_IOMEM_PREV, ISPPRV_AVE);
-+}
-+
-+/*
-+ * preview_config_input_size - Configure the input frame size
-+ *
-+ * The preview engine crops several rows and columns internally depending on
-+ * which processing blocks are enabled. The driver assumes all those blocks are
-+ * enabled when reporting source pad formats to userspace. If this assumption is
-+ * not true, rows and columns must be manually cropped at the preview engine
-+ * input to avoid overflows at the end of lines and frames.
-+ */
-+static void preview_config_input_size(struct isp_prev_device *prev)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	struct prev_params *params = &prev->params;
-+	struct v4l2_mbus_framefmt *format = &prev->formats[PREV_PAD_SINK];
-+	unsigned int sph = 0;
-+	unsigned int eph = format->width - 1;
-+	unsigned int slv = 0;
-+	unsigned int elv = format->height - 1;
-+
-+	if (prev->input == PREVIEW_INPUT_CCDC) {
-+		sph += 2;
-+		eph -= 2;
-+	}
-+
-+	/*
-+	 * Median filter	4 pixels
-+	 * Noise filter		4 pixels, 4 lines
-+	 * or faulty pixels correction
-+	 * CFA filter		4 pixels, 4 lines in Bayer mode
-+	 *				  2 lines in other modes
-+	 * Color suppression	2 pixels
-+	 * or luma enhancement
-+	 * -------------------------------------------------------------
-+	 * Maximum total	14 pixels, 8 lines
-+	 */
-+
-+	if (!(params->features & PREV_CFA)) {
-+		sph += 2;
-+		eph -= 2;
-+		slv += 2;
-+		elv -= 2;
-+	}
-+	if (!(params->features & (PREV_DEFECT_COR | PREV_NOISE_FILTER))) {
-+		sph += 2;
-+		eph -= 2;
-+		slv += 2;
-+		elv -= 2;
-+	}
-+	if (!(params->features & PREV_HORZ_MEDIAN_FILTER)) {
-+		sph += 2;
-+		eph -= 2;
-+	}
-+	if (!(params->features & (PREV_CHROMA_SUPPRESS | PREV_LUMA_ENHANCE)))
-+		sph += 2;
-+
-+	isp_reg_writel(isp, (sph << ISPPRV_HORZ_INFO_SPH_SHIFT) | eph,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_HORZ_INFO);
-+	isp_reg_writel(isp, (slv << ISPPRV_VERT_INFO_SLV_SHIFT) | elv,
-+		       OMAP3_ISP_IOMEM_PREV, ISPPRV_VERT_INFO);
-+}
-+
-+/*
-+ * preview_config_inlineoffset - Configures the Read address line offset.
-+ * @prev: Preview module
-+ * @offset: Line offset
-+ *
-+ * According to the TRM, the line offset must be aligned on a 32 bytes boundary.
-+ * However, a hardware bug requires the memory start address to be aligned on a
-+ * 64 bytes boundary, so the offset probably should be aligned on 64 bytes as
-+ * well.
-+ */
-+static void
-+preview_config_inlineoffset(struct isp_prev_device *prev, u32 offset)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	isp_reg_writel(isp, offset & 0xffff, OMAP3_ISP_IOMEM_PREV,
-+		       ISPPRV_RADR_OFFSET);
-+}
-+
-+/*
-+ * preview_set_inaddr - Sets memory address of input frame.
-+ * @addr: 32bit memory address aligned on 32byte boundary.
-+ *
-+ * Configures the memory address from which the input frame is to be read.
-+ */
-+static void preview_set_inaddr(struct isp_prev_device *prev, u32 addr)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	isp_reg_writel(isp, addr, OMAP3_ISP_IOMEM_PREV, ISPPRV_RSDR_ADDR);
-+}
-+
-+/*
-+ * preview_config_outlineoffset - Configures the Write address line offset.
-+ * @offset: Line Offset for the preview output.
-+ *
-+ * The offset must be a multiple of 32 bytes.
-+ */
-+static void preview_config_outlineoffset(struct isp_prev_device *prev,
-+				    u32 offset)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	isp_reg_writel(isp, offset & 0xffff, OMAP3_ISP_IOMEM_PREV,
-+		       ISPPRV_WADD_OFFSET);
-+}
-+
-+/*
-+ * preview_set_outaddr - Sets the memory address to store output frame
-+ * @addr: 32bit memory address aligned on 32byte boundary.
-+ *
-+ * Configures the memory address to which the output frame is written.
-+ */
-+static void preview_set_outaddr(struct isp_prev_device *prev, u32 addr)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	isp_reg_writel(isp, addr, OMAP3_ISP_IOMEM_PREV, ISPPRV_WSDR_ADDR);
-+}
-+
-+static void preview_adjust_bandwidth(struct isp_prev_device *prev)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&prev->subdev.entity);
-+	struct isp_device *isp = to_isp_device(prev);
-+	const struct v4l2_mbus_framefmt *ifmt = &prev->formats[PREV_PAD_SINK];
-+	unsigned long l3_ick = pipe->l3_ick;
-+	struct v4l2_fract *timeperframe;
-+	unsigned int cycles_per_frame;
-+	unsigned int requests_per_frame;
-+	unsigned int cycles_per_request;
-+	unsigned int minimum;
-+	unsigned int maximum;
-+	unsigned int value;
-+
-+	if (prev->input != PREVIEW_INPUT_MEMORY) {
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_SDR_REQ_EXP,
-+			    ISPSBL_SDR_REQ_PRV_EXP_MASK);
-+		return;
-+	}
-+
-+	/* Compute the minimum number of cycles per request, based on the
-+	 * pipeline maximum data rate. This is an absolute lower bound if we
-+	 * don't want SBL overflows, so round the value up.
-+	 */
-+	cycles_per_request = div_u64((u64)l3_ick / 2 * 256 + pipe->max_rate - 1,
-+				     pipe->max_rate);
-+	minimum = DIV_ROUND_UP(cycles_per_request, 32);
-+
-+	/* Compute the maximum number of cycles per request, based on the
-+	 * requested frame rate. This is a soft upper bound to achieve a frame
-+	 * rate equal or higher than the requested value, so round the value
-+	 * down.
-+	 */
-+	timeperframe = &pipe->max_timeperframe;
-+
-+	requests_per_frame = DIV_ROUND_UP(ifmt->width * 2, 256) * ifmt->height;
-+	cycles_per_frame = div_u64((u64)l3_ick * timeperframe->numerator,
-+				   timeperframe->denominator);
-+	cycles_per_request = cycles_per_frame / requests_per_frame;
-+
-+	maximum = cycles_per_request / 32;
-+
-+	value = max(minimum, maximum);
-+
-+	dev_dbg(isp->dev, "%s: cycles per request = %u\n", __func__, value);
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_SDR_REQ_EXP,
-+			ISPSBL_SDR_REQ_PRV_EXP_MASK,
-+			value << ISPSBL_SDR_REQ_PRV_EXP_SHIFT);
-+}
-+
-+/*
-+ * omap3isp_preview_busy - Gets busy state of preview module.
-+ */
-+int omap3isp_preview_busy(struct isp_prev_device *prev)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	return isp_reg_readl(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR)
-+		& ISPPRV_PCR_BUSY;
-+}
-+
-+/*
-+ * omap3isp_preview_restore_context - Restores the values of preview registers
-+ */
-+void omap3isp_preview_restore_context(struct isp_device *isp)
-+{
-+	isp->isp_prev.update = PREV_FEATURES_END - 1;
-+	preview_setup_hw(&isp->isp_prev);
-+}
-+
-+/*
-+ * preview_print_status - Dump preview module registers to the kernel log
-+ */
-+#define PREV_PRINT_REGISTER(isp, name)\
-+	dev_dbg(isp->dev, "###PRV " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_##name))
-+
-+static void preview_print_status(struct isp_prev_device *prev)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	dev_dbg(isp->dev, "-------------Preview Register dump----------\n");
-+
-+	PREV_PRINT_REGISTER(isp, PCR);
-+	PREV_PRINT_REGISTER(isp, HORZ_INFO);
-+	PREV_PRINT_REGISTER(isp, VERT_INFO);
-+	PREV_PRINT_REGISTER(isp, RSDR_ADDR);
-+	PREV_PRINT_REGISTER(isp, RADR_OFFSET);
-+	PREV_PRINT_REGISTER(isp, DSDR_ADDR);
-+	PREV_PRINT_REGISTER(isp, DRKF_OFFSET);
-+	PREV_PRINT_REGISTER(isp, WSDR_ADDR);
-+	PREV_PRINT_REGISTER(isp, WADD_OFFSET);
-+	PREV_PRINT_REGISTER(isp, AVE);
-+	PREV_PRINT_REGISTER(isp, HMED);
-+	PREV_PRINT_REGISTER(isp, NF);
-+	PREV_PRINT_REGISTER(isp, WB_DGAIN);
-+	PREV_PRINT_REGISTER(isp, WBGAIN);
-+	PREV_PRINT_REGISTER(isp, WBSEL);
-+	PREV_PRINT_REGISTER(isp, CFA);
-+	PREV_PRINT_REGISTER(isp, BLKADJOFF);
-+	PREV_PRINT_REGISTER(isp, RGB_MAT1);
-+	PREV_PRINT_REGISTER(isp, RGB_MAT2);
-+	PREV_PRINT_REGISTER(isp, RGB_MAT3);
-+	PREV_PRINT_REGISTER(isp, RGB_MAT4);
-+	PREV_PRINT_REGISTER(isp, RGB_MAT5);
-+	PREV_PRINT_REGISTER(isp, RGB_OFF1);
-+	PREV_PRINT_REGISTER(isp, RGB_OFF2);
-+	PREV_PRINT_REGISTER(isp, CSC0);
-+	PREV_PRINT_REGISTER(isp, CSC1);
-+	PREV_PRINT_REGISTER(isp, CSC2);
-+	PREV_PRINT_REGISTER(isp, CSC_OFFSET);
-+	PREV_PRINT_REGISTER(isp, CNT_BRT);
-+	PREV_PRINT_REGISTER(isp, CSUP);
-+	PREV_PRINT_REGISTER(isp, SETUP_YC);
-+	PREV_PRINT_REGISTER(isp, SET_TBL_ADDR);
-+	PREV_PRINT_REGISTER(isp, CDC_THR0);
-+	PREV_PRINT_REGISTER(isp, CDC_THR1);
-+	PREV_PRINT_REGISTER(isp, CDC_THR2);
-+	PREV_PRINT_REGISTER(isp, CDC_THR3);
-+
-+	dev_dbg(isp->dev, "--------------------------------------------\n");
-+}
-+
-+/*
-+ * preview_init_params - init image processing parameters.
-+ * @prev: pointer to previewer private structure
-+ * return none
-+ */
-+static void preview_init_params(struct isp_prev_device *prev)
-+{
-+	struct prev_params *params = &prev->params;
-+	int i = 0;
-+
-+	/* Init values */
-+	params->contrast = ISPPRV_CONTRAST_DEF * ISPPRV_CONTRAST_UNITS;
-+	params->brightness = ISPPRV_BRIGHT_DEF * ISPPRV_BRIGHT_UNITS;
-+	params->average = NO_AVE;
-+	params->cfa.format = OMAP3ISP_CFAFMT_BAYER;
-+	memcpy(params->cfa.table, cfa_coef_table,
-+	       sizeof(params->cfa.table));
-+	params->cfa.gradthrs_horz = FLR_CFA_GRADTHRS_HORZ;
-+	params->cfa.gradthrs_vert = FLR_CFA_GRADTHRS_VERT;
-+	params->csup.gain = FLR_CSUP_GAIN;
-+	params->csup.thres = FLR_CSUP_THRES;
-+	params->csup.hypf_en = 0;
-+	memcpy(params->luma.table, luma_enhance_table,
-+	       sizeof(params->luma.table));
-+	params->nf.spread = FLR_NF_STRGTH;
-+	memcpy(params->nf.table, noise_filter_table, sizeof(params->nf.table));
-+	params->dcor.couplet_mode_en = 1;
-+	for (i = 0; i < OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS; i++)
-+		params->dcor.detect_correct[i] = DEF_DETECT_CORRECT_VAL;
-+	memcpy(params->gamma.blue, gamma_table, sizeof(params->gamma.blue));
-+	memcpy(params->gamma.green, gamma_table, sizeof(params->gamma.green));
-+	memcpy(params->gamma.red, gamma_table, sizeof(params->gamma.red));
-+	params->wbal.dgain = FLR_WBAL_DGAIN;
-+	params->wbal.coef0 = FLR_WBAL_COEF;
-+	params->wbal.coef1 = FLR_WBAL_COEF;
-+	params->wbal.coef2 = FLR_WBAL_COEF;
-+	params->wbal.coef3 = FLR_WBAL_COEF;
-+	params->blk_adj.red = FLR_BLKADJ_RED;
-+	params->blk_adj.green = FLR_BLKADJ_GREEN;
-+	params->blk_adj.blue = FLR_BLKADJ_BLUE;
-+	params->rgb2rgb = flr_rgb2rgb;
-+	params->rgb2ycbcr = flr_prev_csc;
-+	params->yclimit.minC = ISPPRV_YC_MIN;
-+	params->yclimit.maxC = ISPPRV_YC_MAX;
-+	params->yclimit.minY = ISPPRV_YC_MIN;
-+	params->yclimit.maxY = ISPPRV_YC_MAX;
-+
-+	params->features = PREV_CFA | PREV_DEFECT_COR | PREV_NOISE_FILTER
-+			 | PREV_GAMMA | PREV_BLKADJ | PREV_YCLIMITS
-+			 | PREV_RGB2RGB | PREV_COLOR_CONV | PREV_WB
-+			 | PREV_BRIGHTNESS | PREV_CONTRAST;
-+
-+	prev->update = PREV_FEATURES_END - 1;
-+}
-+
-+/*
-+ * preview_max_out_width - Handle previewer hardware ouput limitations
-+ * @isp_revision : ISP revision
-+ * returns maximum width output for current isp revision
-+ */
-+static unsigned int preview_max_out_width(struct isp_prev_device *prev)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	switch (isp->revision) {
-+	case ISP_REVISION_1_0:
-+		return ISPPRV_MAXOUTPUT_WIDTH;
-+
-+	case ISP_REVISION_2_0:
-+	default:
-+		return ISPPRV_MAXOUTPUT_WIDTH_ES2;
-+
-+	case ISP_REVISION_15_0:
-+		return ISPPRV_MAXOUTPUT_WIDTH_3630;
-+	}
-+}
-+
-+static void preview_configure(struct isp_prev_device *prev)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+	struct v4l2_mbus_framefmt *format;
-+	unsigned int max_out_width;
-+	unsigned int format_avg;
-+
-+	preview_setup_hw(prev);
-+
-+	if (prev->output & PREVIEW_OUTPUT_MEMORY)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_SDRPORT);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_SDRPORT);
-+
-+	if (prev->output & PREVIEW_OUTPUT_RESIZER)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_RSZPORT);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_RSZPORT);
-+
-+	/* PREV_PAD_SINK */
-+	format = &prev->formats[PREV_PAD_SINK];
-+
-+	preview_adjust_bandwidth(prev);
-+
-+	preview_config_input_size(prev);
-+
-+	if (prev->input == PREVIEW_INPUT_CCDC)
-+		preview_config_inlineoffset(prev, 0);
-+	else
-+		preview_config_inlineoffset(prev,
-+				ALIGN(format->width, 0x20) * 2);
-+
-+	/* PREV_PAD_SOURCE */
-+	format = &prev->formats[PREV_PAD_SOURCE];
-+
-+	if (prev->output & PREVIEW_OUTPUT_MEMORY)
-+		preview_config_outlineoffset(prev,
-+				ALIGN(format->width, 0x10) * 2);
-+
-+	max_out_width = preview_max_out_width(prev);
-+
-+	format_avg = fls(DIV_ROUND_UP(format->width, max_out_width) - 1);
-+	preview_config_averager(prev, format_avg);
-+	preview_config_ycpos(prev, format->code);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Interrupt handling
-+ */
-+
-+static void preview_enable_oneshot(struct isp_prev_device *prev)
-+{
-+	struct isp_device *isp = to_isp_device(prev);
-+
-+	/* The PCR.SOURCE bit is automatically reset to 0 when the PCR.ENABLE
-+	 * bit is set. As the preview engine is used in single-shot mode, we
-+	 * need to set PCR.SOURCE before enabling the preview engine.
-+	 */
-+	if (prev->input == PREVIEW_INPUT_MEMORY)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+			    ISPPRV_PCR_SOURCE);
-+
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
-+		    ISPPRV_PCR_EN | ISPPRV_PCR_ONESHOT);
-+}
-+
-+void omap3isp_preview_isr_frame_sync(struct isp_prev_device *prev)
-+{
-+	/*
-+	 * If ISP_VIDEO_DMAQUEUE_QUEUED is set, DMA queue had an underrun
-+	 * condition, the module was paused and now we have a buffer queued
-+	 * on the output again. Restart the pipeline if running in continuous
-+	 * mode.
-+	 */
-+	if (prev->state == ISP_PIPELINE_STREAM_CONTINUOUS &&
-+	    prev->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED) {
-+		preview_enable_oneshot(prev);
-+		isp_video_dmaqueue_flags_clr(&prev->video_out);
-+	}
-+}
-+
-+static void preview_isr_buffer(struct isp_prev_device *prev)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&prev->subdev.entity);
-+	struct isp_buffer *buffer;
-+	int restart = 0;
-+
-+	if (prev->input == PREVIEW_INPUT_MEMORY) {
-+		buffer = omap3isp_video_buffer_next(&prev->video_in,
-+						    prev->error);
-+		if (buffer != NULL)
-+			preview_set_inaddr(prev, buffer->isp_addr);
-+		pipe->state |= ISP_PIPELINE_IDLE_INPUT;
-+	}
-+
-+	if (prev->output & PREVIEW_OUTPUT_MEMORY) {
-+		buffer = omap3isp_video_buffer_next(&prev->video_out,
-+						    prev->error);
-+		if (buffer != NULL) {
-+			preview_set_outaddr(prev, buffer->isp_addr);
-+			restart = 1;
-+		}
-+		pipe->state |= ISP_PIPELINE_IDLE_OUTPUT;
-+	}
-+
-+	switch (prev->state) {
-+	case ISP_PIPELINE_STREAM_SINGLESHOT:
-+		if (isp_pipeline_ready(pipe))
-+			omap3isp_pipeline_set_stream(pipe,
-+						ISP_PIPELINE_STREAM_SINGLESHOT);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		/* If an underrun occurs, the video queue operation handler will
-+		 * restart the preview engine. Otherwise restart it immediately.
-+		 */
-+		if (restart)
-+			preview_enable_oneshot(prev);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+	default:
-+		return;
-+	}
-+
-+	prev->error = 0;
-+}
-+
-+/*
-+ * omap3isp_preview_isr - ISP preview engine interrupt handler
-+ *
-+ * Manage the preview engine video buffers and configure shadowed registers.
-+ */
-+void omap3isp_preview_isr(struct isp_prev_device *prev)
-+{
-+	unsigned long flags;
-+
-+	if (omap3isp_module_sync_is_stopping(&prev->wait, &prev->stopping))
-+		return;
-+
-+	spin_lock_irqsave(&prev->lock, flags);
-+	if (prev->shadow_update)
-+		goto done;
-+
-+	preview_setup_hw(prev);
-+	preview_config_input_size(prev);
-+
-+done:
-+	spin_unlock_irqrestore(&prev->lock, flags);
-+
-+	if (prev->input == PREVIEW_INPUT_MEMORY ||
-+	    prev->output & PREVIEW_OUTPUT_MEMORY)
-+		preview_isr_buffer(prev);
-+	else if (prev->state == ISP_PIPELINE_STREAM_CONTINUOUS)
-+		preview_enable_oneshot(prev);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP video operations
-+ */
-+
-+static int preview_video_queue(struct isp_video *video,
-+			       struct isp_buffer *buffer)
-+{
-+	struct isp_prev_device *prev = &video->isp->isp_prev;
-+
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
-+		preview_set_inaddr(prev, buffer->isp_addr);
-+
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+		preview_set_outaddr(prev, buffer->isp_addr);
-+
-+	return 0;
-+}
-+
-+static const struct isp_video_operations preview_video_ops = {
-+	.queue = preview_video_queue,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 subdev operations
-+ */
-+
-+/*
-+ * preview_s_ctrl - Handle set control subdev method
-+ * @ctrl: pointer to v4l2 control structure
-+ */
-+static int preview_s_ctrl(struct v4l2_ctrl *ctrl)
-+{
-+	struct isp_prev_device *prev =
-+		container_of(ctrl->handler, struct isp_prev_device, ctrls);
-+
-+	switch (ctrl->id) {
-+	case V4L2_CID_BRIGHTNESS:
-+		preview_update_brightness(prev, ctrl->val);
-+		break;
-+	case V4L2_CID_CONTRAST:
-+		preview_update_contrast(prev, ctrl->val);
-+		break;
-+	}
-+
-+	return 0;
-+}
-+
-+static const struct v4l2_ctrl_ops preview_ctrl_ops = {
-+	.s_ctrl = preview_s_ctrl,
-+};
-+
-+/*
-+ * preview_ioctl - Handle preview module private ioctl's
-+ * @prev: pointer to preview context structure
-+ * @cmd: configuration command
-+ * @arg: configuration argument
-+ * return -EINVAL or zero on success
-+ */
-+static long preview_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
-+{
-+	struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
-+
-+	switch (cmd) {
-+	case VIDIOC_OMAP3ISP_PRV_CFG:
-+		return preview_config(prev, arg);
-+
-+	default:
-+		return -ENOIOCTLCMD;
-+	}
-+}
-+
-+/*
-+ * preview_set_stream - Enable/Disable streaming on preview subdev
-+ * @sd    : pointer to v4l2 subdev structure
-+ * @enable: 1 == Enable, 0 == Disable
-+ * return -EINVAL or zero on sucess
-+ */
-+static int preview_set_stream(struct v4l2_subdev *sd, int enable)
-+{
-+	struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
-+	struct isp_video *video_out = &prev->video_out;
-+	struct isp_device *isp = to_isp_device(prev);
-+	struct device *dev = to_device(prev);
-+	unsigned long flags;
-+
-+	if (prev->state == ISP_PIPELINE_STREAM_STOPPED) {
-+		if (enable == ISP_PIPELINE_STREAM_STOPPED)
-+			return 0;
-+
-+		omap3isp_subclk_enable(isp, OMAP3_ISP_SUBCLK_PREVIEW);
-+		preview_configure(prev);
-+		atomic_set(&prev->stopping, 0);
-+		prev->error = 0;
-+		preview_print_status(prev);
-+	}
-+
-+	switch (enable) {
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		if (prev->output & PREVIEW_OUTPUT_MEMORY)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_PREVIEW_WRITE);
-+
-+		if (video_out->dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED ||
-+		    !(prev->output & PREVIEW_OUTPUT_MEMORY))
-+			preview_enable_oneshot(prev);
-+
-+		isp_video_dmaqueue_flags_clr(video_out);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_SINGLESHOT:
-+		if (prev->input == PREVIEW_INPUT_MEMORY)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_PREVIEW_READ);
-+		if (prev->output & PREVIEW_OUTPUT_MEMORY)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_PREVIEW_WRITE);
-+
-+		preview_enable_oneshot(prev);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+		if (omap3isp_module_sync_idle(&sd->entity, &prev->wait,
-+					      &prev->stopping))
-+			dev_dbg(dev, "%s: stop timeout.\n", sd->name);
-+		spin_lock_irqsave(&prev->lock, flags);
-+		omap3isp_sbl_disable(isp, OMAP3_ISP_SBL_PREVIEW_READ);
-+		omap3isp_sbl_disable(isp, OMAP3_ISP_SBL_PREVIEW_WRITE);
-+		omap3isp_subclk_disable(isp, OMAP3_ISP_SUBCLK_PREVIEW);
-+		spin_unlock_irqrestore(&prev->lock, flags);
-+		isp_video_dmaqueue_flags_clr(video_out);
-+		break;
-+	}
-+
-+	prev->state = enable;
-+	return 0;
-+}
-+
-+static struct v4l2_mbus_framefmt *
-+__preview_get_format(struct isp_prev_device *prev, struct v4l2_subdev_fh *fh,
-+		     unsigned int pad, enum v4l2_subdev_format_whence which)
-+{
-+	if (which == V4L2_SUBDEV_FORMAT_TRY)
-+		return v4l2_subdev_get_try_format(fh, pad);
-+	else
-+		return &prev->formats[pad];
-+}
-+
-+/* previewer format descriptions */
-+static const unsigned int preview_input_fmts[] = {
-+	V4L2_MBUS_FMT_SGRBG10_1X10,
-+	V4L2_MBUS_FMT_SRGGB10_1X10,
-+	V4L2_MBUS_FMT_SBGGR10_1X10,
-+	V4L2_MBUS_FMT_SGBRG10_1X10,
-+};
-+
-+static const unsigned int preview_output_fmts[] = {
-+	V4L2_MBUS_FMT_UYVY8_1X16,
-+	V4L2_MBUS_FMT_YUYV8_1X16,
-+};
-+
-+/*
-+ * preview_try_format - Handle try format by pad subdev method
-+ * @prev: ISP preview device
-+ * @fh : V4L2 subdev file handle
-+ * @pad: pad num
-+ * @fmt: pointer to v4l2 format structure
-+ */
-+static void preview_try_format(struct isp_prev_device *prev,
-+			       struct v4l2_subdev_fh *fh, unsigned int pad,
-+			       struct v4l2_mbus_framefmt *fmt,
-+			       enum v4l2_subdev_format_whence which)
-+{
-+	struct v4l2_mbus_framefmt *format;
-+	unsigned int max_out_width;
-+	enum v4l2_mbus_pixelcode pixelcode;
-+	unsigned int i;
-+
-+	max_out_width = preview_max_out_width(prev);
-+
-+	switch (pad) {
-+	case PREV_PAD_SINK:
-+		/* When reading data from the CCDC, the input size has already
-+		 * been mangled by the CCDC output pad so it can be accepted
-+		 * as-is.
-+		 *
-+		 * When reading data from memory, clamp the requested width and
-+		 * height. The TRM doesn't specify a minimum input height, make
-+		 * sure we got enough lines to enable the noise filter and color
-+		 * filter array interpolation.
-+		 */
-+		if (prev->input == PREVIEW_INPUT_MEMORY) {
-+			fmt->width = clamp_t(u32, fmt->width, PREV_MIN_WIDTH,
-+					     max_out_width * 8);
-+			fmt->height = clamp_t(u32, fmt->height, PREV_MIN_HEIGHT,
-+					      PREV_MAX_HEIGHT);
-+		}
-+
-+		fmt->colorspace = V4L2_COLORSPACE_SRGB;
-+
-+		for (i = 0; i < ARRAY_SIZE(preview_input_fmts); i++) {
-+			if (fmt->code == preview_input_fmts[i])
-+				break;
-+		}
-+
-+		/* If not found, use SGRBG10 as default */
-+		if (i >= ARRAY_SIZE(preview_input_fmts))
-+			fmt->code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+		break;
-+
-+	case PREV_PAD_SOURCE:
-+		pixelcode = fmt->code;
-+		format = __preview_get_format(prev, fh, PREV_PAD_SINK, which);
-+		memcpy(fmt, format, sizeof(*fmt));
-+
-+		/* The preview module output size is configurable through the
-+		 * input interface (horizontal and vertical cropping) and the
-+		 * averager (horizontal scaling by 1/1, 1/2, 1/4 or 1/8). In
-+		 * spite of this, hardcode the output size to the biggest
-+		 * possible value for simplicity reasons.
-+		 */
-+		switch (pixelcode) {
-+		case V4L2_MBUS_FMT_YUYV8_1X16:
-+		case V4L2_MBUS_FMT_UYVY8_1X16:
-+			fmt->code = pixelcode;
-+			break;
-+
-+		default:
-+			fmt->code = V4L2_MBUS_FMT_YUYV8_1X16;
-+			break;
-+		}
-+
-+		/* The TRM states (12.1.4.7.1.2) that 2 pixels must be cropped
-+		 * from the left and right sides when the input source is the
-+		 * CCDC. This seems not to be needed in practice, investigation
-+		 * is required.
-+		 */
-+		if (prev->input == PREVIEW_INPUT_CCDC)
-+			fmt->width -= 4;
-+
-+		/* The preview module can output a maximum of 3312 pixels
-+		 * horizontally due to fixed memory-line sizes. Compute the
-+		 * horizontal averaging factor accordingly. Note that the limit
-+		 * applies to the noise filter and CFA interpolation blocks, so
-+		 * it doesn't take cropping by further blocks into account.
-+		 *
-+		 * ES 1.0 hardware revision is limited to 1280 pixels
-+		 * horizontally.
-+		 */
-+		fmt->width >>= fls(DIV_ROUND_UP(fmt->width, max_out_width) - 1);
-+
-+		/* Assume that all blocks are enabled and crop pixels and lines
-+		 * accordingly. See preview_config_input_size() for more
-+		 * information.
-+		 */
-+		fmt->width -= 14;
-+		fmt->height -= 8;
-+
-+		fmt->colorspace = V4L2_COLORSPACE_JPEG;
-+		break;
-+	}
-+
-+	fmt->field = V4L2_FIELD_NONE;
-+}
-+
-+/*
-+ * preview_enum_mbus_code - Handle pixel format enumeration
-+ * @sd     : pointer to v4l2 subdev structure
-+ * @fh     : V4L2 subdev file handle
-+ * @code   : pointer to v4l2_subdev_mbus_code_enum structure
-+ * return -EINVAL or zero on success
-+ */
-+static int preview_enum_mbus_code(struct v4l2_subdev *sd,
-+				  struct v4l2_subdev_fh *fh,
-+				  struct v4l2_subdev_mbus_code_enum *code)
-+{
-+	switch (code->pad) {
-+	case PREV_PAD_SINK:
-+		if (code->index >= ARRAY_SIZE(preview_input_fmts))
-+			return -EINVAL;
-+
-+		code->code = preview_input_fmts[code->index];
-+		break;
-+	case PREV_PAD_SOURCE:
-+		if (code->index >= ARRAY_SIZE(preview_output_fmts))
-+			return -EINVAL;
-+
-+		code->code = preview_output_fmts[code->index];
-+		break;
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+static int preview_enum_frame_size(struct v4l2_subdev *sd,
-+				   struct v4l2_subdev_fh *fh,
-+				   struct v4l2_subdev_frame_size_enum *fse)
-+{
-+	struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt format;
-+
-+	if (fse->index != 0)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = 1;
-+	format.height = 1;
-+	preview_try_format(prev, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->min_width = format.width;
-+	fse->min_height = format.height;
-+
-+	if (format.code != fse->code)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = -1;
-+	format.height = -1;
-+	preview_try_format(prev, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->max_width = format.width;
-+	fse->max_height = format.height;
-+
-+	return 0;
-+}
-+
-+/*
-+ * preview_get_format - Handle get format by pads subdev method
-+ * @sd : pointer to v4l2 subdev structure
-+ * @fh : V4L2 subdev file handle
-+ * @fmt: pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on sucess
-+ */
-+static int preview_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __preview_get_format(prev, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	fmt->format = *format;
-+	return 0;
-+}
-+
-+/*
-+ * preview_set_format - Handle set format by pads subdev method
-+ * @sd : pointer to v4l2 subdev structure
-+ * @fh : V4L2 subdev file handle
-+ * @fmt: pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on success
-+ */
-+static int preview_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __preview_get_format(prev, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	preview_try_format(prev, fh, fmt->pad, &fmt->format, fmt->which);
-+	*format = fmt->format;
-+
-+	/* Propagate the format from sink to source */
-+	if (fmt->pad == PREV_PAD_SINK) {
-+		format = __preview_get_format(prev, fh, PREV_PAD_SOURCE,
-+					      fmt->which);
-+		*format = fmt->format;
-+		preview_try_format(prev, fh, PREV_PAD_SOURCE, format,
-+				   fmt->which);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * preview_init_formats - Initialize formats on all pads
-+ * @sd: ISP preview V4L2 subdevice
-+ * @fh: V4L2 subdev file handle
-+ *
-+ * Initialize all pad formats with default values. If fh is not NULL, try
-+ * formats are initialized on the file handle. Otherwise active formats are
-+ * initialized on the device.
-+ */
-+static int preview_init_formats(struct v4l2_subdev *sd,
-+				struct v4l2_subdev_fh *fh)
-+{
-+	struct v4l2_subdev_format format;
-+
-+	memset(&format, 0, sizeof(format));
-+	format.pad = PREV_PAD_SINK;
-+	format.which = fh ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
-+	format.format.code = V4L2_MBUS_FMT_SGRBG10_1X10;
-+	format.format.width = 4096;
-+	format.format.height = 4096;
-+	preview_set_format(sd, fh, &format);
-+
-+	return 0;
-+}
-+
-+/* subdev core operations */
-+static const struct v4l2_subdev_core_ops preview_v4l2_core_ops = {
-+	.queryctrl = v4l2_subdev_queryctrl,
-+	.querymenu = v4l2_subdev_querymenu,
-+	.g_ctrl = v4l2_subdev_g_ctrl,
-+	.s_ctrl = v4l2_subdev_s_ctrl,
-+	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
-+	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
-+	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
-+	.ioctl = preview_ioctl,
-+};
-+
-+/* subdev file operations */
-+static const struct v4l2_subdev_file_ops preview_v4l2_file_ops = {
-+	.open = preview_init_formats,
-+};
-+
-+/* subdev video operations */
-+static const struct v4l2_subdev_video_ops preview_v4l2_video_ops = {
-+	.s_stream = preview_set_stream,
-+};
-+
-+/* subdev pad operations */
-+static const struct v4l2_subdev_pad_ops preview_v4l2_pad_ops = {
-+	.enum_mbus_code = preview_enum_mbus_code,
-+	.enum_frame_size = preview_enum_frame_size,
-+	.get_fmt = preview_get_format,
-+	.set_fmt = preview_set_format,
-+};
-+
-+/* subdev operations */
-+static const struct v4l2_subdev_ops preview_v4l2_ops = {
-+	.core = &preview_v4l2_core_ops,
-+	.file = &preview_v4l2_file_ops,
-+	.video = &preview_v4l2_video_ops,
-+	.pad = &preview_v4l2_pad_ops,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * Media entity operations
-+ */
-+
-+/*
-+ * preview_link_setup - Setup previewer connections.
-+ * @entity : Pointer to media entity structure
-+ * @local  : Pointer to local pad array
-+ * @remote : Pointer to remote pad array
-+ * @flags  : Link flags
-+ * return -EINVAL or zero on success
-+ */
-+static int preview_link_setup(struct media_entity *entity,
-+			      const struct media_pad *local,
-+			      const struct media_pad *remote, u32 flags)
-+{
-+	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
-+	struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
-+
-+	switch (local->index | media_entity_type(remote->entity)) {
-+	case PREV_PAD_SINK | MEDIA_ENT_T_DEVNODE:
-+		/* read from memory */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (prev->input == PREVIEW_INPUT_CCDC)
-+				return -EBUSY;
-+			prev->input = PREVIEW_INPUT_MEMORY;
-+		} else {
-+			if (prev->input == PREVIEW_INPUT_MEMORY)
-+				prev->input = PREVIEW_INPUT_NONE;
-+		}
-+		break;
-+
-+	case PREV_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* read from ccdc */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (prev->input == PREVIEW_INPUT_MEMORY)
-+				return -EBUSY;
-+			prev->input = PREVIEW_INPUT_CCDC;
-+		} else {
-+			if (prev->input == PREVIEW_INPUT_CCDC)
-+				prev->input = PREVIEW_INPUT_NONE;
-+		}
-+		break;
-+
-+	/*
-+	 * The ISP core doesn't support pipelines with multiple video outputs.
-+	 * Revisit this when it will be implemented, and return -EBUSY for now.
-+	 */
-+
-+	case PREV_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
-+		/* write to memory */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (prev->output & ~PREVIEW_OUTPUT_MEMORY)
-+				return -EBUSY;
-+			prev->output |= PREVIEW_OUTPUT_MEMORY;
-+		} else {
-+			prev->output &= ~PREVIEW_OUTPUT_MEMORY;
-+		}
-+		break;
-+
-+	case PREV_PAD_SOURCE | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* write to resizer */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (prev->output & ~PREVIEW_OUTPUT_RESIZER)
-+				return -EBUSY;
-+			prev->output |= PREVIEW_OUTPUT_RESIZER;
-+		} else {
-+			prev->output &= ~PREVIEW_OUTPUT_RESIZER;
-+		}
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+/* media operations */
-+static const struct media_entity_operations preview_media_ops = {
-+	.link_setup = preview_link_setup,
-+};
-+
-+/*
-+ * review_init_entities - Initialize subdev and media entity.
-+ * @prev : Pointer to preview structure
-+ * return -ENOMEM or zero on success
-+ */
-+static int preview_init_entities(struct isp_prev_device *prev)
-+{
-+	struct v4l2_subdev *sd = &prev->subdev;
-+	struct media_pad *pads = prev->pads;
-+	struct media_entity *me = &sd->entity;
-+	int ret;
-+
-+	prev->input = PREVIEW_INPUT_NONE;
-+
-+	v4l2_subdev_init(sd, &preview_v4l2_ops);
-+	strlcpy(sd->name, "OMAP3 ISP preview", sizeof(sd->name));
-+	sd->grp_id = 1 << 16;	/* group ID for isp subdevs */
-+	v4l2_set_subdevdata(sd, prev);
-+	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
-+
-+	v4l2_ctrl_handler_init(&prev->ctrls, 3);
-+	v4l2_ctrl_new_std(&prev->ctrls, &preview_ctrl_ops, V4L2_CID_BRIGHTNESS,
-+			  ISPPRV_BRIGHT_LOW, ISPPRV_BRIGHT_HIGH,
-+			  ISPPRV_BRIGHT_STEP, ISPPRV_BRIGHT_DEF);
-+	v4l2_ctrl_new_std(&prev->ctrls, &preview_ctrl_ops, V4L2_CID_CONTRAST,
-+			  ISPPRV_CONTRAST_LOW, ISPPRV_CONTRAST_HIGH,
-+			  ISPPRV_CONTRAST_STEP, ISPPRV_CONTRAST_DEF);
-+	v4l2_ctrl_handler_setup(&prev->ctrls);
-+	sd->ctrl_handler = &prev->ctrls;
-+
-+	pads[PREV_PAD_SINK].flags = MEDIA_PAD_FL_INPUT;
-+	pads[PREV_PAD_SOURCE].flags = MEDIA_PAD_FL_OUTPUT;
-+
-+	me->ops = &preview_media_ops;
-+	ret = media_entity_init(me, PREV_PADS_NUM, pads, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	preview_init_formats(sd, NULL);
-+
-+	/* According to the OMAP34xx TRM, video buffers need to be aligned on a
-+	 * 32 bytes boundary. However, an undocumented hardware bug requires a
-+	 * 64 bytes boundary at the preview engine input.
-+	 */
-+	prev->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-+	prev->video_in.ops = &preview_video_ops;
-+	prev->video_in.isp = to_isp_device(prev);
-+	prev->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3;
-+	prev->video_in.bpl_alignment = 64;
-+	prev->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+	prev->video_out.ops = &preview_video_ops;
-+	prev->video_out.isp = to_isp_device(prev);
-+	prev->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3;
-+	prev->video_out.bpl_alignment = 32;
-+
-+	ret = omap3isp_video_init(&prev->video_in, "preview");
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = omap3isp_video_init(&prev->video_out, "preview");
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Connect the video nodes to the previewer subdev. */
-+	ret = media_entity_create_link(&prev->video_in.video.entity, 0,
-+			&prev->subdev.entity, PREV_PAD_SINK, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = media_entity_create_link(&prev->subdev.entity, PREV_PAD_SOURCE,
-+			&prev->video_out.video.entity, 0, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+void omap3isp_preview_unregister_entities(struct isp_prev_device *prev)
-+{
-+	media_entity_cleanup(&prev->subdev.entity);
-+
-+	v4l2_device_unregister_subdev(&prev->subdev);
-+	v4l2_ctrl_handler_free(&prev->ctrls);
-+	omap3isp_video_unregister(&prev->video_in);
-+	omap3isp_video_unregister(&prev->video_out);
-+}
-+
-+int omap3isp_preview_register_entities(struct isp_prev_device *prev,
-+	struct v4l2_device *vdev)
-+{
-+	int ret;
-+
-+	/* Register the subdev and video nodes. */
-+	ret = v4l2_device_register_subdev(vdev, &prev->subdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&prev->video_in, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&prev->video_out, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	return 0;
-+
-+error:
-+	omap3isp_preview_unregister_entities(prev);
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP previewer initialisation and cleanup
-+ */
-+
-+void omap3isp_preview_cleanup(struct isp_device *isp)
-+{
-+}
-+
-+/*
-+ * isp_preview_init - Previewer initialization.
-+ * @dev : Pointer to ISP device
-+ * return -ENOMEM or zero on success
-+ */
-+int omap3isp_preview_init(struct isp_device *isp)
-+{
-+	struct isp_prev_device *prev = &isp->isp_prev;
-+	int ret;
-+
-+	spin_lock_init(&prev->lock);
-+	init_waitqueue_head(&prev->wait);
-+	preview_init_params(prev);
-+
-+	ret = preview_init_entities(prev);
-+	if (ret < 0)
-+		goto out;
-+
-+out:
-+	if (ret)
-+		omap3isp_preview_cleanup(isp);
-+
-+	return ret;
-+}
-diff --git a/drivers/media/video/isp/isppreview.h b/drivers/media/video/isp/isppreview.h
-new file mode 100644
-index 0000000..e20c7c6
---- /dev/null
-+++ b/drivers/media/video/isp/isppreview.h
-@@ -0,0 +1,214 @@
-+/*
-+ * isppreview.h
-+ *
-+ * TI OMAP3 ISP - Preview module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_PREVIEW_H
-+#define OMAP3_ISP_PREVIEW_H
-+
-+#include <linux/omap3isp.h>
-+#include <linux/types.h>
-+#include <media/v4l2-ctrls.h>
-+
-+#include "ispvideo.h"
-+
-+#define ISPPRV_BRIGHT_STEP		0x1
-+#define ISPPRV_BRIGHT_DEF		0x0
-+#define ISPPRV_BRIGHT_LOW		0x0
-+#define ISPPRV_BRIGHT_HIGH		0xFF
-+#define ISPPRV_BRIGHT_UNITS		0x1
-+
-+#define ISPPRV_CONTRAST_STEP		0x1
-+#define ISPPRV_CONTRAST_DEF		0x10
-+#define ISPPRV_CONTRAST_LOW		0x0
-+#define ISPPRV_CONTRAST_HIGH		0xFF
-+#define ISPPRV_CONTRAST_UNITS		0x1
-+
-+#define NO_AVE				0x0
-+#define AVE_2_PIX			0x1
-+#define AVE_4_PIX			0x2
-+#define AVE_8_PIX			0x3
-+
-+/* Features list */
-+#define PREV_LUMA_ENHANCE		OMAP3ISP_PREV_LUMAENH
-+#define PREV_INVERSE_ALAW		OMAP3ISP_PREV_INVALAW
-+#define PREV_HORZ_MEDIAN_FILTER		OMAP3ISP_PREV_HRZ_MED
-+#define PREV_CFA			OMAP3ISP_PREV_CFA
-+#define PREV_CHROMA_SUPPRESS		OMAP3ISP_PREV_CHROMA_SUPP
-+#define PREV_WB				OMAP3ISP_PREV_WB
-+#define PREV_BLKADJ			OMAP3ISP_PREV_BLKADJ
-+#define PREV_RGB2RGB			OMAP3ISP_PREV_RGB2RGB
-+#define PREV_COLOR_CONV			OMAP3ISP_PREV_COLOR_CONV
-+#define PREV_YCLIMITS			OMAP3ISP_PREV_YC_LIMIT
-+#define PREV_DEFECT_COR			OMAP3ISP_PREV_DEFECT_COR
-+#define PREV_GAMMA_BYPASS		OMAP3ISP_PREV_GAMMABYPASS
-+#define PREV_DARK_FRAME_CAPTURE		OMAP3ISP_PREV_DRK_FRM_CAPTURE
-+#define PREV_DARK_FRAME_SUBTRACT	OMAP3ISP_PREV_DRK_FRM_SUBTRACT
-+#define PREV_LENS_SHADING		OMAP3ISP_PREV_LENS_SHADING
-+#define PREV_NOISE_FILTER		OMAP3ISP_PREV_NF
-+#define PREV_GAMMA			OMAP3ISP_PREV_GAMMA
-+
-+#define PREV_CONTRAST			(1 << 17)
-+#define PREV_BRIGHTNESS			(1 << 18)
-+#define PREV_AVERAGER			(1 << 19)
-+#define PREV_FEATURES_END		(1 << 20)
-+
-+enum preview_input_entity {
-+	PREVIEW_INPUT_NONE,
-+	PREVIEW_INPUT_CCDC,
-+	PREVIEW_INPUT_MEMORY,
-+};
-+
-+#define PREVIEW_OUTPUT_RESIZER		(1 << 1)
-+#define PREVIEW_OUTPUT_MEMORY		(1 << 2)
-+
-+/* Configure byte layout of YUV image */
-+enum preview_ycpos_mode {
-+	YCPOS_YCrYCb = 0,
-+	YCPOS_YCbYCr = 1,
-+	YCPOS_CbYCrY = 2,
-+	YCPOS_CrYCbY = 3
-+};
-+
-+/*
-+ * struct prev_params - Structure for all configuration
-+ * @features: Set of features enabled.
-+ * @cfa: CFA coefficients.
-+ * @csup: Chroma suppression coefficients.
-+ * @luma: Luma enhancement coefficients.
-+ * @nf: Noise filter coefficients.
-+ * @dcor: Noise filter coefficients.
-+ * @gamma: Gamma coefficients.
-+ * @wbal: White Balance parameters.
-+ * @blk_adj: Black adjustment parameters.
-+ * @rgb2rgb: RGB blending parameters.
-+ * @rgb2ycbcr: RGB to ycbcr parameters.
-+ * @hmed: Horizontal median filter.
-+ * @yclimit: YC limits parameters.
-+ * @average: Downsampling rate for averager.
-+ * @contrast: Contrast.
-+ * @brightness: Brightness.
-+ */
-+struct prev_params {
-+	u32 features;
-+	struct omap3isp_prev_cfa cfa;
-+	struct omap3isp_prev_csup csup;
-+	struct omap3isp_prev_luma luma;
-+	struct omap3isp_prev_nf nf;
-+	struct omap3isp_prev_dcor dcor;
-+	struct omap3isp_prev_gtables gamma;
-+	struct omap3isp_prev_wbal wbal;
-+	struct omap3isp_prev_blkadj blk_adj;
-+	struct omap3isp_prev_rgbtorgb rgb2rgb;
-+	struct omap3isp_prev_csc rgb2ycbcr;
-+	struct omap3isp_prev_hmed hmed;
-+	struct omap3isp_prev_yclimit yclimit;
-+	u8 average;
-+	u8 contrast;
-+	u8 brightness;
-+};
-+
-+/*
-+ * struct isptables_update - Structure for Table Configuration.
-+ * @update: Specifies which tables should be updated.
-+ * @flag: Specifies which tables should be enabled.
-+ * @nf: Pointer to structure for Noise Filter
-+ * @lsc: Pointer to LSC gain table. (currently not used)
-+ * @gamma: Pointer to gamma correction tables.
-+ * @cfa: Pointer to color filter array configuration.
-+ * @wbal: Pointer to colour and digital gain configuration.
-+ */
-+struct isptables_update {
-+	u32 update;
-+	u32 flag;
-+	struct omap3isp_prev_nf *nf;
-+	u32 *lsc;
-+	struct omap3isp_prev_gtables *gamma;
-+	struct omap3isp_prev_cfa *cfa;
-+	struct omap3isp_prev_wbal *wbal;
-+};
-+
-+/* Sink and source previewer pads */
-+#define PREV_PAD_SINK			0
-+#define PREV_PAD_SOURCE			1
-+#define PREV_PADS_NUM			2
-+
-+/*
-+ * struct isp_prev_device - Structure for storing ISP Preview module information
-+ * @subdev: V4L2 subdevice
-+ * @pads: Media entity pads
-+ * @formats: Active formats at the subdev pad
-+ * @input: Module currently connected to the input pad
-+ * @output: Bitmask of the active output
-+ * @video_in: Input video entity
-+ * @video_out: Output video entity
-+ * @error: A hardware error occured during capture
-+ * @params: Module configuration data
-+ * @shadow_update: If set, update the hardware configured in the next interrupt
-+ * @underrun: Whether the preview entity has queued buffers on the output
-+ * @state: Current preview pipeline state
-+ * @lock: Shadow update lock
-+ * @update: Bitmask of the parameters to be updated
-+ *
-+ * This structure is used to store the OMAP ISP Preview module Information.
-+ */
-+struct isp_prev_device {
-+	struct v4l2_subdev subdev;
-+	struct media_pad pads[PREV_PADS_NUM];
-+	struct v4l2_mbus_framefmt formats[PREV_PADS_NUM];
-+
-+	struct v4l2_ctrl_handler ctrls;
-+
-+	enum preview_input_entity input;
-+	unsigned int output;
-+	struct isp_video video_in;
-+	struct isp_video video_out;
-+	unsigned int error;
-+
-+	struct prev_params params;
-+	unsigned int shadow_update:1;
-+	enum isp_pipeline_stream_state state;
-+	wait_queue_head_t wait;
-+	atomic_t stopping;
-+	spinlock_t lock;
-+	u32 update;
-+};
-+
-+struct isp_device;
-+
-+int omap3isp_preview_init(struct isp_device *isp);
-+void omap3isp_preview_cleanup(struct isp_device *isp);
-+
-+int omap3isp_preview_register_entities(struct isp_prev_device *prv,
-+				       struct v4l2_device *vdev);
-+void omap3isp_preview_unregister_entities(struct isp_prev_device *prv);
-+
-+void omap3isp_preview_isr_frame_sync(struct isp_prev_device *prev);
-+void omap3isp_preview_isr(struct isp_prev_device *prev);
-+
-+int omap3isp_preview_busy(struct isp_prev_device *isp_prev);
-+
-+void omap3isp_preview_restore_context(struct isp_device *isp);
-+
-+#endif	/* OMAP3_ISP_PREVIEW_H */
-diff --git a/drivers/media/video/isp/ispqueue.c b/drivers/media/video/isp/ispqueue.c
-new file mode 100644
-index 0000000..af78c19
---- /dev/null
-+++ b/drivers/media/video/isp/ispqueue.c
-@@ -0,0 +1,1136 @@
-+/*
-+ * ispqueue.c
-+ *
-+ * TI OMAP3 ISP - Video buffers queue handling
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 <asm/cacheflush.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/mm.h>
-+#include <linux/pagemap.h>
-+#include <linux/poll.h>
-+#include <linux/scatterlist.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+
-+#include "ispqueue.h"
-+
-+/* -----------------------------------------------------------------------------
-+ * Video buffers management
-+ */
-+
-+/*
-+ * isp_video_buffer_cache_sync - Keep the buffers coherent between CPU and ISP
-+ *
-+ * The typical operation required here is Cache Invalidation across
-+ * the (user space) buffer address range. And this _must_ be done
-+ * at QBUF stage (and *only* at QBUF).
-+ *
-+ * We try to use optimal cache invalidation function:
-+ * - dmac_map_area:
-+ *    - used when the number of pages are _low_.
-+ *    - it becomes quite slow as the number of pages increase.
-+ *       - for 648x492 viewfinder (150 pages) it takes 1.3 ms.
-+ *       - for 5 Mpix buffer (2491 pages) it takes between 25-50 ms.
-+ *
-+ * - flush_cache_all:
-+ *    - used when the number of pages are _high_.
-+ *    - time taken in the range of 500-900 us.
-+ *    - has a higher penalty but, as whole dcache + icache is invalidated
-+ */
-+/*
-+ * FIXME: dmac_inv_range crashes randomly on the user space buffer
-+ *        address. Fall back to flush_cache_all for now.
-+ */
-+#define ISP_CACHE_FLUSH_PAGES_MAX       0
-+
-+static void isp_video_buffer_cache_sync(struct isp_video_buffer *buf)
-+{
-+	if (buf->vbuf.m.userptr == 0 || buf->npages == 0 ||
-+	    buf->npages > ISP_CACHE_FLUSH_PAGES_MAX)
-+		flush_cache_all();
-+	else {
-+		dmac_map_area((void *)buf->vbuf.m.userptr, buf->vbuf.length,
-+			      DMA_FROM_DEVICE);
-+		outer_inv_range(buf->vbuf.m.userptr,
-+				buf->vbuf.m.userptr + buf->vbuf.length);
-+	}
-+}
-+
-+/*
-+ * isp_video_buffer_lock_vma - Prevent VMAs from being unmapped
-+ *
-+ * Lock the VMAs underlying the given buffer into memory. This avoids the
-+ * userspace buffer mapping from being swapped out, making VIPT cache handling
-+ * easier.
-+ *
-+ * Note that the pages will not be freed as the buffers have been locked to
-+ * memory using by a call to get_user_pages(), but the userspace mapping could
-+ * still disappear if the VMAs are not locked. This is caused by the memory
-+ * management code trying to be as lock-less as possible, which results in the
-+ * userspace mapping manager not finding out that the pages are locked under
-+ * some conditions.
-+ */
-+static int isp_video_buffer_lock_vma(struct isp_video_buffer *buf, int lock)
-+{
-+	struct vm_area_struct *vma;
-+	unsigned long start;
-+	unsigned long end;
-+	int ret = 0;
-+
-+	if (buf->vbuf.memory == V4L2_MEMORY_MMAP)
-+		return 0;
-+
-+	/* We can be called from workqueue context if the current task dies to
-+	 * unlock the VMAs. In that case there's no current memory management
-+	 * context so unlocking can't be performed, but the VMAs have been or
-+	 * are getting destroyed anyway so it doesn't really matter.
-+	 */
-+	if (!current || !current->mm)
-+		return lock ? -EINVAL : 0;
-+
-+	start = buf->vbuf.m.userptr;
-+	end = buf->vbuf.m.userptr + buf->vbuf.length - 1;
-+
-+	down_write(&current->mm->mmap_sem);
-+	spin_lock(&current->mm->page_table_lock);
-+
-+	do {
-+		vma = find_vma(current->mm, start);
-+		if (vma == NULL) {
-+			ret = -EFAULT;
-+			goto out;
-+		}
-+
-+		if (lock)
-+			vma->vm_flags |= VM_LOCKED;
-+		else
-+			vma->vm_flags &= ~VM_LOCKED;
-+
-+		start = vma->vm_end + 1;
-+	} while (vma->vm_end < end);
-+
-+	if (lock)
-+		buf->vm_flags |= VM_LOCKED;
-+	else
-+		buf->vm_flags &= ~VM_LOCKED;
-+
-+out:
-+	spin_unlock(&current->mm->page_table_lock);
-+	up_write(&current->mm->mmap_sem);
-+	return ret;
-+}
-+
-+/*
-+ * isp_video_buffer_sglist_kernel - Build a scatter list for a vmalloc'ed buffer
-+ *
-+ * Iterate over the vmalloc'ed area and create a scatter list entry for every
-+ * page.
-+ */
-+static int isp_video_buffer_sglist_kernel(struct isp_video_buffer *buf)
-+{
-+	struct scatterlist *sglist;
-+	unsigned int npages;
-+	unsigned int i;
-+	void *addr;
-+
-+	addr = buf->vaddr;
-+	npages = PAGE_ALIGN(buf->vbuf.length) >> PAGE_SHIFT;
-+
-+	sglist = vmalloc(npages * sizeof(*sglist));
-+	if (sglist == NULL)
-+		return -ENOMEM;
-+
-+	sg_init_table(sglist, npages);
-+
-+	for (i = 0; i < npages; ++i, addr += PAGE_SIZE) {
-+		struct page *page = vmalloc_to_page(addr);
-+
-+		if (page == NULL || PageHighMem(page)) {
-+			vfree(sglist);
-+			return -EINVAL;
-+		}
-+
-+		sg_set_page(&sglist[i], page, PAGE_SIZE, 0);
-+	}
-+
-+	buf->sglen = npages;
-+	buf->sglist = sglist;
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_video_buffer_sglist_user - Build a scatter list for a userspace buffer
-+ *
-+ * Walk the buffer pages list and create a 1:1 mapping to a scatter list.
-+ */
-+static int isp_video_buffer_sglist_user(struct isp_video_buffer *buf)
-+{
-+	struct scatterlist *sglist;
-+	unsigned int offset = buf->offset;
-+	unsigned int i;
-+
-+	sglist = vmalloc(buf->npages * sizeof(*sglist));
-+	if (sglist == NULL)
-+		return -ENOMEM;
-+
-+	sg_init_table(sglist, buf->npages);
-+
-+	for (i = 0; i < buf->npages; ++i) {
-+		if (PageHighMem(buf->pages[i])) {
-+			vfree(sglist);
-+			return -EINVAL;
-+		}
-+
-+		sg_set_page(&sglist[i], buf->pages[i], PAGE_SIZE - offset,
-+			    offset);
-+		offset = 0;
-+	}
-+
-+	buf->sglen = buf->npages;
-+	buf->sglist = sglist;
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_video_buffer_sglist_pfnmap - Build a scatter list for a VM_PFNMAP buffer
-+ *
-+ * Create a scatter list of physically contiguous pages starting at the buffer
-+ * memory physical address.
-+ */
-+static int isp_video_buffer_sglist_pfnmap(struct isp_video_buffer *buf)
-+{
-+	struct scatterlist *sglist;
-+	unsigned int offset = buf->offset;
-+	unsigned long pfn = buf->paddr >> PAGE_SHIFT;
-+	unsigned int i;
-+
-+	sglist = vmalloc(buf->npages * sizeof(*sglist));
-+	if (sglist == NULL)
-+		return -ENOMEM;
-+
-+	sg_init_table(sglist, buf->npages);
-+
-+	for (i = 0; i < buf->npages; ++i, ++pfn) {
-+		sg_set_page(&sglist[i], pfn_to_page(pfn), PAGE_SIZE - offset,
-+			    offset);
-+		/* PFNMAP buffers will not get DMA-mapped, set the DMA address
-+		 * manually.
-+		 */
-+		sg_dma_address(&sglist[i]) = (pfn << PAGE_SHIFT) + offset;
-+		offset = 0;
-+	}
-+
-+	buf->sglen = buf->npages;
-+	buf->sglist = sglist;
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_video_buffer_cleanup - Release pages for a userspace VMA.
-+ *
-+ * Release pages locked by a call isp_video_buffer_prepare_user and free the
-+ * pages table.
-+ */
-+static void isp_video_buffer_cleanup(struct isp_video_buffer *buf)
-+{
-+	enum dma_data_direction direction;
-+	unsigned int i;
-+
-+	if (buf->queue->ops->buffer_cleanup)
-+		buf->queue->ops->buffer_cleanup(buf);
-+
-+	if (!(buf->vm_flags & VM_PFNMAP)) {
-+		direction = buf->vbuf.type == V4L2_BUF_TYPE_VIDEO_CAPTURE
-+			  ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
-+		dma_unmap_sg(buf->queue->dev, buf->sglist, buf->sglen,
-+			     direction);
-+	}
-+
-+	vfree(buf->sglist);
-+	buf->sglist = NULL;
-+	buf->sglen = 0;
-+
-+	if (buf->pages != NULL) {
-+		isp_video_buffer_lock_vma(buf, 0);
-+
-+		for (i = 0; i < buf->npages; ++i)
-+			page_cache_release(buf->pages[i]);
-+
-+		vfree(buf->pages);
-+		buf->pages = NULL;
-+	}
-+
-+	buf->npages = 0;
-+}
-+
-+/*
-+ * isp_video_buffer_prepare_user - Pin userspace VMA pages to memory.
-+ *
-+ * This function creates a list of pages for a userspace VMA. The number of
-+ * pages is first computed based on the buffer size, and pages are then
-+ * retrieved by a call to get_user_pages.
-+ *
-+ * Pages are pinned to memory by get_user_pages, making them available for DMA
-+ * transfers. However, due to memory management optimization, it seems the
-+ * get_user_pages doesn't guarantee that the pinned pages will not be written
-+ * to swap and removed from the userspace mapping(s). When this happens, a page
-+ * fault can be generated when accessing those unmapped pages.
-+ *
-+ * If the fault is triggered by a page table walk caused by VIPT cache
-+ * management operations, the page fault handler might oops if the MM semaphore
-+ * is held, as it can't handle kernel page faults in that case. To fix that, a
-+ * fixup entry needs to be added to the cache management code, or the userspace
-+ * VMA must be locked to avoid removing pages from the userspace mapping in the
-+ * first place.
-+ *
-+ * If the number of pages retrieved is smaller than the number required by the
-+ * buffer size, the function returns -EFAULT.
-+ */
-+static int isp_video_buffer_prepare_user(struct isp_video_buffer *buf)
-+{
-+	unsigned long data;
-+	unsigned int first;
-+	unsigned int last;
-+	int ret;
-+
-+	data = buf->vbuf.m.userptr;
-+	first = (data & PAGE_MASK) >> PAGE_SHIFT;
-+	last = ((data + buf->vbuf.length - 1) & PAGE_MASK) >> PAGE_SHIFT;
-+
-+	buf->offset = data & ~PAGE_MASK;
-+	buf->npages = last - first + 1;
-+	buf->pages = vmalloc(buf->npages * sizeof(buf->pages[0]));
-+	if (buf->pages == NULL)
-+		return -ENOMEM;
-+
-+	down_read(&current->mm->mmap_sem);
-+	ret = get_user_pages(current, current->mm, data & PAGE_MASK,
-+			     buf->npages,
-+			     buf->vbuf.type == V4L2_BUF_TYPE_VIDEO_CAPTURE, 0,
-+			     buf->pages, NULL);
-+	up_read(&current->mm->mmap_sem);
-+
-+	if (ret != buf->npages) {
-+		buf->npages = ret;
-+		isp_video_buffer_cleanup(buf);
-+		return -EFAULT;
-+	}
-+
-+	ret = isp_video_buffer_lock_vma(buf, 1);
-+	if (ret < 0)
-+		isp_video_buffer_cleanup(buf);
-+
-+	return ret;
-+}
-+
-+/*
-+ * isp_video_buffer_prepare_pfnmap - Validate a VM_PFNMAP userspace buffer
-+ *
-+ * Userspace VM_PFNMAP buffers are supported only if they are contiguous in
-+ * memory and if they span a single VMA.
-+ *
-+ * Return 0 if the buffer is valid, or -EFAULT otherwise.
-+ */
-+static int isp_video_buffer_prepare_pfnmap(struct isp_video_buffer *buf)
-+{
-+	struct vm_area_struct *vma;
-+	unsigned long prev_pfn;
-+	unsigned long this_pfn;
-+	unsigned long start;
-+	unsigned long end;
-+	dma_addr_t pa;
-+	int ret = -EFAULT;
-+
-+	start = buf->vbuf.m.userptr;
-+	end = buf->vbuf.m.userptr + buf->vbuf.length - 1;
-+
-+	buf->offset = start & ~PAGE_MASK;
-+	buf->npages = (end >> PAGE_SHIFT) - (start >> PAGE_SHIFT) + 1;
-+	buf->pages = NULL;
-+
-+	down_read(&current->mm->mmap_sem);
-+	vma = find_vma(current->mm, start);
-+	if (vma == NULL || vma->vm_end < end)
-+		goto done;
-+
-+	for (prev_pfn = 0; start <= end; start += PAGE_SIZE) {
-+		ret = follow_pfn(vma, start, &this_pfn);
-+		if (ret)
-+			goto done;
-+
-+		if (prev_pfn == 0)
-+			pa = this_pfn << PAGE_SHIFT;
-+		else if (this_pfn != prev_pfn + 1) {
-+			ret = -EFAULT;
-+			goto done;
-+		}
-+
-+		prev_pfn = this_pfn;
-+	}
-+
-+	buf->paddr = pa + buf->offset;
-+	ret = 0;
-+
-+done:
-+	up_read(&current->mm->mmap_sem);
-+	return ret;
-+}
-+
-+/*
-+ * isp_video_buffer_prepare_vm_flags - Get VMA flags for a userspace address
-+ *
-+ * This function locates the VMAs for the buffer's userspace address and checks
-+ * that their flags match. The onlflag that we need to care for at the moment is
-+ * VM_PFNMAP.
-+ *
-+ * The buffer vm_flags field is set to the first VMA flags.
-+ *
-+ * Return -EFAULT if no VMA can be found for part of the buffer, or if the VMAs
-+ * have incompatible flags.
-+ */
-+static int isp_video_buffer_prepare_vm_flags(struct isp_video_buffer *buf)
-+{
-+	struct vm_area_struct *vma;
-+	unsigned long start;
-+	unsigned long end;
-+	int ret = -EFAULT;
-+
-+	start = buf->vbuf.m.userptr;
-+	end = buf->vbuf.m.userptr + buf->vbuf.length - 1;
-+
-+	down_read(&current->mm->mmap_sem);
-+
-+	do {
-+		vma = find_vma(current->mm, start);
-+		if (vma == NULL)
-+			goto done;
-+
-+		if (start == buf->vbuf.m.userptr)
-+			buf->vm_flags = vma->vm_flags;
-+
-+		if ((buf->vm_flags ^ vma->vm_flags) & VM_PFNMAP)
-+			goto done;
-+
-+		start = vma->vm_end + 1;
-+	} while (vma->vm_end < end);
-+
-+	ret = 0;
-+
-+done:
-+	up_read(&current->mm->mmap_sem);
-+	return ret;
-+}
-+
-+/*
-+ * isp_video_buffer_prepare - Make a buffer ready for operation
-+ *
-+ * Preparing a buffer involves:
-+ *
-+ * - validating VMAs (userspace buffers only)
-+ * - locking pages and VMAs into memory (userspace buffers only)
-+ * - building page and scatter-gather lists
-+ * - mapping buffers for DMA operation
-+ * - performing driver-specific preparation
-+ *
-+ * The function must be called in userspace context with a valid mm context
-+ * (this excludes cleanup paths such as sys_close when the userspace process
-+ * segfaults).
-+ */
-+static int isp_video_buffer_prepare(struct isp_video_buffer *buf)
-+{
-+	enum dma_data_direction direction;
-+	int ret;
-+
-+	switch (buf->vbuf.memory) {
-+	case V4L2_MEMORY_MMAP:
-+		ret = isp_video_buffer_sglist_kernel(buf);
-+		break;
-+
-+	case V4L2_MEMORY_USERPTR:
-+		ret = isp_video_buffer_prepare_vm_flags(buf);
-+		if (ret < 0)
-+			return ret;
-+
-+		if (buf->vm_flags & VM_PFNMAP) {
-+			ret = isp_video_buffer_prepare_pfnmap(buf);
-+			if (ret < 0)
-+				return ret;
-+
-+			ret = isp_video_buffer_sglist_pfnmap(buf);
-+		} else {
-+			ret = isp_video_buffer_prepare_user(buf);
-+			if (ret < 0)
-+				return ret;
-+
-+			ret = isp_video_buffer_sglist_user(buf);
-+		}
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	if (ret < 0)
-+		goto done;
-+
-+	if (!(buf->vm_flags & VM_PFNMAP)) {
-+		direction = buf->vbuf.type == V4L2_BUF_TYPE_VIDEO_CAPTURE
-+			  ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
-+		ret = dma_map_sg(buf->queue->dev, buf->sglist, buf->sglen,
-+				 direction);
-+		if (ret != buf->sglen) {
-+			ret = -EFAULT;
-+			goto done;
-+		}
-+	}
-+
-+	if (buf->queue->ops->buffer_prepare)
-+		ret = buf->queue->ops->buffer_prepare(buf);
-+
-+done:
-+	if (ret < 0) {
-+		isp_video_buffer_cleanup(buf);
-+		return ret;
-+	}
-+
-+	return ret;
-+}
-+
-+/*
-+ * isp_video_queue_query - Query the status of a given buffer
-+ *
-+ * Locking: must be called with the queue lock held.
-+ */
-+static void isp_video_buffer_query(struct isp_video_buffer *buf,
-+				   struct v4l2_buffer *vbuf)
-+{
-+	memcpy(vbuf, &buf->vbuf, sizeof(*vbuf));
-+
-+	if (buf->vma_use_count)
-+		vbuf->flags |= V4L2_BUF_FLAG_MAPPED;
-+
-+	switch (buf->state) {
-+	case ISP_BUF_STATE_ERROR:
-+		vbuf->flags |= V4L2_BUF_FLAG_ERROR;
-+	case ISP_BUF_STATE_DONE:
-+		vbuf->flags |= V4L2_BUF_FLAG_DONE;
-+	case ISP_BUF_STATE_QUEUED:
-+	case ISP_BUF_STATE_ACTIVE:
-+		vbuf->flags |= V4L2_BUF_FLAG_QUEUED;
-+		break;
-+	case ISP_BUF_STATE_IDLE:
-+	default:
-+		break;
-+	}
-+}
-+
-+/*
-+ * isp_video_buffer_wait - Wait for a buffer to be ready
-+ *
-+ * In non-blocking mode, return immediately with 0 if the buffer is ready or
-+ * -EAGAIN if the buffer is in the QUEUED or ACTIVE state.
-+ *
-+ * In blocking mode, wait (interruptibly but with no timeout) on the buffer wait
-+ * queue using the same condition.
-+ */
-+static int isp_video_buffer_wait(struct isp_video_buffer *buf, int nonblocking)
-+{
-+	if (nonblocking) {
-+		return (buf->state != ISP_BUF_STATE_QUEUED &&
-+			buf->state != ISP_BUF_STATE_ACTIVE)
-+			? 0 : -EAGAIN;
-+	}
-+
-+	return wait_event_interruptible(buf->wait,
-+		buf->state != ISP_BUF_STATE_QUEUED &&
-+		buf->state != ISP_BUF_STATE_ACTIVE);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Queue management
-+ */
-+
-+/*
-+ * isp_video_queue_free - Free video buffers memory
-+ *
-+ * Buffers can only be freed if the queue isn't streaming and if no buffer is
-+ * mapped to userspace. Return -EBUSY if those conditions aren't statisfied.
-+ *
-+ * This function must be called with the queue lock held.
-+ */
-+static int isp_video_queue_free(struct isp_video_queue *queue)
-+{
-+	unsigned int i;
-+
-+	if (queue->streaming)
-+		return -EBUSY;
-+
-+	for (i = 0; i < queue->count; ++i) {
-+		if (queue->buffers[i]->vma_use_count != 0)
-+			return -EBUSY;
-+	}
-+
-+	for (i = 0; i < queue->count; ++i) {
-+		struct isp_video_buffer *buf = queue->buffers[i];
-+
-+		isp_video_buffer_cleanup(buf);
-+
-+		vfree(buf->vaddr);
-+		buf->vaddr = NULL;
-+
-+		kfree(buf);
-+		queue->buffers[i] = NULL;
-+	}
-+
-+	INIT_LIST_HEAD(&queue->queue);
-+	queue->count = 0;
-+	return 0;
-+}
-+
-+/*
-+ * isp_video_queue_alloc - Allocate video buffers memory
-+ *
-+ * This function must be called with the queue lock held.
-+ */
-+static int isp_video_queue_alloc(struct isp_video_queue *queue,
-+				 unsigned int nbuffers,
-+				 unsigned int size, enum v4l2_memory memory)
-+{
-+	struct isp_video_buffer *buf;
-+	unsigned int i;
-+	void *mem;
-+	int ret;
-+
-+	/* Start by freeing the buffers. */
-+	ret = isp_video_queue_free(queue);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Bail out of no buffers should be allocated. */
-+	if (nbuffers == 0)
-+		return 0;
-+
-+	/* Initialize the allocated buffers. */
-+	for (i = 0; i < nbuffers; ++i) {
-+		buf = kzalloc(queue->bufsize, GFP_KERNEL);
-+		if (buf == NULL)
-+			break;
-+
-+		if (memory == V4L2_MEMORY_MMAP) {
-+			/* Allocate video buffers memory for mmap mode. Align
-+			 * the size to the page size.
-+			 */
-+			mem = vmalloc_32_user(PAGE_ALIGN(size));
-+			if (mem == NULL) {
-+				kfree(buf);
-+				break;
-+			}
-+
-+			buf->vbuf.m.offset = i * PAGE_ALIGN(size);
-+			buf->vaddr = mem;
-+		}
-+
-+		buf->vbuf.index = i;
-+		buf->vbuf.length = size;
-+		buf->vbuf.type = queue->type;
-+		buf->vbuf.field = V4L2_FIELD_NONE;
-+		buf->vbuf.memory = memory;
-+
-+		buf->queue = queue;
-+		init_waitqueue_head(&buf->wait);
-+
-+		queue->buffers[i] = buf;
-+	}
-+
-+	if (i == 0)
-+		return -ENOMEM;
-+
-+	queue->count = i;
-+	return nbuffers;
-+}
-+
-+/**
-+ * omap3isp_video_queue_cleanup - Clean up the video buffers queue
-+ * @queue: Video buffers queue
-+ *
-+ * Free all allocated resources and clean up the video buffers queue. The queue
-+ * must not be busy (no ongoing video stream) and buffers must have been
-+ * unmapped.
-+ *
-+ * Return 0 on success or -EBUSY if the queue is busy or buffers haven't been
-+ * unmapped.
-+ */
-+int omap3isp_video_queue_cleanup(struct isp_video_queue *queue)
-+{
-+	return isp_video_queue_free(queue);
-+}
-+
-+/**
-+ * omap3isp_video_queue_init - Initialize the video buffers queue
-+ * @queue: Video buffers queue
-+ * @type: V4L2 buffer type (capture or output)
-+ * @ops: Driver-specific queue operations
-+ * @dev: Device used for DMA operations
-+ * @bufsize: Size of the driver-specific buffer structure
-+ *
-+ * Initialize the video buffers queue with the supplied parameters.
-+ *
-+ * The queue type must be one of V4L2_BUF_TYPE_VIDEO_CAPTURE or
-+ * V4L2_BUF_TYPE_VIDEO_OUTPUT. Other buffer types are not supported yet.
-+ *
-+ * Buffer objects will be allocated using the given buffer size to allow room
-+ * for driver-specific fields. Driver-specific buffer structures must start
-+ * with a struct isp_video_buffer field. Drivers with no driver-specific buffer
-+ * structure must pass the size of the isp_video_buffer structure in the bufsize
-+ * parameter.
-+ *
-+ * Return 0 on success.
-+ */
-+int omap3isp_video_queue_init(struct isp_video_queue *queue,
-+			      enum v4l2_buf_type type,
-+			      const struct isp_video_queue_operations *ops,
-+			      struct device *dev, unsigned int bufsize)
-+{
-+	INIT_LIST_HEAD(&queue->queue);
-+	mutex_init(&queue->lock);
-+	spin_lock_init(&queue->irqlock);
-+
-+	queue->type = type;
-+	queue->ops = ops;
-+	queue->dev = dev;
-+	queue->bufsize = bufsize;
-+
-+	return 0;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 operations
-+ */
-+
-+/**
-+ * omap3isp_video_queue_reqbufs - Allocate video buffers memory
-+ *
-+ * This function is intended to be used as a VIDIOC_REQBUFS ioctl handler. It
-+ * allocated video buffer objects and, for MMAP buffers, buffer memory.
-+ *
-+ * If the number of buffers is 0, all buffers are freed and the function returns
-+ * without performing any allocation.
-+ *
-+ * If the number of buffers is not 0, currently allocated buffers (if any) are
-+ * freed and the requested number of buffers are allocated. Depending on
-+ * driver-specific requirements and on memory availability, a number of buffer
-+ * smaller or bigger than requested can be allocated. This isn't considered as
-+ * an error.
-+ *
-+ * Return 0 on success or one of the following error codes:
-+ *
-+ * -EINVAL if the buffer type or index are invalid
-+ * -EBUSY if the queue is busy (streaming or buffers mapped)
-+ * -ENOMEM if the buffers can't be allocated due to an out-of-memory condition
-+ */
-+int omap3isp_video_queue_reqbufs(struct isp_video_queue *queue,
-+				 struct v4l2_requestbuffers *rb)
-+{
-+	unsigned int nbuffers = rb->count;
-+	unsigned int size;
-+	int ret;
-+
-+	if (rb->type != queue->type)
-+		return -EINVAL;
-+
-+	queue->ops->queue_prepare(queue, &nbuffers, &size);
-+	if (size == 0)
-+		return -EINVAL;
-+
-+	nbuffers = min_t(unsigned int, nbuffers, ISP_VIDEO_MAX_BUFFERS);
-+
-+	mutex_lock(&queue->lock);
-+
-+	ret = isp_video_queue_alloc(queue, nbuffers, size, rb->memory);
-+	if (ret < 0)
-+		goto done;
-+
-+	rb->count = ret;
-+	ret = 0;
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return ret;
-+}
-+
-+/**
-+ * omap3isp_video_queue_querybuf - Query the status of a buffer in a queue
-+ *
-+ * This function is intended to be used as a VIDIOC_QUERYBUF ioctl handler. It
-+ * returns the status of a given video buffer.
-+ *
-+ * Return 0 on success or -EINVAL if the buffer type or index are invalid.
-+ */
-+int omap3isp_video_queue_querybuf(struct isp_video_queue *queue,
-+				  struct v4l2_buffer *vbuf)
-+{
-+	struct isp_video_buffer *buf;
-+	int ret = 0;
-+
-+	if (vbuf->type != queue->type)
-+		return -EINVAL;
-+
-+	mutex_lock(&queue->lock);
-+
-+	if (vbuf->index >= queue->count) {
-+		ret = -EINVAL;
-+		goto done;
-+	}
-+
-+	buf = queue->buffers[vbuf->index];
-+	isp_video_buffer_query(buf, vbuf);
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return ret;
-+}
-+
-+/**
-+ * omap3isp_video_queue_qbuf - Queue a buffer
-+ *
-+ * This function is intended to be used as a VIDIOC_QBUF ioctl handler.
-+ *
-+ * The v4l2_buffer structure passed from userspace is first sanity tested. If
-+ * sane, the buffer is then processed and added to the main queue and, if the
-+ * queue is streaming, to the IRQ queue.
-+ *
-+ * Before being enqueued, USERPTR buffers are checked for address changes. If
-+ * the buffer has a different userspace address, the old memory area is unlocked
-+ * and the new memory area is locked.
-+ */
-+int omap3isp_video_queue_qbuf(struct isp_video_queue *queue,
-+			      struct v4l2_buffer *vbuf)
-+{
-+	struct isp_video_buffer *buf;
-+	unsigned long flags;
-+	int ret = -EINVAL;
-+
-+	if (vbuf->type != queue->type)
-+		goto done;
-+
-+	mutex_lock(&queue->lock);
-+
-+	if (vbuf->index >= queue->count)
-+		goto done;
-+
-+	buf = queue->buffers[vbuf->index];
-+
-+	if (vbuf->memory != buf->vbuf.memory)
-+		goto done;
-+
-+	if (buf->state != ISP_BUF_STATE_IDLE)
-+		goto done;
-+
-+	if (vbuf->memory == V4L2_MEMORY_USERPTR &&
-+	    vbuf->m.userptr != buf->vbuf.m.userptr) {
-+		isp_video_buffer_cleanup(buf);
-+		buf->vbuf.m.userptr = vbuf->m.userptr;
-+		buf->prepared = 0;
-+	}
-+
-+	if (!buf->prepared) {
-+		ret = isp_video_buffer_prepare(buf);
-+		if (ret < 0)
-+			goto done;
-+		buf->prepared = 1;
-+	}
-+
-+	isp_video_buffer_cache_sync(buf);
-+
-+	buf->state = ISP_BUF_STATE_QUEUED;
-+	list_add_tail(&buf->stream, &queue->queue);
-+
-+	if (queue->streaming) {
-+		spin_lock_irqsave(&queue->irqlock, flags);
-+		queue->ops->buffer_queue(buf);
-+		spin_unlock_irqrestore(&queue->irqlock, flags);
-+	}
-+
-+	ret = 0;
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return ret;
-+}
-+
-+/**
-+ * omap3isp_video_queue_dqbuf - Dequeue a buffer
-+ *
-+ * This function is intended to be used as a VIDIOC_DQBUF ioctl handler.
-+ *
-+ * The v4l2_buffer structure passed from userspace is first sanity tested. If
-+ * sane, the buffer is then processed and added to the main queue and, if the
-+ * queue is streaming, to the IRQ queue.
-+ *
-+ * Before being enqueued, USERPTR buffers are checked for address changes. If
-+ * the buffer has a different userspace address, the old memory area is unlocked
-+ * and the new memory area is locked.
-+ */
-+int omap3isp_video_queue_dqbuf(struct isp_video_queue *queue,
-+			       struct v4l2_buffer *vbuf, int nonblocking)
-+{
-+	struct isp_video_buffer *buf;
-+	int ret;
-+
-+	if (vbuf->type != queue->type)
-+		return -EINVAL;
-+
-+	mutex_lock(&queue->lock);
-+
-+	if (list_empty(&queue->queue)) {
-+		ret = -EINVAL;
-+		goto done;
-+	}
-+
-+	buf = list_first_entry(&queue->queue, struct isp_video_buffer, stream);
-+	ret = isp_video_buffer_wait(buf, nonblocking);
-+	if (ret < 0)
-+		goto done;
-+
-+	list_del(&buf->stream);
-+
-+	isp_video_buffer_query(buf, vbuf);
-+	buf->state = ISP_BUF_STATE_IDLE;
-+	vbuf->flags &= ~V4L2_BUF_FLAG_QUEUED;
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return ret;
-+}
-+
-+/**
-+ * omap3isp_video_queue_streamon - Start streaming
-+ *
-+ * This function is intended to be used as a VIDIOC_STREAMON ioctl handler. It
-+ * starts streaming on the queue and calls the buffer_queue operation for all
-+ * queued buffers.
-+ *
-+ * Return 0 on success.
-+ */
-+int omap3isp_video_queue_streamon(struct isp_video_queue *queue)
-+{
-+	struct isp_video_buffer *buf;
-+	unsigned long flags;
-+
-+	mutex_lock(&queue->lock);
-+
-+	if (queue->streaming)
-+		goto done;
-+
-+	queue->streaming = 1;
-+
-+	spin_lock_irqsave(&queue->irqlock, flags);
-+	list_for_each_entry(buf, &queue->queue, stream)
-+		queue->ops->buffer_queue(buf);
-+	spin_unlock_irqrestore(&queue->irqlock, flags);
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return 0;
-+}
-+
-+/**
-+ * omap3isp_video_queue_streamoff - Stop streaming
-+ *
-+ * This function is intended to be used as a VIDIOC_STREAMOFF ioctl handler. It
-+ * stops streaming on the queue and wakes up all the buffers.
-+ *
-+ * Drivers must stop the hardware and synchronize with interrupt handlers and/or
-+ * delayed works before calling this function to make sure no buffer will be
-+ * touched by the driver and/or hardware.
-+ */
-+void omap3isp_video_queue_streamoff(struct isp_video_queue *queue)
-+{
-+	struct isp_video_buffer *buf;
-+	unsigned long flags;
-+	unsigned int i;
-+
-+	mutex_lock(&queue->lock);
-+
-+	if (!queue->streaming)
-+		goto done;
-+
-+	queue->streaming = 0;
-+
-+	spin_lock_irqsave(&queue->irqlock, flags);
-+	for (i = 0; i < queue->count; ++i) {
-+		buf = queue->buffers[i];
-+
-+		if (buf->state == ISP_BUF_STATE_ACTIVE)
-+			wake_up(&buf->wait);
-+
-+		buf->state = ISP_BUF_STATE_IDLE;
-+	}
-+	spin_unlock_irqrestore(&queue->irqlock, flags);
-+
-+	INIT_LIST_HEAD(&queue->queue);
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+}
-+
-+/**
-+ * omap3isp_video_queue_discard_done - Discard all buffers marked as DONE
-+ *
-+ * This function is intended to be used with suspend/resume operations. It
-+ * discards all 'done' buffers as they would be too old to be requested after
-+ * resume.
-+ *
-+ * Drivers must stop the hardware and synchronize with interrupt handlers and/or
-+ * delayed works before calling this function to make sure no buffer will be
-+ * touched by the driver and/or hardware.
-+ */
-+void omap3isp_video_queue_discard_done(struct isp_video_queue *queue)
-+{
-+	struct isp_video_buffer *buf;
-+	unsigned int i;
-+
-+	mutex_lock(&queue->lock);
-+
-+	if (!queue->streaming)
-+		goto done;
-+
-+	for (i = 0; i < queue->count; ++i) {
-+		buf = queue->buffers[i];
-+
-+		if (buf->state == ISP_BUF_STATE_DONE)
-+			buf->state = ISP_BUF_STATE_ERROR;
-+	}
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+}
-+
-+static void isp_video_queue_vm_open(struct vm_area_struct *vma)
-+{
-+	struct isp_video_buffer *buf = vma->vm_private_data;
-+
-+	buf->vma_use_count++;
-+}
-+
-+static void isp_video_queue_vm_close(struct vm_area_struct *vma)
-+{
-+	struct isp_video_buffer *buf = vma->vm_private_data;
-+
-+	buf->vma_use_count--;
-+}
-+
-+static const struct vm_operations_struct isp_video_queue_vm_ops = {
-+	.open = isp_video_queue_vm_open,
-+	.close = isp_video_queue_vm_close,
-+};
-+
-+/**
-+ * omap3isp_video_queue_mmap - Map buffers to userspace
-+ *
-+ * This function is intended to be used as an mmap() file operation handler. It
-+ * maps a buffer to userspace based on the VMA offset.
-+ *
-+ * Only buffers of memory type MMAP are supported.
-+ */
-+int omap3isp_video_queue_mmap(struct isp_video_queue *queue,
-+			 struct vm_area_struct *vma)
-+{
-+	struct isp_video_buffer *uninitialized_var(buf);
-+	unsigned long size;
-+	unsigned int i;
-+	int ret = 0;
-+
-+	mutex_lock(&queue->lock);
-+
-+	for (i = 0; i < queue->count; ++i) {
-+		buf = queue->buffers[i];
-+		if ((buf->vbuf.m.offset >> PAGE_SHIFT) == vma->vm_pgoff)
-+			break;
-+	}
-+
-+	if (i == queue->count) {
-+		ret = -EINVAL;
-+		goto done;
-+	}
-+
-+	size = vma->vm_end - vma->vm_start;
-+
-+	if (buf->vbuf.memory != V4L2_MEMORY_MMAP ||
-+	    size != PAGE_ALIGN(buf->vbuf.length)) {
-+		ret = -EINVAL;
-+		goto done;
-+	}
-+
-+	ret = remap_vmalloc_range(vma, buf->vaddr, 0);
-+	if (ret < 0)
-+		goto done;
-+
-+	vma->vm_ops = &isp_video_queue_vm_ops;
-+	vma->vm_private_data = buf;
-+	isp_video_queue_vm_open(vma);
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return ret;
-+}
-+
-+/**
-+ * omap3isp_video_queue_poll - Poll video queue state
-+ *
-+ * This function is intended to be used as a poll() file operation handler. It
-+ * polls the state of the video buffer at the front of the queue and returns an
-+ * events mask.
-+ *
-+ * If no buffer is present at the front of the queue, POLLERR is returned.
-+ */
-+unsigned int omap3isp_video_queue_poll(struct isp_video_queue *queue,
-+				       struct file *file, poll_table *wait)
-+{
-+	struct isp_video_buffer *buf;
-+	unsigned int mask = 0;
-+
-+	mutex_lock(&queue->lock);
-+	if (list_empty(&queue->queue)) {
-+		mask |= POLLERR;
-+		goto done;
-+	}
-+	buf = list_first_entry(&queue->queue, struct isp_video_buffer, stream);
-+
-+	poll_wait(file, &buf->wait, wait);
-+	if (buf->state == ISP_BUF_STATE_DONE ||
-+	    buf->state == ISP_BUF_STATE_ERROR) {
-+		if (queue->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+			mask |= POLLIN | POLLRDNORM;
-+		else
-+			mask |= POLLOUT | POLLWRNORM;
-+	}
-+
-+done:
-+	mutex_unlock(&queue->lock);
-+	return mask;
-+}
-diff --git a/drivers/media/video/isp/ispqueue.h b/drivers/media/video/isp/ispqueue.h
-new file mode 100644
-index 0000000..f05aba3
---- /dev/null
-+++ b/drivers/media/video/isp/ispqueue.h
-@@ -0,0 +1,185 @@
-+/*
-+ * ispqueue.h
-+ *
-+ * TI OMAP3 ISP - Video buffers queue handling
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_QUEUE_H
-+#define OMAP3_ISP_QUEUE_H
-+
-+#include <linux/kernel.h>
-+#include <linux/list.h>
-+#include <linux/mutex.h>
-+#include <linux/videodev2.h>
-+#include <linux/wait.h>
-+
-+struct isp_video_queue;
-+struct page;
-+struct scatterlist;
-+
-+#define ISP_VIDEO_MAX_BUFFERS		16
-+
-+/**
-+ * enum isp_video_buffer_state - ISP video buffer state
-+ * @ISP_BUF_STATE_IDLE:	The buffer is under userspace control (dequeued
-+ *	or not queued yet).
-+ * @ISP_BUF_STATE_QUEUED: The buffer has been queued but isn't used by the
-+ *	device yet.
-+ * @ISP_BUF_STATE_ACTIVE: The buffer is in use for an active video transfer.
-+ * @ISP_BUF_STATE_ERROR: The device is done with the buffer and an error
-+ *	occured. For capture device the buffer likely contains corrupted data or
-+ *	no data at all.
-+ * @ISP_BUF_STATE_DONE: The device is done with the buffer and no error occured.
-+ *	For capture devices the buffer contains valid data.
-+ */
-+enum isp_video_buffer_state {
-+	ISP_BUF_STATE_IDLE,
-+	ISP_BUF_STATE_QUEUED,
-+	ISP_BUF_STATE_ACTIVE,
-+	ISP_BUF_STATE_ERROR,
-+	ISP_BUF_STATE_DONE,
-+};
-+
-+/**
-+ * struct isp_video_buffer - ISP video buffer
-+ * @vma_use_count: Number of times the buffer is mmap'ed to userspace
-+ * @stream: List head for insertion into main queue
-+ * @queue: ISP buffers queue this buffer belongs to
-+ * @prepared: Whether the buffer has been prepared
-+ * @vaddr: Memory virtual address (for kernel buffers)
-+ * @vm_flags: Buffer VMA flags (for userspace buffers)
-+ * @offset: Offset inside the first page (for userspace buffers)
-+ * @npages: Number of pages (for userspace buffers)
-+ * @pages: Pages table (for userspace non-VM_PFNMAP buffers)
-+ * @paddr: Memory physical address (for userspace VM_PFNMAP buffers)
-+ * @sglen: Number of elements in the scatter list (for non-VM_PFNMAP buffers)
-+ * @sglist: Scatter list (for non-VM_PFNMAP buffers)
-+ * @vbuf: V4L2 buffer
-+ * @irqlist: List head for insertion into IRQ queue
-+ * @state: Current buffer state
-+ * @wait: Wait queue to signal buffer completion
-+ */
-+struct isp_video_buffer {
-+	unsigned long vma_use_count;
-+	struct list_head stream;
-+	struct isp_video_queue *queue;
-+	unsigned int prepared:1;
-+
-+	/* For kernel buffers. */
-+	void *vaddr;
-+
-+	/* For userspace buffers. */
-+	unsigned long vm_flags;
-+	unsigned long offset;
-+	unsigned int npages;
-+	struct page **pages;
-+	dma_addr_t paddr;
-+
-+	/* For all buffers except VM_PFNMAP. */
-+	unsigned int sglen;
-+	struct scatterlist *sglist;
-+
-+	/* Touched by the interrupt handler. */
-+	struct v4l2_buffer vbuf;
-+	struct list_head irqlist;
-+	enum isp_video_buffer_state state;
-+	wait_queue_head_t wait;
-+};
-+
-+#define to_isp_video_buffer(vb)	container_of(vb, struct isp_video_buffer, vb)
-+
-+/**
-+ * struct isp_video_queue_operations - Driver-specific operations
-+ * @queue_prepare: Called before allocating buffers. Drivers should clamp the
-+ *	number of buffers according to their requirements, and must return the
-+ *	buffer size in bytes.
-+ * @buffer_prepare: Called the first time a buffer is queued, or after changing
-+ *	the userspace memory address for a USERPTR buffer, with the queue lock
-+ *	held. Drivers should perform device-specific buffer preparation (such as
-+ *	mapping the buffer memory in an IOMMU). This operation is optional.
-+ * @buffer_queue: Called when a buffer is being added to the queue with the
-+ *	queue irqlock spinlock held.
-+ * @buffer_cleanup: Called before freeing buffers, or before changing the
-+ *	userspace memory address for a USERPTR buffer, with the queue lock held.
-+ *	Drivers must perform cleanup operations required to undo the
-+ *	buffer_prepare call. This operation is optional.
-+ */
-+struct isp_video_queue_operations {
-+	void (*queue_prepare)(struct isp_video_queue *queue,
-+			      unsigned int *nbuffers, unsigned int *size);
-+	int  (*buffer_prepare)(struct isp_video_buffer *buf);
-+	void (*buffer_queue)(struct isp_video_buffer *buf);
-+	void (*buffer_cleanup)(struct isp_video_buffer *buf);
-+};
-+
-+/**
-+ * struct isp_video_queue - ISP video buffers queue
-+ * @type: Type of video buffers handled by this queue
-+ * @ops: Queue operations
-+ * @dev: Device used for DMA operations
-+ * @bufsize: Size of a driver-specific buffer object
-+ * @count: Number of currently allocated buffers
-+ * @buffers: ISP video buffers
-+ * @lock: Mutex to protect access to the buffers, main queue and state
-+ * @irqlock: Spinlock to protect access to the IRQ queue
-+ * @streaming: Queue state, indicates whether the queue is streaming
-+ * @queue: List of all queued buffers
-+ */
-+struct isp_video_queue {
-+	enum v4l2_buf_type type;
-+	const struct isp_video_queue_operations *ops;
-+	struct device *dev;
-+	unsigned int bufsize;
-+
-+	unsigned int count;
-+	struct isp_video_buffer *buffers[ISP_VIDEO_MAX_BUFFERS];
-+	struct mutex lock;
-+	spinlock_t irqlock;
-+
-+	unsigned int streaming:1;
-+
-+	struct list_head queue;
-+};
-+
-+int omap3isp_video_queue_cleanup(struct isp_video_queue *queue);
-+int omap3isp_video_queue_init(struct isp_video_queue *queue,
-+			      enum v4l2_buf_type type,
-+			      const struct isp_video_queue_operations *ops,
-+			      struct device *dev, unsigned int bufsize);
-+
-+int omap3isp_video_queue_reqbufs(struct isp_video_queue *queue,
-+				 struct v4l2_requestbuffers *rb);
-+int omap3isp_video_queue_querybuf(struct isp_video_queue *queue,
-+				  struct v4l2_buffer *vbuf);
-+int omap3isp_video_queue_qbuf(struct isp_video_queue *queue,
-+			      struct v4l2_buffer *vbuf);
-+int omap3isp_video_queue_dqbuf(struct isp_video_queue *queue,
-+			       struct v4l2_buffer *vbuf, int nonblocking);
-+int omap3isp_video_queue_streamon(struct isp_video_queue *queue);
-+void omap3isp_video_queue_streamoff(struct isp_video_queue *queue);
-+void omap3isp_video_queue_discard_done(struct isp_video_queue *queue);
-+int omap3isp_video_queue_mmap(struct isp_video_queue *queue,
-+			      struct vm_area_struct *vma);
-+unsigned int omap3isp_video_queue_poll(struct isp_video_queue *queue,
-+				       struct file *file, poll_table *wait);
-+
-+#endif /* OMAP3_ISP_QUEUE_H */
-diff --git a/drivers/media/video/isp/ispreg.h b/drivers/media/video/isp/ispreg.h
-new file mode 100644
-index 0000000..e78c7e3
---- /dev/null
-+++ b/drivers/media/video/isp/ispreg.h
-@@ -0,0 +1,1589 @@
-+/*
-+ * ispreg.h
-+ *
-+ * TI OMAP3 ISP - Registers definitions
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_REG_H
-+#define OMAP3_ISP_REG_H
-+
-+#include <plat/omap34xx.h>
-+
-+
-+#define CM_CAM_MCLK_HZ			172800000	/* Hz */
-+
-+/* ISP Submodules offset */
-+
-+#define OMAP3ISP_REG_BASE		OMAP3430_ISP_BASE
-+#define OMAP3ISP_REG(offset)		(OMAP3ISP_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CCP2_REG_OFFSET	0x0400
-+#define OMAP3ISP_CCP2_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_CCP2_REG_OFFSET)
-+#define OMAP3ISP_CCP2_REG(offset)	(OMAP3ISP_CCP2_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CCDC_REG_OFFSET	0x0600
-+#define OMAP3ISP_CCDC_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_CCDC_REG_OFFSET)
-+#define OMAP3ISP_CCDC_REG(offset)	(OMAP3ISP_CCDC_REG_BASE + (offset))
-+
-+#define OMAP3ISP_HIST_REG_OFFSET	0x0A00
-+#define OMAP3ISP_HIST_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_HIST_REG_OFFSET)
-+#define OMAP3ISP_HIST_REG(offset)	(OMAP3ISP_HIST_REG_BASE + (offset))
-+
-+#define OMAP3ISP_H3A_REG_OFFSET		0x0C00
-+#define OMAP3ISP_H3A_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_H3A_REG_OFFSET)
-+#define OMAP3ISP_H3A_REG(offset)	(OMAP3ISP_H3A_REG_BASE + (offset))
-+
-+#define OMAP3ISP_PREV_REG_OFFSET	0x0E00
-+#define OMAP3ISP_PREV_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_PREV_REG_OFFSET)
-+#define OMAP3ISP_PREV_REG(offset)	(OMAP3ISP_PREV_REG_BASE + (offset))
-+
-+#define OMAP3ISP_RESZ_REG_OFFSET	0x1000
-+#define OMAP3ISP_RESZ_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_RESZ_REG_OFFSET)
-+#define OMAP3ISP_RESZ_REG(offset)	(OMAP3ISP_RESZ_REG_BASE + (offset))
-+
-+#define OMAP3ISP_SBL_REG_OFFSET		0x1200
-+#define OMAP3ISP_SBL_REG_BASE		(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_SBL_REG_OFFSET)
-+#define OMAP3ISP_SBL_REG(offset)	(OMAP3ISP_SBL_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CSI2A_REGS1_REG_OFFSET	0x1800
-+#define OMAP3ISP_CSI2A_REGS1_REG_BASE	(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_CSI2A_REGS1_REG_OFFSET)
-+#define OMAP3ISP_CSI2A_REGS1_REG(offset)				\
-+				(OMAP3ISP_CSI2A_REGS1_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CSIPHY2_REG_OFFSET	0x1970
-+#define OMAP3ISP_CSIPHY2_REG_BASE	(OMAP3ISP_REG_BASE +	\
-+					 OMAP3ISP_CSIPHY2_REG_OFFSET)
-+#define OMAP3ISP_CSIPHY2_REG(offset)	(OMAP3ISP_CSIPHY2_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CSI2A_REGS2_REG_OFFSET	0x19C0
-+#define OMAP3ISP_CSI2A_REGS2_REG_BASE	(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_CSI2A_REGS2_REG_OFFSET)
-+#define OMAP3ISP_CSI2A_REGS2_REG(offset)				\
-+				(OMAP3ISP_CSI2A_REGS2_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CSI2C_REGS1_REG_OFFSET	0x1C00
-+#define OMAP3ISP_CSI2C_REGS1_REG_BASE	(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_CSI2C_REGS1_REG_OFFSET)
-+#define OMAP3ISP_CSI2C_REGS1_REG(offset)				\
-+				(OMAP3ISP_CSI2C_REGS1_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CSIPHY1_REG_OFFSET	0x1D70
-+#define OMAP3ISP_CSIPHY1_REG_BASE	(OMAP3ISP_REG_BASE +	\
-+					 OMAP3ISP_CSIPHY1_REG_OFFSET)
-+#define OMAP3ISP_CSIPHY1_REG(offset)	(OMAP3ISP_CSIPHY1_REG_BASE + (offset))
-+
-+#define OMAP3ISP_CSI2C_REGS2_REG_OFFSET	0x1DC0
-+#define OMAP3ISP_CSI2C_REGS2_REG_BASE	(OMAP3ISP_REG_BASE +		\
-+					 OMAP3ISP_CSI2C_REGS2_REG_OFFSET)
-+#define OMAP3ISP_CSI2C_REGS2_REG(offset)				\
-+				(OMAP3ISP_CSI2C_REGS2_REG_BASE + (offset))
-+
-+/* ISP module register offset */
-+
-+#define ISP_REVISION			(0x000)
-+#define ISP_SYSCONFIG			(0x004)
-+#define ISP_SYSSTATUS			(0x008)
-+#define ISP_IRQ0ENABLE			(0x00C)
-+#define ISP_IRQ0STATUS			(0x010)
-+#define ISP_IRQ1ENABLE			(0x014)
-+#define ISP_IRQ1STATUS			(0x018)
-+#define ISP_TCTRL_GRESET_LENGTH		(0x030)
-+#define ISP_TCTRL_PSTRB_REPLAY		(0x034)
-+#define ISP_CTRL			(0x040)
-+#define ISP_SECURE			(0x044)
-+#define ISP_TCTRL_CTRL			(0x050)
-+#define ISP_TCTRL_FRAME			(0x054)
-+#define ISP_TCTRL_PSTRB_DELAY		(0x058)
-+#define ISP_TCTRL_STRB_DELAY		(0x05C)
-+#define ISP_TCTRL_SHUT_DELAY		(0x060)
-+#define ISP_TCTRL_PSTRB_LENGTH		(0x064)
-+#define ISP_TCTRL_STRB_LENGTH		(0x068)
-+#define ISP_TCTRL_SHUT_LENGTH		(0x06C)
-+#define ISP_PING_PONG_ADDR		(0x070)
-+#define ISP_PING_PONG_MEM_RANGE		(0x074)
-+#define ISP_PING_PONG_BUF_SIZE		(0x078)
-+
-+/* CCP2 receiver registers */
-+
-+#define ISPCCP2_REVISION		(0x000)
-+#define ISPCCP2_SYSCONFIG		(0x004)
-+#define ISPCCP2_SYSCONFIG_SOFT_RESET	(1 << 1)
-+#define ISPCCP2_SYSCONFIG_AUTO_IDLE		0x1
-+#define ISPCCP2_SYSCONFIG_MSTANDBY_MODE_SHIFT	12
-+#define ISPCCP2_SYSCONFIG_MSTANDBY_MODE_FORCE	\
-+	(0x0 << ISPCCP2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCCP2_SYSCONFIG_MSTANDBY_MODE_NO	\
-+	(0x1 << ISPCCP2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCCP2_SYSCONFIG_MSTANDBY_MODE_SMART	\
-+	(0x2 << ISPCCP2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCCP2_SYSSTATUS		(0x008)
-+#define ISPCCP2_SYSSTATUS_RESET_DONE	(1 << 0)
-+#define ISPCCP2_LC01_IRQENABLE		(0x00C)
-+#define ISPCCP2_LC01_IRQSTATUS		(0x010)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_FS_IRQ	(1 << 11)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_LE_IRQ	(1 << 10)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_LS_IRQ	(1 << 9)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_FE_IRQ	(1 << 8)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_COUNT_IRQ	(1 << 7)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_FIFO_OVF_IRQ	(1 << 5)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_CRC_IRQ	(1 << 4)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_FSP_IRQ	(1 << 3)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_FW_IRQ	(1 << 2)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_FSC_IRQ	(1 << 1)
-+#define ISPCCP2_LC01_IRQSTATUS_LC0_SSC_IRQ	(1 << 0)
-+
-+#define ISPCCP2_LC23_IRQENABLE		(0x014)
-+#define ISPCCP2_LC23_IRQSTATUS		(0x018)
-+#define ISPCCP2_LCM_IRQENABLE		(0x02C)
-+#define ISPCCP2_LCM_IRQSTATUS_EOF_IRQ		(1 << 0)
-+#define ISPCCP2_LCM_IRQSTATUS_OCPERROR_IRQ	(1 << 1)
-+#define ISPCCP2_LCM_IRQSTATUS		(0x030)
-+#define ISPCCP2_CTRL			(0x040)
-+#define ISPCCP2_CTRL_IF_EN		(1 << 0)
-+#define ISPCCP2_CTRL_PHY_SEL		(1 << 1)
-+#define ISPCCP2_CTRL_PHY_SEL_CLOCK	(0 << 1)
-+#define ISPCCP2_CTRL_PHY_SEL_STROBE	(1 << 1)
-+#define ISPCCP2_CTRL_PHY_SEL_MASK	0x1
-+#define ISPCCP2_CTRL_PHY_SEL_SHIFT	1
-+#define ISPCCP2_CTRL_IO_OUT_SEL		(1 << 2)
-+#define ISPCCP2_CTRL_MODE		(1 << 4)
-+#define ISPCCP2_CTRL_VP_CLK_FORCE_ON	(1 << 9)
-+#define ISPCCP2_CTRL_INV		(1 << 10)
-+#define ISPCCP2_CTRL_INV_MASK		0x1
-+#define ISPCCP2_CTRL_INV_SHIFT		10
-+#define ISPCCP2_CTRL_VP_ONLY_EN		(1 << 11)
-+#define ISPCCP2_CTRL_VP_CLK_POL		(1 << 12)
-+#define ISPCCP2_CTRL_VPCLK_DIV_SHIFT	15
-+#define ISPCCP2_CTRL_VPCLK_DIV_MASK	0x1ffff /* [31:15] */
-+#define ISPCCP2_CTRL_VP_OUT_CTRL_SHIFT	8 /* 3430 bits */
-+#define ISPCCP2_CTRL_VP_OUT_CTRL_MASK	0x3 /* 3430 bits */
-+#define ISPCCP2_DBG			(0x044)
-+#define ISPCCP2_GNQ			(0x048)
-+#define ISPCCP2_LCx_CTRL(x)			((0x050)+0x30*(x))
-+#define ISPCCP2_LCx_CTRL_CHAN_EN		(1 << 0)
-+#define ISPCCP2_LCx_CTRL_CRC_EN			(1 << 19)
-+#define ISPCCP2_LCx_CTRL_CRC_MASK		0x1
-+#define ISPCCP2_LCx_CTRL_CRC_SHIFT		2
-+#define ISPCCP2_LCx_CTRL_CRC_SHIFT_15_0		19
-+#define ISPCCP2_LCx_CTRL_REGION_EN		(1 << 1)
-+#define ISPCCP2_LCx_CTRL_REGION_MASK		0x1
-+#define ISPCCP2_LCx_CTRL_REGION_SHIFT		1
-+#define ISPCCP2_LCx_CTRL_FORMAT_MASK_15_0	0x3f
-+#define ISPCCP2_LCx_CTRL_FORMAT_SHIFT_15_0	0x2
-+#define ISPCCP2_LCx_CTRL_FORMAT_MASK		0x1f
-+#define ISPCCP2_LCx_CTRL_FORMAT_SHIFT		0x3
-+#define ISPCCP2_LCx_CODE(x)		((0x054)+0x30*(x))
-+#define ISPCCP2_LCx_STAT_START(x)	((0x058)+0x30*(x))
-+#define ISPCCP2_LCx_STAT_SIZE(x)	((0x05C)+0x30*(x))
-+#define ISPCCP2_LCx_SOF_ADDR(x)		((0x060)+0x30*(x))
-+#define ISPCCP2_LCx_EOF_ADDR(x)		((0x064)+0x30*(x))
-+#define ISPCCP2_LCx_DAT_START(x)	((0x068)+0x30*(x))
-+#define ISPCCP2_LCx_DAT_SIZE(x)		((0x06C)+0x30*(x))
-+#define ISPCCP2_LCx_DAT_MASK		0xFFF
-+#define ISPCCP2_LCx_DAT_SHIFT		16
-+#define ISPCCP2_LCx_DAT_PING_ADDR(x)	((0x070)+0x30*(x))
-+#define ISPCCP2_LCx_DAT_PONG_ADDR(x)	((0x074)+0x30*(x))
-+#define ISPCCP2_LCx_DAT_OFST(x)		((0x078)+0x30*(x))
-+#define ISPCCP2_LCM_CTRL		(0x1D0)
-+#define ISPCCP2_LCM_CTRL_CHAN_EN               (1 << 0)
-+#define ISPCCP2_LCM_CTRL_DST_PORT              (1 << 2)
-+#define ISPCCP2_LCM_CTRL_DST_PORT_SHIFT		2
-+#define ISPCCP2_LCM_CTRL_READ_THROTTLE_SHIFT	3
-+#define ISPCCP2_LCM_CTRL_READ_THROTTLE_MASK	0x11
-+#define ISPCCP2_LCM_CTRL_BURST_SIZE_SHIFT	5
-+#define ISPCCP2_LCM_CTRL_BURST_SIZE_MASK	0x7
-+#define ISPCCP2_LCM_CTRL_SRC_FORMAT_SHIFT	16
-+#define ISPCCP2_LCM_CTRL_SRC_FORMAT_MASK	0x7
-+#define ISPCCP2_LCM_CTRL_SRC_DECOMPR_SHIFT	20
-+#define ISPCCP2_LCM_CTRL_SRC_DECOMPR_MASK	0x3
-+#define ISPCCP2_LCM_CTRL_SRC_DPCM_PRED		(1 << 22)
-+#define ISPCCP2_LCM_CTRL_SRC_PACK		(1 << 23)
-+#define ISPCCP2_LCM_CTRL_DST_FORMAT_SHIFT	24
-+#define ISPCCP2_LCM_CTRL_DST_FORMAT_MASK	0x7
-+#define ISPCCP2_LCM_VSIZE		(0x1D4)
-+#define ISPCCP2_LCM_VSIZE_SHIFT		16
-+#define ISPCCP2_LCM_HSIZE		(0x1D8)
-+#define ISPCCP2_LCM_HSIZE_SHIFT		16
-+#define ISPCCP2_LCM_PREFETCH		(0x1DC)
-+#define ISPCCP2_LCM_PREFETCH_SHIFT	3
-+#define ISPCCP2_LCM_SRC_ADDR		(0x1E0)
-+#define ISPCCP2_LCM_SRC_OFST		(0x1E4)
-+#define ISPCCP2_LCM_DST_ADDR		(0x1E8)
-+#define ISPCCP2_LCM_DST_OFST		(0x1EC)
-+
-+/* CCDC module register offset */
-+
-+#define ISPCCDC_PID			(0x000)
-+#define ISPCCDC_PCR			(0x004)
-+#define ISPCCDC_SYN_MODE		(0x008)
-+#define ISPCCDC_HD_VD_WID		(0x00C)
-+#define ISPCCDC_PIX_LINES		(0x010)
-+#define ISPCCDC_HORZ_INFO		(0x014)
-+#define ISPCCDC_VERT_START		(0x018)
-+#define ISPCCDC_VERT_LINES		(0x01C)
-+#define ISPCCDC_CULLING			(0x020)
-+#define ISPCCDC_HSIZE_OFF		(0x024)
-+#define ISPCCDC_SDOFST			(0x028)
-+#define ISPCCDC_SDR_ADDR		(0x02C)
-+#define ISPCCDC_CLAMP			(0x030)
-+#define ISPCCDC_DCSUB			(0x034)
-+#define ISPCCDC_COLPTN			(0x038)
-+#define ISPCCDC_BLKCMP			(0x03C)
-+#define ISPCCDC_FPC			(0x040)
-+#define ISPCCDC_FPC_ADDR		(0x044)
-+#define ISPCCDC_VDINT			(0x048)
-+#define ISPCCDC_ALAW			(0x04C)
-+#define ISPCCDC_REC656IF		(0x050)
-+#define ISPCCDC_CFG			(0x054)
-+#define ISPCCDC_FMTCFG			(0x058)
-+#define ISPCCDC_FMT_HORZ		(0x05C)
-+#define ISPCCDC_FMT_VERT		(0x060)
-+#define ISPCCDC_FMT_ADDR0		(0x064)
-+#define ISPCCDC_FMT_ADDR1		(0x068)
-+#define ISPCCDC_FMT_ADDR2		(0x06C)
-+#define ISPCCDC_FMT_ADDR3		(0x070)
-+#define ISPCCDC_FMT_ADDR4		(0x074)
-+#define ISPCCDC_FMT_ADDR5		(0x078)
-+#define ISPCCDC_FMT_ADDR6		(0x07C)
-+#define ISPCCDC_FMT_ADDR7		(0x080)
-+#define ISPCCDC_PRGEVEN0		(0x084)
-+#define ISPCCDC_PRGEVEN1		(0x088)
-+#define ISPCCDC_PRGODD0			(0x08C)
-+#define ISPCCDC_PRGODD1			(0x090)
-+#define ISPCCDC_VP_OUT			(0x094)
-+
-+#define ISPCCDC_LSC_CONFIG		(0x098)
-+#define ISPCCDC_LSC_INITIAL		(0x09C)
-+#define ISPCCDC_LSC_TABLE_BASE		(0x0A0)
-+#define ISPCCDC_LSC_TABLE_OFFSET	(0x0A4)
-+
-+/* SBL */
-+#define ISPSBL_PCR			0x4
-+#define ISPSBL_PCR_H3A_AEAWB_WBL_OVF	(1 << 16)
-+#define ISPSBL_PCR_H3A_AF_WBL_OVF	(1 << 17)
-+#define ISPSBL_PCR_RSZ4_WBL_OVF		(1 << 18)
-+#define ISPSBL_PCR_RSZ3_WBL_OVF		(1 << 19)
-+#define ISPSBL_PCR_RSZ2_WBL_OVF		(1 << 20)
-+#define ISPSBL_PCR_RSZ1_WBL_OVF		(1 << 21)
-+#define ISPSBL_PCR_PRV_WBL_OVF		(1 << 22)
-+#define ISPSBL_PCR_CCDC_WBL_OVF		(1 << 23)
-+#define ISPSBL_PCR_CCDCPRV_2_RSZ_OVF	(1 << 24)
-+#define ISPSBL_PCR_CSIA_WBL_OVF		(1 << 25)
-+#define ISPSBL_PCR_CSIB_WBL_OVF		(1 << 26)
-+#define ISPSBL_CCDC_WR_0		(0x028)
-+#define ISPSBL_CCDC_WR_0_DATA_READY	(1 << 21)
-+#define ISPSBL_CCDC_WR_1		(0x02C)
-+#define ISPSBL_CCDC_WR_2		(0x030)
-+#define ISPSBL_CCDC_WR_3		(0x034)
-+
-+#define ISPSBL_SDR_REQ_EXP		0xF8
-+#define ISPSBL_SDR_REQ_HIST_EXP_SHIFT	0
-+#define ISPSBL_SDR_REQ_HIST_EXP_MASK	(0x3FF)
-+#define ISPSBL_SDR_REQ_RSZ_EXP_SHIFT	10
-+#define ISPSBL_SDR_REQ_RSZ_EXP_MASK	(0x3FF << ISPSBL_SDR_REQ_RSZ_EXP_SHIFT)
-+#define ISPSBL_SDR_REQ_PRV_EXP_SHIFT	20
-+#define ISPSBL_SDR_REQ_PRV_EXP_MASK	(0x3FF << ISPSBL_SDR_REQ_PRV_EXP_SHIFT)
-+
-+/* Histogram registers */
-+#define ISPHIST_PID			(0x000)
-+#define ISPHIST_PCR			(0x004)
-+#define ISPHIST_CNT			(0x008)
-+#define ISPHIST_WB_GAIN			(0x00C)
-+#define ISPHIST_R0_HORZ			(0x010)
-+#define ISPHIST_R0_VERT			(0x014)
-+#define ISPHIST_R1_HORZ			(0x018)
-+#define ISPHIST_R1_VERT			(0x01C)
-+#define ISPHIST_R2_HORZ			(0x020)
-+#define ISPHIST_R2_VERT			(0x024)
-+#define ISPHIST_R3_HORZ			(0x028)
-+#define ISPHIST_R3_VERT			(0x02C)
-+#define ISPHIST_ADDR			(0x030)
-+#define ISPHIST_DATA			(0x034)
-+#define ISPHIST_RADD			(0x038)
-+#define ISPHIST_RADD_OFF		(0x03C)
-+#define ISPHIST_H_V_INFO		(0x040)
-+
-+/* H3A module registers */
-+#define ISPH3A_PID			(0x000)
-+#define ISPH3A_PCR			(0x004)
-+#define ISPH3A_AEWWIN1			(0x04C)
-+#define ISPH3A_AEWINSTART		(0x050)
-+#define ISPH3A_AEWINBLK			(0x054)
-+#define ISPH3A_AEWSUBWIN		(0x058)
-+#define ISPH3A_AEWBUFST			(0x05C)
-+#define ISPH3A_AFPAX1			(0x008)
-+#define ISPH3A_AFPAX2			(0x00C)
-+#define ISPH3A_AFPAXSTART		(0x010)
-+#define ISPH3A_AFIIRSH			(0x014)
-+#define ISPH3A_AFBUFST			(0x018)
-+#define ISPH3A_AFCOEF010		(0x01C)
-+#define ISPH3A_AFCOEF032		(0x020)
-+#define ISPH3A_AFCOEF054		(0x024)
-+#define ISPH3A_AFCOEF076		(0x028)
-+#define ISPH3A_AFCOEF098		(0x02C)
-+#define ISPH3A_AFCOEF0010		(0x030)
-+#define ISPH3A_AFCOEF110		(0x034)
-+#define ISPH3A_AFCOEF132		(0x038)
-+#define ISPH3A_AFCOEF154		(0x03C)
-+#define ISPH3A_AFCOEF176		(0x040)
-+#define ISPH3A_AFCOEF198		(0x044)
-+#define ISPH3A_AFCOEF1010		(0x048)
-+
-+#define ISPPRV_PCR			(0x004)
-+#define ISPPRV_HORZ_INFO		(0x008)
-+#define ISPPRV_VERT_INFO		(0x00C)
-+#define ISPPRV_RSDR_ADDR		(0x010)
-+#define ISPPRV_RADR_OFFSET		(0x014)
-+#define ISPPRV_DSDR_ADDR		(0x018)
-+#define ISPPRV_DRKF_OFFSET		(0x01C)
-+#define ISPPRV_WSDR_ADDR		(0x020)
-+#define ISPPRV_WADD_OFFSET		(0x024)
-+#define ISPPRV_AVE			(0x028)
-+#define ISPPRV_HMED			(0x02C)
-+#define ISPPRV_NF			(0x030)
-+#define ISPPRV_WB_DGAIN			(0x034)
-+#define ISPPRV_WBGAIN			(0x038)
-+#define ISPPRV_WBSEL			(0x03C)
-+#define ISPPRV_CFA			(0x040)
-+#define ISPPRV_BLKADJOFF		(0x044)
-+#define ISPPRV_RGB_MAT1			(0x048)
-+#define ISPPRV_RGB_MAT2			(0x04C)
-+#define ISPPRV_RGB_MAT3			(0x050)
-+#define ISPPRV_RGB_MAT4			(0x054)
-+#define ISPPRV_RGB_MAT5			(0x058)
-+#define ISPPRV_RGB_OFF1			(0x05C)
-+#define ISPPRV_RGB_OFF2			(0x060)
-+#define ISPPRV_CSC0			(0x064)
-+#define ISPPRV_CSC1			(0x068)
-+#define ISPPRV_CSC2			(0x06C)
-+#define ISPPRV_CSC_OFFSET		(0x070)
-+#define ISPPRV_CNT_BRT			(0x074)
-+#define ISPPRV_CSUP			(0x078)
-+#define ISPPRV_SETUP_YC			(0x07C)
-+#define ISPPRV_SET_TBL_ADDR		(0x080)
-+#define ISPPRV_SET_TBL_DATA		(0x084)
-+#define ISPPRV_CDC_THR0			(0x090)
-+#define ISPPRV_CDC_THR1			(ISPPRV_CDC_THR0 + (0x4))
-+#define ISPPRV_CDC_THR2			(ISPPRV_CDC_THR0 + (0x4) * 2)
-+#define ISPPRV_CDC_THR3			(ISPPRV_CDC_THR0 + (0x4) * 3)
-+
-+#define ISPPRV_REDGAMMA_TABLE_ADDR	0x0000
-+#define ISPPRV_GREENGAMMA_TABLE_ADDR	0x0400
-+#define ISPPRV_BLUEGAMMA_TABLE_ADDR	0x0800
-+#define ISPPRV_NF_TABLE_ADDR		0x0C00
-+#define ISPPRV_YENH_TABLE_ADDR		0x1000
-+#define ISPPRV_CFA_TABLE_ADDR		0x1400
-+
-+#define ISPPRV_MAXOUTPUT_WIDTH		1280
-+#define ISPPRV_MAXOUTPUT_WIDTH_ES2	3300
-+#define ISPPRV_MAXOUTPUT_WIDTH_3630	4096
-+#define ISPRSZ_MIN_OUTPUT		64
-+#define ISPRSZ_MAX_OUTPUT		3312
-+
-+/* Resizer module register offset */
-+#define ISPRSZ_PID			(0x000)
-+#define ISPRSZ_PCR			(0x004)
-+#define ISPRSZ_CNT			(0x008)
-+#define ISPRSZ_OUT_SIZE			(0x00C)
-+#define ISPRSZ_IN_START			(0x010)
-+#define ISPRSZ_IN_SIZE			(0x014)
-+#define ISPRSZ_SDR_INADD		(0x018)
-+#define ISPRSZ_SDR_INOFF		(0x01C)
-+#define ISPRSZ_SDR_OUTADD		(0x020)
-+#define ISPRSZ_SDR_OUTOFF		(0x024)
-+#define ISPRSZ_HFILT10			(0x028)
-+#define ISPRSZ_HFILT32			(0x02C)
-+#define ISPRSZ_HFILT54			(0x030)
-+#define ISPRSZ_HFILT76			(0x034)
-+#define ISPRSZ_HFILT98			(0x038)
-+#define ISPRSZ_HFILT1110		(0x03C)
-+#define ISPRSZ_HFILT1312		(0x040)
-+#define ISPRSZ_HFILT1514		(0x044)
-+#define ISPRSZ_HFILT1716		(0x048)
-+#define ISPRSZ_HFILT1918		(0x04C)
-+#define ISPRSZ_HFILT2120		(0x050)
-+#define ISPRSZ_HFILT2322		(0x054)
-+#define ISPRSZ_HFILT2524		(0x058)
-+#define ISPRSZ_HFILT2726		(0x05C)
-+#define ISPRSZ_HFILT2928		(0x060)
-+#define ISPRSZ_HFILT3130		(0x064)
-+#define ISPRSZ_VFILT10			(0x068)
-+#define ISPRSZ_VFILT32			(0x06C)
-+#define ISPRSZ_VFILT54			(0x070)
-+#define ISPRSZ_VFILT76			(0x074)
-+#define ISPRSZ_VFILT98			(0x078)
-+#define ISPRSZ_VFILT1110		(0x07C)
-+#define ISPRSZ_VFILT1312		(0x080)
-+#define ISPRSZ_VFILT1514		(0x084)
-+#define ISPRSZ_VFILT1716		(0x088)
-+#define ISPRSZ_VFILT1918		(0x08C)
-+#define ISPRSZ_VFILT2120		(0x090)
-+#define ISPRSZ_VFILT2322		(0x094)
-+#define ISPRSZ_VFILT2524		(0x098)
-+#define ISPRSZ_VFILT2726		(0x09C)
-+#define ISPRSZ_VFILT2928		(0x0A0)
-+#define ISPRSZ_VFILT3130		(0x0A4)
-+#define ISPRSZ_YENH			(0x0A8)
-+
-+#define ISP_INT_CLR			0xFF113F11
-+#define ISPPRV_PCR_EN			1
-+#define ISPPRV_PCR_BUSY			(1 << 1)
-+#define ISPPRV_PCR_SOURCE		(1 << 2)
-+#define ISPPRV_PCR_ONESHOT		(1 << 3)
-+#define ISPPRV_PCR_WIDTH		(1 << 4)
-+#define ISPPRV_PCR_INVALAW		(1 << 5)
-+#define ISPPRV_PCR_DRKFEN		(1 << 6)
-+#define ISPPRV_PCR_DRKFCAP		(1 << 7)
-+#define ISPPRV_PCR_HMEDEN		(1 << 8)
-+#define ISPPRV_PCR_NFEN			(1 << 9)
-+#define ISPPRV_PCR_CFAEN		(1 << 10)
-+#define ISPPRV_PCR_CFAFMT_SHIFT		11
-+#define ISPPRV_PCR_CFAFMT_MASK		0x7800
-+#define ISPPRV_PCR_CFAFMT_BAYER		(0 << 11)
-+#define ISPPRV_PCR_CFAFMT_SONYVGA	(1 << 11)
-+#define ISPPRV_PCR_CFAFMT_RGBFOVEON	(2 << 11)
-+#define ISPPRV_PCR_CFAFMT_DNSPL		(3 << 11)
-+#define ISPPRV_PCR_CFAFMT_HONEYCOMB	(4 << 11)
-+#define ISPPRV_PCR_CFAFMT_RRGGBBFOVEON	(5 << 11)
-+#define ISPPRV_PCR_YNENHEN		(1 << 15)
-+#define ISPPRV_PCR_SUPEN		(1 << 16)
-+#define ISPPRV_PCR_YCPOS_SHIFT		17
-+#define ISPPRV_PCR_YCPOS_YCrYCb		(0 << 17)
-+#define ISPPRV_PCR_YCPOS_YCbYCr		(1 << 17)
-+#define ISPPRV_PCR_YCPOS_CbYCrY		(2 << 17)
-+#define ISPPRV_PCR_YCPOS_CrYCbY		(3 << 17)
-+#define ISPPRV_PCR_RSZPORT		(1 << 19)
-+#define ISPPRV_PCR_SDRPORT		(1 << 20)
-+#define ISPPRV_PCR_SCOMP_EN		(1 << 21)
-+#define ISPPRV_PCR_SCOMP_SFT_SHIFT	(22)
-+#define ISPPRV_PCR_SCOMP_SFT_MASK	(7 << 22)
-+#define ISPPRV_PCR_GAMMA_BYPASS		(1 << 26)
-+#define ISPPRV_PCR_DCOREN		(1 << 27)
-+#define ISPPRV_PCR_DCCOUP		(1 << 28)
-+#define ISPPRV_PCR_DRK_FAIL		(1 << 31)
-+
-+#define ISPPRV_HORZ_INFO_EPH_SHIFT	0
-+#define ISPPRV_HORZ_INFO_EPH_MASK	0x3fff
-+#define ISPPRV_HORZ_INFO_SPH_SHIFT	16
-+#define ISPPRV_HORZ_INFO_SPH_MASK	0x3fff0
-+
-+#define ISPPRV_VERT_INFO_ELV_SHIFT	0
-+#define ISPPRV_VERT_INFO_ELV_MASK	0x3fff
-+#define ISPPRV_VERT_INFO_SLV_SHIFT	16
-+#define ISPPRV_VERT_INFO_SLV_MASK	0x3fff0
-+
-+#define ISPPRV_AVE_EVENDIST_SHIFT	2
-+#define ISPPRV_AVE_EVENDIST_1		0x0
-+#define ISPPRV_AVE_EVENDIST_2		0x1
-+#define ISPPRV_AVE_EVENDIST_3		0x2
-+#define ISPPRV_AVE_EVENDIST_4		0x3
-+#define ISPPRV_AVE_ODDDIST_SHIFT	4
-+#define ISPPRV_AVE_ODDDIST_1		0x0
-+#define ISPPRV_AVE_ODDDIST_2		0x1
-+#define ISPPRV_AVE_ODDDIST_3		0x2
-+#define ISPPRV_AVE_ODDDIST_4		0x3
-+
-+#define ISPPRV_HMED_THRESHOLD_SHIFT	0
-+#define ISPPRV_HMED_EVENDIST		(1 << 8)
-+#define ISPPRV_HMED_ODDDIST		(1 << 9)
-+
-+#define ISPPRV_WBGAIN_COEF0_SHIFT	0
-+#define ISPPRV_WBGAIN_COEF1_SHIFT	8
-+#define ISPPRV_WBGAIN_COEF2_SHIFT	16
-+#define ISPPRV_WBGAIN_COEF3_SHIFT	24
-+
-+#define ISPPRV_WBSEL_COEF0		0x0
-+#define ISPPRV_WBSEL_COEF1		0x1
-+#define ISPPRV_WBSEL_COEF2		0x2
-+#define ISPPRV_WBSEL_COEF3		0x3
-+
-+#define ISPPRV_WBSEL_N0_0_SHIFT		0
-+#define ISPPRV_WBSEL_N0_1_SHIFT		2
-+#define ISPPRV_WBSEL_N0_2_SHIFT		4
-+#define ISPPRV_WBSEL_N0_3_SHIFT		6
-+#define ISPPRV_WBSEL_N1_0_SHIFT		8
-+#define ISPPRV_WBSEL_N1_1_SHIFT		10
-+#define ISPPRV_WBSEL_N1_2_SHIFT		12
-+#define ISPPRV_WBSEL_N1_3_SHIFT		14
-+#define ISPPRV_WBSEL_N2_0_SHIFT		16
-+#define ISPPRV_WBSEL_N2_1_SHIFT		18
-+#define ISPPRV_WBSEL_N2_2_SHIFT		20
-+#define ISPPRV_WBSEL_N2_3_SHIFT		22
-+#define ISPPRV_WBSEL_N3_0_SHIFT		24
-+#define ISPPRV_WBSEL_N3_1_SHIFT		26
-+#define ISPPRV_WBSEL_N3_2_SHIFT		28
-+#define ISPPRV_WBSEL_N3_3_SHIFT		30
-+
-+#define ISPPRV_CFA_GRADTH_HOR_SHIFT	0
-+#define ISPPRV_CFA_GRADTH_VER_SHIFT	8
-+
-+#define ISPPRV_BLKADJOFF_B_SHIFT	0
-+#define ISPPRV_BLKADJOFF_G_SHIFT	8
-+#define ISPPRV_BLKADJOFF_R_SHIFT	16
-+
-+#define ISPPRV_RGB_MAT1_MTX_RR_SHIFT	0
-+#define ISPPRV_RGB_MAT1_MTX_GR_SHIFT	16
-+
-+#define ISPPRV_RGB_MAT2_MTX_BR_SHIFT	0
-+#define ISPPRV_RGB_MAT2_MTX_RG_SHIFT	16
-+
-+#define ISPPRV_RGB_MAT3_MTX_GG_SHIFT	0
-+#define ISPPRV_RGB_MAT3_MTX_BG_SHIFT	16
-+
-+#define ISPPRV_RGB_MAT4_MTX_RB_SHIFT	0
-+#define ISPPRV_RGB_MAT4_MTX_GB_SHIFT	16
-+
-+#define ISPPRV_RGB_MAT5_MTX_BB_SHIFT	0
-+
-+#define ISPPRV_RGB_OFF1_MTX_OFFG_SHIFT	0
-+#define ISPPRV_RGB_OFF1_MTX_OFFR_SHIFT	16
-+
-+#define ISPPRV_RGB_OFF2_MTX_OFFB_SHIFT	0
-+
-+#define ISPPRV_CSC0_RY_SHIFT		0
-+#define ISPPRV_CSC0_GY_SHIFT		10
-+#define ISPPRV_CSC0_BY_SHIFT		20
-+
-+#define ISPPRV_CSC1_RCB_SHIFT		0
-+#define ISPPRV_CSC1_GCB_SHIFT		10
-+#define ISPPRV_CSC1_BCB_SHIFT		20
-+
-+#define ISPPRV_CSC2_RCR_SHIFT		0
-+#define ISPPRV_CSC2_GCR_SHIFT		10
-+#define ISPPRV_CSC2_BCR_SHIFT		20
-+
-+#define ISPPRV_CSC_OFFSET_CR_SHIFT	0
-+#define ISPPRV_CSC_OFFSET_CB_SHIFT	8
-+#define ISPPRV_CSC_OFFSET_Y_SHIFT	16
-+
-+#define ISPPRV_CNT_BRT_BRT_SHIFT	0
-+#define ISPPRV_CNT_BRT_CNT_SHIFT	8
-+
-+#define ISPPRV_CONTRAST_MAX		0x10
-+#define ISPPRV_CONTRAST_MIN		0xFF
-+#define ISPPRV_BRIGHT_MIN		0x00
-+#define ISPPRV_BRIGHT_MAX		0xFF
-+
-+#define ISPPRV_CSUP_CSUPG_SHIFT		0
-+#define ISPPRV_CSUP_THRES_SHIFT		8
-+#define ISPPRV_CSUP_HPYF_SHIFT		16
-+
-+#define ISPPRV_SETUP_YC_MINC_SHIFT	0
-+#define ISPPRV_SETUP_YC_MAXC_SHIFT	8
-+#define ISPPRV_SETUP_YC_MINY_SHIFT	16
-+#define ISPPRV_SETUP_YC_MAXY_SHIFT	24
-+#define ISPPRV_YC_MAX			0xFF
-+#define ISPPRV_YC_MIN			0x0
-+
-+/* Define bit fields within selected registers */
-+#define ISP_REVISION_SHIFT			0
-+
-+#define ISP_SYSCONFIG_AUTOIDLE			(1 << 0)
-+#define ISP_SYSCONFIG_SOFTRESET			(1 << 1)
-+#define ISP_SYSCONFIG_MIDLEMODE_SHIFT		12
-+#define ISP_SYSCONFIG_MIDLEMODE_FORCESTANDBY	0x0
-+#define ISP_SYSCONFIG_MIDLEMODE_NOSTANBY	0x1
-+#define ISP_SYSCONFIG_MIDLEMODE_SMARTSTANDBY	0x2
-+
-+#define ISP_SYSSTATUS_RESETDONE			0
-+
-+#define IRQ0ENABLE_CSIA_IRQ			(1 << 0)
-+#define IRQ0ENABLE_CSIC_IRQ			(1 << 1)
-+#define IRQ0ENABLE_CCP2_LCM_IRQ			(1 << 3)
-+#define IRQ0ENABLE_CCP2_LC0_IRQ			(1 << 4)
-+#define IRQ0ENABLE_CCP2_LC1_IRQ			(1 << 5)
-+#define IRQ0ENABLE_CCP2_LC2_IRQ			(1 << 6)
-+#define IRQ0ENABLE_CCP2_LC3_IRQ			(1 << 7)
-+#define IRQ0ENABLE_CSIB_IRQ			(IRQ0ENABLE_CCP2_LCM_IRQ | \
-+						IRQ0ENABLE_CCP2_LC0_IRQ | \
-+						IRQ0ENABLE_CCP2_LC1_IRQ | \
-+						IRQ0ENABLE_CCP2_LC2_IRQ | \
-+						IRQ0ENABLE_CCP2_LC3_IRQ)
-+
-+#define IRQ0ENABLE_CCDC_VD0_IRQ			(1 << 8)
-+#define IRQ0ENABLE_CCDC_VD1_IRQ			(1 << 9)
-+#define IRQ0ENABLE_CCDC_VD2_IRQ			(1 << 10)
-+#define IRQ0ENABLE_CCDC_ERR_IRQ			(1 << 11)
-+#define IRQ0ENABLE_H3A_AF_DONE_IRQ		(1 << 12)
-+#define IRQ0ENABLE_H3A_AWB_DONE_IRQ		(1 << 13)
-+#define IRQ0ENABLE_HIST_DONE_IRQ		(1 << 16)
-+#define IRQ0ENABLE_CCDC_LSC_DONE_IRQ		(1 << 17)
-+#define IRQ0ENABLE_CCDC_LSC_PREF_COMP_IRQ	(1 << 18)
-+#define IRQ0ENABLE_CCDC_LSC_PREF_ERR_IRQ	(1 << 19)
-+#define IRQ0ENABLE_PRV_DONE_IRQ			(1 << 20)
-+#define IRQ0ENABLE_RSZ_DONE_IRQ			(1 << 24)
-+#define IRQ0ENABLE_OVF_IRQ			(1 << 25)
-+#define IRQ0ENABLE_PING_IRQ			(1 << 26)
-+#define IRQ0ENABLE_PONG_IRQ			(1 << 27)
-+#define IRQ0ENABLE_MMU_ERR_IRQ			(1 << 28)
-+#define IRQ0ENABLE_OCP_ERR_IRQ			(1 << 29)
-+#define IRQ0ENABLE_SEC_ERR_IRQ			(1 << 30)
-+#define IRQ0ENABLE_HS_VS_IRQ			(1 << 31)
-+
-+#define IRQ0STATUS_CSIA_IRQ			(1 << 0)
-+#define IRQ0STATUS_CSI2C_IRQ			(1 << 1)
-+#define IRQ0STATUS_CCP2_LCM_IRQ			(1 << 3)
-+#define IRQ0STATUS_CCP2_LC0_IRQ			(1 << 4)
-+#define IRQ0STATUS_CSIB_IRQ			(IRQ0STATUS_CCP2_LCM_IRQ | \
-+						IRQ0STATUS_CCP2_LC0_IRQ)
-+
-+#define IRQ0STATUS_CSIB_LC1_IRQ			(1 << 5)
-+#define IRQ0STATUS_CSIB_LC2_IRQ			(1 << 6)
-+#define IRQ0STATUS_CSIB_LC3_IRQ			(1 << 7)
-+#define IRQ0STATUS_CCDC_VD0_IRQ			(1 << 8)
-+#define IRQ0STATUS_CCDC_VD1_IRQ			(1 << 9)
-+#define IRQ0STATUS_CCDC_VD2_IRQ			(1 << 10)
-+#define IRQ0STATUS_CCDC_ERR_IRQ			(1 << 11)
-+#define IRQ0STATUS_H3A_AF_DONE_IRQ		(1 << 12)
-+#define IRQ0STATUS_H3A_AWB_DONE_IRQ		(1 << 13)
-+#define IRQ0STATUS_HIST_DONE_IRQ		(1 << 16)
-+#define IRQ0STATUS_CCDC_LSC_DONE_IRQ		(1 << 17)
-+#define IRQ0STATUS_CCDC_LSC_PREF_COMP_IRQ	(1 << 18)
-+#define IRQ0STATUS_CCDC_LSC_PREF_ERR_IRQ	(1 << 19)
-+#define IRQ0STATUS_PRV_DONE_IRQ			(1 << 20)
-+#define IRQ0STATUS_RSZ_DONE_IRQ			(1 << 24)
-+#define IRQ0STATUS_OVF_IRQ			(1 << 25)
-+#define IRQ0STATUS_PING_IRQ			(1 << 26)
-+#define IRQ0STATUS_PONG_IRQ			(1 << 27)
-+#define IRQ0STATUS_MMU_ERR_IRQ			(1 << 28)
-+#define IRQ0STATUS_OCP_ERR_IRQ			(1 << 29)
-+#define IRQ0STATUS_SEC_ERR_IRQ			(1 << 30)
-+#define IRQ0STATUS_HS_VS_IRQ			(1 << 31)
-+
-+#define TCTRL_GRESET_LEN			0
-+
-+#define TCTRL_PSTRB_REPLAY_DELAY		0
-+#define TCTRL_PSTRB_REPLAY_COUNTER_SHIFT	25
-+
-+#define ISPCTRL_PAR_SER_CLK_SEL_PARALLEL	0x0
-+#define ISPCTRL_PAR_SER_CLK_SEL_CSIA		0x1
-+#define ISPCTRL_PAR_SER_CLK_SEL_CSIB		0x2
-+#define ISPCTRL_PAR_SER_CLK_SEL_CSIC		0x3
-+#define ISPCTRL_PAR_SER_CLK_SEL_MASK		0x3
-+
-+#define ISPCTRL_PAR_BRIDGE_SHIFT		2
-+#define ISPCTRL_PAR_BRIDGE_DISABLE		(0x0 << 2)
-+#define ISPCTRL_PAR_BRIDGE_LENDIAN		(0x2 << 2)
-+#define ISPCTRL_PAR_BRIDGE_BENDIAN		(0x3 << 2)
-+#define ISPCTRL_PAR_BRIDGE_MASK			(0x3 << 2)
-+
-+#define ISPCTRL_PAR_CLK_POL_SHIFT		4
-+#define ISPCTRL_PAR_CLK_POL_INV			(1 << 4)
-+#define ISPCTRL_PING_PONG_EN			(1 << 5)
-+#define ISPCTRL_SHIFT_SHIFT			6
-+#define ISPCTRL_SHIFT_0				(0x0 << 6)
-+#define ISPCTRL_SHIFT_2				(0x1 << 6)
-+#define ISPCTRL_SHIFT_4				(0x2 << 6)
-+#define ISPCTRL_SHIFT_MASK			(0x3 << 6)
-+
-+#define ISPCTRL_CCDC_CLK_EN			(1 << 8)
-+#define ISPCTRL_SCMP_CLK_EN			(1 << 9)
-+#define ISPCTRL_H3A_CLK_EN			(1 << 10)
-+#define ISPCTRL_HIST_CLK_EN			(1 << 11)
-+#define ISPCTRL_PREV_CLK_EN			(1 << 12)
-+#define ISPCTRL_RSZ_CLK_EN			(1 << 13)
-+#define ISPCTRL_SYNC_DETECT_SHIFT		14
-+#define ISPCTRL_SYNC_DETECT_HSFALL	(0x0 << ISPCTRL_SYNC_DETECT_SHIFT)
-+#define ISPCTRL_SYNC_DETECT_HSRISE	(0x1 << ISPCTRL_SYNC_DETECT_SHIFT)
-+#define ISPCTRL_SYNC_DETECT_VSFALL	(0x2 << ISPCTRL_SYNC_DETECT_SHIFT)
-+#define ISPCTRL_SYNC_DETECT_VSRISE	(0x3 << ISPCTRL_SYNC_DETECT_SHIFT)
-+#define ISPCTRL_SYNC_DETECT_MASK	(0x3 << ISPCTRL_SYNC_DETECT_SHIFT)
-+
-+#define ISPCTRL_CCDC_RAM_EN		(1 << 16)
-+#define ISPCTRL_PREV_RAM_EN		(1 << 17)
-+#define ISPCTRL_SBL_RD_RAM_EN		(1 << 18)
-+#define ISPCTRL_SBL_WR1_RAM_EN		(1 << 19)
-+#define ISPCTRL_SBL_WR0_RAM_EN		(1 << 20)
-+#define ISPCTRL_SBL_AUTOIDLE		(1 << 21)
-+#define ISPCTRL_SBL_SHARED_WPORTC	(1 << 26)
-+#define ISPCTRL_SBL_SHARED_RPORTA	(1 << 27)
-+#define ISPCTRL_SBL_SHARED_RPORTB	(1 << 28)
-+#define ISPCTRL_JPEG_FLUSH		(1 << 30)
-+#define ISPCTRL_CCDC_FLUSH		(1 << 31)
-+
-+#define ISPSECURE_SECUREMODE		0
-+
-+#define ISPTCTRL_CTRL_DIV_LOW		0x0
-+#define ISPTCTRL_CTRL_DIV_HIGH		0x1
-+#define ISPTCTRL_CTRL_DIV_BYPASS	0x1F
-+
-+#define ISPTCTRL_CTRL_DIVA_SHIFT	0
-+#define ISPTCTRL_CTRL_DIVA_MASK		(0x1F << ISPTCTRL_CTRL_DIVA_SHIFT)
-+
-+#define ISPTCTRL_CTRL_DIVB_SHIFT	5
-+#define ISPTCTRL_CTRL_DIVB_MASK		(0x1F << ISPTCTRL_CTRL_DIVB_SHIFT)
-+
-+#define ISPTCTRL_CTRL_DIVC_SHIFT	10
-+#define ISPTCTRL_CTRL_DIVC_NOCLOCK	(0x0 << 10)
-+
-+#define ISPTCTRL_CTRL_SHUTEN		(1 << 21)
-+#define ISPTCTRL_CTRL_PSTRBEN		(1 << 22)
-+#define ISPTCTRL_CTRL_STRBEN		(1 << 23)
-+#define ISPTCTRL_CTRL_SHUTPOL		(1 << 24)
-+#define ISPTCTRL_CTRL_STRBPSTRBPOL	(1 << 26)
-+
-+#define ISPTCTRL_CTRL_INSEL_SHIFT	27
-+#define ISPTCTRL_CTRL_INSEL_PARALLEL	(0x0 << 27)
-+#define ISPTCTRL_CTRL_INSEL_CSIA	(0x1 << 27)
-+#define ISPTCTRL_CTRL_INSEL_CSIB	(0x2 << 27)
-+
-+#define ISPTCTRL_CTRL_GRESETEn		(1 << 29)
-+#define ISPTCTRL_CTRL_GRESETPOL		(1 << 30)
-+#define ISPTCTRL_CTRL_GRESETDIR		(1 << 31)
-+
-+#define ISPTCTRL_FRAME_SHUT_SHIFT		0
-+#define ISPTCTRL_FRAME_PSTRB_SHIFT		6
-+#define ISPTCTRL_FRAME_STRB_SHIFT		12
-+
-+#define ISPCCDC_PID_PREV_SHIFT			0
-+#define ISPCCDC_PID_CID_SHIFT			8
-+#define ISPCCDC_PID_TID_SHIFT			16
-+
-+#define ISPCCDC_PCR_EN				1
-+#define ISPCCDC_PCR_BUSY			(1 << 1)
-+
-+#define ISPCCDC_SYN_MODE_VDHDOUT		0x1
-+#define ISPCCDC_SYN_MODE_FLDOUT			(1 << 1)
-+#define ISPCCDC_SYN_MODE_VDPOL			(1 << 2)
-+#define ISPCCDC_SYN_MODE_HDPOL			(1 << 3)
-+#define ISPCCDC_SYN_MODE_FLDPOL			(1 << 4)
-+#define ISPCCDC_SYN_MODE_EXWEN			(1 << 5)
-+#define ISPCCDC_SYN_MODE_DATAPOL		(1 << 6)
-+#define ISPCCDC_SYN_MODE_FLDMODE		(1 << 7)
-+#define ISPCCDC_SYN_MODE_DATSIZ_MASK		(0x7 << 8)
-+#define ISPCCDC_SYN_MODE_DATSIZ_8_16		(0x0 << 8)
-+#define ISPCCDC_SYN_MODE_DATSIZ_12		(0x4 << 8)
-+#define ISPCCDC_SYN_MODE_DATSIZ_11		(0x5 << 8)
-+#define ISPCCDC_SYN_MODE_DATSIZ_10		(0x6 << 8)
-+#define ISPCCDC_SYN_MODE_DATSIZ_8		(0x7 << 8)
-+#define ISPCCDC_SYN_MODE_PACK8			(1 << 11)
-+#define ISPCCDC_SYN_MODE_INPMOD_MASK		(3 << 12)
-+#define ISPCCDC_SYN_MODE_INPMOD_RAW		(0 << 12)
-+#define ISPCCDC_SYN_MODE_INPMOD_YCBCR16		(1 << 12)
-+#define ISPCCDC_SYN_MODE_INPMOD_YCBCR8		(2 << 12)
-+#define ISPCCDC_SYN_MODE_LPF			(1 << 14)
-+#define ISPCCDC_SYN_MODE_FLDSTAT		(1 << 15)
-+#define ISPCCDC_SYN_MODE_VDHDEN			(1 << 16)
-+#define ISPCCDC_SYN_MODE_WEN			(1 << 17)
-+#define ISPCCDC_SYN_MODE_VP2SDR			(1 << 18)
-+#define ISPCCDC_SYN_MODE_SDR2RSZ		(1 << 19)
-+
-+#define ISPCCDC_HD_VD_WID_VDW_SHIFT		0
-+#define ISPCCDC_HD_VD_WID_HDW_SHIFT		16
-+
-+#define ISPCCDC_PIX_LINES_HLPRF_SHIFT		0
-+#define ISPCCDC_PIX_LINES_PPLN_SHIFT		16
-+
-+#define ISPCCDC_HORZ_INFO_NPH_SHIFT		0
-+#define ISPCCDC_HORZ_INFO_NPH_MASK		0xFFFF8000
-+#define ISPCCDC_HORZ_INFO_SPH_MASK		0x1000FFFF
-+#define ISPCCDC_HORZ_INFO_SPH_SHIFT		16
-+
-+#define ISPCCDC_VERT_START_SLV0_SHIFT		16
-+#define ISPCCDC_VERT_START_SLV0_MASK		0x1000FFFF
-+#define ISPCCDC_VERT_START_SLV1_SHIFT		0
-+
-+#define ISPCCDC_VERT_LINES_NLV_MASK		0xFFFF8000
-+#define ISPCCDC_VERT_LINES_NLV_SHIFT		0
-+
-+#define ISPCCDC_CULLING_CULV_SHIFT		0
-+#define ISPCCDC_CULLING_CULHODD_SHIFT		16
-+#define ISPCCDC_CULLING_CULHEVN_SHIFT		24
-+
-+#define ISPCCDC_HSIZE_OFF_SHIFT			0
-+
-+#define ISPCCDC_SDOFST_FINV			(1 << 14)
-+#define ISPCCDC_SDOFST_FOFST_1L			0
-+#define ISPCCDC_SDOFST_FOFST_4L			(3 << 12)
-+#define ISPCCDC_SDOFST_LOFST3_SHIFT		0
-+#define ISPCCDC_SDOFST_LOFST2_SHIFT		3
-+#define ISPCCDC_SDOFST_LOFST1_SHIFT		6
-+#define ISPCCDC_SDOFST_LOFST0_SHIFT		9
-+#define EVENEVEN				1
-+#define ODDEVEN					2
-+#define EVENODD					3
-+#define ODDODD					4
-+
-+#define ISPCCDC_CLAMP_OBGAIN_SHIFT		0
-+#define ISPCCDC_CLAMP_OBST_SHIFT		10
-+#define ISPCCDC_CLAMP_OBSLN_SHIFT		25
-+#define ISPCCDC_CLAMP_OBSLEN_SHIFT		28
-+#define ISPCCDC_CLAMP_CLAMPEN			(1 << 31)
-+
-+#define ISPCCDC_COLPTN_R_Ye			0x0
-+#define ISPCCDC_COLPTN_Gr_Cy			0x1
-+#define ISPCCDC_COLPTN_Gb_G			0x2
-+#define ISPCCDC_COLPTN_B_Mg			0x3
-+#define ISPCCDC_COLPTN_CP0PLC0_SHIFT		0
-+#define ISPCCDC_COLPTN_CP0PLC1_SHIFT		2
-+#define ISPCCDC_COLPTN_CP0PLC2_SHIFT		4
-+#define ISPCCDC_COLPTN_CP0PLC3_SHIFT		6
-+#define ISPCCDC_COLPTN_CP1PLC0_SHIFT		8
-+#define ISPCCDC_COLPTN_CP1PLC1_SHIFT		10
-+#define ISPCCDC_COLPTN_CP1PLC2_SHIFT		12
-+#define ISPCCDC_COLPTN_CP1PLC3_SHIFT		14
-+#define ISPCCDC_COLPTN_CP2PLC0_SHIFT		16
-+#define ISPCCDC_COLPTN_CP2PLC1_SHIFT		18
-+#define ISPCCDC_COLPTN_CP2PLC2_SHIFT		20
-+#define ISPCCDC_COLPTN_CP2PLC3_SHIFT		22
-+#define ISPCCDC_COLPTN_CP3PLC0_SHIFT		24
-+#define ISPCCDC_COLPTN_CP3PLC1_SHIFT		26
-+#define ISPCCDC_COLPTN_CP3PLC2_SHIFT		28
-+#define ISPCCDC_COLPTN_CP3PLC3_SHIFT		30
-+
-+#define ISPCCDC_BLKCMP_B_MG_SHIFT		0
-+#define ISPCCDC_BLKCMP_GB_G_SHIFT		8
-+#define ISPCCDC_BLKCMP_GR_CY_SHIFT		16
-+#define ISPCCDC_BLKCMP_R_YE_SHIFT		24
-+
-+#define ISPCCDC_FPC_FPNUM_SHIFT			0
-+#define ISPCCDC_FPC_FPCEN			(1 << 15)
-+#define ISPCCDC_FPC_FPERR			(1 << 16)
-+
-+#define ISPCCDC_VDINT_1_SHIFT			0
-+#define ISPCCDC_VDINT_0_SHIFT			16
-+#define ISPCCDC_VDINT_0_MASK			0x7FFF
-+#define ISPCCDC_VDINT_1_MASK			0x7FFF
-+
-+#define ISPCCDC_ALAW_GWDI_12_3			(0x3 << 0)
-+#define ISPCCDC_ALAW_GWDI_11_2			(0x4 << 0)
-+#define ISPCCDC_ALAW_GWDI_10_1			(0x5 << 0)
-+#define ISPCCDC_ALAW_GWDI_9_0			(0x6 << 0)
-+#define ISPCCDC_ALAW_CCDTBL			(1 << 3)
-+
-+#define ISPCCDC_REC656IF_R656ON			1
-+#define ISPCCDC_REC656IF_ECCFVH			(1 << 1)
-+
-+#define ISPCCDC_CFG_BW656			(1 << 5)
-+#define ISPCCDC_CFG_FIDMD_SHIFT			6
-+#define ISPCCDC_CFG_WENLOG			(1 << 8)
-+#define ISPCCDC_CFG_WENLOG_AND			(0 << 8)
-+#define ISPCCDC_CFG_WENLOG_OR		(1 << 8)
-+#define ISPCCDC_CFG_Y8POS			(1 << 11)
-+#define ISPCCDC_CFG_BSWD			(1 << 12)
-+#define ISPCCDC_CFG_MSBINVI			(1 << 13)
-+#define ISPCCDC_CFG_VDLC			(1 << 15)
-+
-+#define ISPCCDC_FMTCFG_FMTEN			0x1
-+#define ISPCCDC_FMTCFG_LNALT			(1 << 1)
-+#define ISPCCDC_FMTCFG_LNUM_SHIFT		2
-+#define ISPCCDC_FMTCFG_PLEN_ODD_SHIFT		4
-+#define ISPCCDC_FMTCFG_PLEN_EVEN_SHIFT		8
-+#define ISPCCDC_FMTCFG_VPIN_MASK		0x00007000
-+#define ISPCCDC_FMTCFG_VPIN_12_3		(0x3 << 12)
-+#define ISPCCDC_FMTCFG_VPIN_11_2		(0x4 << 12)
-+#define ISPCCDC_FMTCFG_VPIN_10_1		(0x5 << 12)
-+#define ISPCCDC_FMTCFG_VPIN_9_0			(0x6 << 12)
-+#define ISPCCDC_FMTCFG_VPEN			(1 << 15)
-+
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_MASK		0x003f0000
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_SHIFT		16
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_BY2		(0x0 << 16)
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_BY3		(0x1 << 16)
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_BY4		(0x2 << 16)
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_BY5		(0x3 << 16)
-+#define ISPCCDC_FMTCFG_VPIF_FRQ_BY6		(0x4 << 16)
-+
-+#define ISPCCDC_FMT_HORZ_FMTLNH_SHIFT		0
-+#define ISPCCDC_FMT_HORZ_FMTSPH_SHIFT		16
-+
-+#define ISPCCDC_FMT_VERT_FMTLNV_SHIFT		0
-+#define ISPCCDC_FMT_VERT_FMTSLV_SHIFT		16
-+
-+#define ISPCCDC_FMT_HORZ_FMTSPH_MASK		0x1FFF0000
-+#define ISPCCDC_FMT_HORZ_FMTLNH_MASK		0x1FFF
-+
-+#define ISPCCDC_FMT_VERT_FMTSLV_MASK		0x1FFF0000
-+#define ISPCCDC_FMT_VERT_FMTLNV_MASK		0x1FFF
-+
-+#define ISPCCDC_VP_OUT_HORZ_ST_SHIFT		0
-+#define ISPCCDC_VP_OUT_HORZ_NUM_SHIFT		4
-+#define ISPCCDC_VP_OUT_VERT_NUM_SHIFT		17
-+
-+#define ISPRSZ_PID_PREV_SHIFT			0
-+#define ISPRSZ_PID_CID_SHIFT			8
-+#define ISPRSZ_PID_TID_SHIFT			16
-+
-+#define ISPRSZ_PCR_ENABLE			(1 << 0)
-+#define ISPRSZ_PCR_BUSY				(1 << 1)
-+#define ISPRSZ_PCR_ONESHOT			(1 << 2)
-+
-+#define ISPRSZ_CNT_HRSZ_SHIFT			0
-+#define ISPRSZ_CNT_HRSZ_MASK			\
-+	(0x3FF << ISPRSZ_CNT_HRSZ_SHIFT)
-+#define ISPRSZ_CNT_VRSZ_SHIFT			10
-+#define ISPRSZ_CNT_VRSZ_MASK			\
-+	(0x3FF << ISPRSZ_CNT_VRSZ_SHIFT)
-+#define ISPRSZ_CNT_HSTPH_SHIFT			20
-+#define ISPRSZ_CNT_HSTPH_MASK			(0x7 << ISPRSZ_CNT_HSTPH_SHIFT)
-+#define ISPRSZ_CNT_VSTPH_SHIFT			23
-+#define ISPRSZ_CNT_VSTPH_MASK			(0x7 << ISPRSZ_CNT_VSTPH_SHIFT)
-+#define ISPRSZ_CNT_YCPOS			(1 << 26)
-+#define ISPRSZ_CNT_INPTYP			(1 << 27)
-+#define ISPRSZ_CNT_INPSRC			(1 << 28)
-+#define ISPRSZ_CNT_CBILIN			(1 << 29)
-+
-+#define ISPRSZ_OUT_SIZE_HORZ_SHIFT		0
-+#define ISPRSZ_OUT_SIZE_HORZ_MASK		\
-+	(0xFFF << ISPRSZ_OUT_SIZE_HORZ_SHIFT)
-+#define ISPRSZ_OUT_SIZE_VERT_SHIFT		16
-+#define ISPRSZ_OUT_SIZE_VERT_MASK		\
-+	(0xFFF << ISPRSZ_OUT_SIZE_VERT_SHIFT)
-+
-+#define ISPRSZ_IN_START_HORZ_ST_SHIFT		0
-+#define ISPRSZ_IN_START_HORZ_ST_MASK		\
-+	(0x1FFF << ISPRSZ_IN_START_HORZ_ST_SHIFT)
-+#define ISPRSZ_IN_START_VERT_ST_SHIFT		16
-+#define ISPRSZ_IN_START_VERT_ST_MASK		\
-+	(0x1FFF << ISPRSZ_IN_START_VERT_ST_SHIFT)
-+
-+#define ISPRSZ_IN_SIZE_HORZ_SHIFT		0
-+#define ISPRSZ_IN_SIZE_HORZ_MASK		\
-+	(0x1FFF << ISPRSZ_IN_SIZE_HORZ_SHIFT)
-+#define ISPRSZ_IN_SIZE_VERT_SHIFT		16
-+#define ISPRSZ_IN_SIZE_VERT_MASK		\
-+	(0x1FFF << ISPRSZ_IN_SIZE_VERT_SHIFT)
-+
-+#define ISPRSZ_SDR_INADD_ADDR_SHIFT		0
-+#define ISPRSZ_SDR_INADD_ADDR_MASK		0xFFFFFFFF
-+
-+#define ISPRSZ_SDR_INOFF_OFFSET_SHIFT		0
-+#define ISPRSZ_SDR_INOFF_OFFSET_MASK		\
-+	(0xFFFF << ISPRSZ_SDR_INOFF_OFFSET_SHIFT)
-+
-+#define ISPRSZ_SDR_OUTADD_ADDR_SHIFT		0
-+#define ISPRSZ_SDR_OUTADD_ADDR_MASK		0xFFFFFFFF
-+
-+
-+#define ISPRSZ_SDR_OUTOFF_OFFSET_SHIFT		0
-+#define ISPRSZ_SDR_OUTOFF_OFFSET_MASK		\
-+	(0xFFFF << ISPRSZ_SDR_OUTOFF_OFFSET_SHIFT)
-+
-+#define ISPRSZ_HFILT_COEF0_SHIFT		0
-+#define ISPRSZ_HFILT_COEF0_MASK			\
-+	(0x3FF << ISPRSZ_HFILT_COEF0_SHIFT)
-+#define ISPRSZ_HFILT_COEF1_SHIFT		16
-+#define ISPRSZ_HFILT_COEF1_MASK			\
-+	(0x3FF << ISPRSZ_HFILT_COEF1_SHIFT)
-+
-+#define ISPRSZ_HFILT32_COEF2_SHIFT		0
-+#define ISPRSZ_HFILT32_COEF2_MASK		0x3FF
-+#define ISPRSZ_HFILT32_COEF3_SHIFT		16
-+#define ISPRSZ_HFILT32_COEF3_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT54_COEF4_SHIFT		0
-+#define ISPRSZ_HFILT54_COEF4_MASK		0x3FF
-+#define ISPRSZ_HFILT54_COEF5_SHIFT		16
-+#define ISPRSZ_HFILT54_COEF5_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT76_COEFF6_SHIFT		0
-+#define ISPRSZ_HFILT76_COEFF6_MASK		0x3FF
-+#define ISPRSZ_HFILT76_COEFF7_SHIFT		16
-+#define ISPRSZ_HFILT76_COEFF7_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT98_COEFF8_SHIFT		0
-+#define ISPRSZ_HFILT98_COEFF8_MASK		0x3FF
-+#define ISPRSZ_HFILT98_COEFF9_SHIFT		16
-+#define ISPRSZ_HFILT98_COEFF9_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT1110_COEF10_SHIFT		0
-+#define ISPRSZ_HFILT1110_COEF10_MASK		0x3FF
-+#define ISPRSZ_HFILT1110_COEF11_SHIFT		16
-+#define ISPRSZ_HFILT1110_COEF11_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT1312_COEFF12_SHIFT		0
-+#define ISPRSZ_HFILT1312_COEFF12_MASK		0x3FF
-+#define ISPRSZ_HFILT1312_COEFF13_SHIFT		16
-+#define ISPRSZ_HFILT1312_COEFF13_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT1514_COEFF14_SHIFT		0
-+#define ISPRSZ_HFILT1514_COEFF14_MASK		0x3FF
-+#define ISPRSZ_HFILT1514_COEFF15_SHIFT		16
-+#define ISPRSZ_HFILT1514_COEFF15_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT1716_COEF16_SHIFT		0
-+#define ISPRSZ_HFILT1716_COEF16_MASK		0x3FF
-+#define ISPRSZ_HFILT1716_COEF17_SHIFT		16
-+#define ISPRSZ_HFILT1716_COEF17_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT1918_COEF18_SHIFT		0
-+#define ISPRSZ_HFILT1918_COEF18_MASK		0x3FF
-+#define ISPRSZ_HFILT1918_COEF19_SHIFT		16
-+#define ISPRSZ_HFILT1918_COEF19_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT2120_COEF20_SHIFT		0
-+#define ISPRSZ_HFILT2120_COEF20_MASK		0x3FF
-+#define ISPRSZ_HFILT2120_COEF21_SHIFT		16
-+#define ISPRSZ_HFILT2120_COEF21_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT2322_COEF22_SHIFT		0
-+#define ISPRSZ_HFILT2322_COEF22_MASK		0x3FF
-+#define ISPRSZ_HFILT2322_COEF23_SHIFT		16
-+#define ISPRSZ_HFILT2322_COEF23_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT2524_COEF24_SHIFT		0
-+#define ISPRSZ_HFILT2524_COEF24_MASK		0x3FF
-+#define ISPRSZ_HFILT2524_COEF25_SHIFT		16
-+#define ISPRSZ_HFILT2524_COEF25_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT2726_COEF26_SHIFT		0
-+#define ISPRSZ_HFILT2726_COEF26_MASK		0x3FF
-+#define ISPRSZ_HFILT2726_COEF27_SHIFT		16
-+#define ISPRSZ_HFILT2726_COEF27_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT2928_COEF28_SHIFT		0
-+#define ISPRSZ_HFILT2928_COEF28_MASK		0x3FF
-+#define ISPRSZ_HFILT2928_COEF29_SHIFT		16
-+#define ISPRSZ_HFILT2928_COEF29_MASK		0x3FF0000
-+
-+#define ISPRSZ_HFILT3130_COEF30_SHIFT		0
-+#define ISPRSZ_HFILT3130_COEF30_MASK		0x3FF
-+#define ISPRSZ_HFILT3130_COEF31_SHIFT		16
-+#define ISPRSZ_HFILT3130_COEF31_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT_COEF0_SHIFT		0
-+#define ISPRSZ_VFILT_COEF0_MASK			\
-+	(0x3FF << ISPRSZ_VFILT_COEF0_SHIFT)
-+#define ISPRSZ_VFILT_COEF1_SHIFT		16
-+#define ISPRSZ_VFILT_COEF1_MASK			\
-+	(0x3FF << ISPRSZ_VFILT_COEF1_SHIFT)
-+
-+#define ISPRSZ_VFILT10_COEF0_SHIFT		0
-+#define ISPRSZ_VFILT10_COEF0_MASK		0x3FF
-+#define ISPRSZ_VFILT10_COEF1_SHIFT		16
-+#define ISPRSZ_VFILT10_COEF1_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT32_COEF2_SHIFT		0
-+#define ISPRSZ_VFILT32_COEF2_MASK		0x3FF
-+#define ISPRSZ_VFILT32_COEF3_SHIFT		16
-+#define ISPRSZ_VFILT32_COEF3_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT54_COEF4_SHIFT		0
-+#define ISPRSZ_VFILT54_COEF4_MASK		0x3FF
-+#define ISPRSZ_VFILT54_COEF5_SHIFT		16
-+#define ISPRSZ_VFILT54_COEF5_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT76_COEFF6_SHIFT		0
-+#define ISPRSZ_VFILT76_COEFF6_MASK		0x3FF
-+#define ISPRSZ_VFILT76_COEFF7_SHIFT		16
-+#define ISPRSZ_VFILT76_COEFF7_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT98_COEFF8_SHIFT		0
-+#define ISPRSZ_VFILT98_COEFF8_MASK		0x3FF
-+#define ISPRSZ_VFILT98_COEFF9_SHIFT		16
-+#define ISPRSZ_VFILT98_COEFF9_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT1110_COEF10_SHIFT		0
-+#define ISPRSZ_VFILT1110_COEF10_MASK		0x3FF
-+#define ISPRSZ_VFILT1110_COEF11_SHIFT		16
-+#define ISPRSZ_VFILT1110_COEF11_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT1312_COEFF12_SHIFT		0
-+#define ISPRSZ_VFILT1312_COEFF12_MASK		0x3FF
-+#define ISPRSZ_VFILT1312_COEFF13_SHIFT		16
-+#define ISPRSZ_VFILT1312_COEFF13_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT1514_COEFF14_SHIFT		0
-+#define ISPRSZ_VFILT1514_COEFF14_MASK		0x3FF
-+#define ISPRSZ_VFILT1514_COEFF15_SHIFT		16
-+#define ISPRSZ_VFILT1514_COEFF15_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT1716_COEF16_SHIFT		0
-+#define ISPRSZ_VFILT1716_COEF16_MASK		0x3FF
-+#define ISPRSZ_VFILT1716_COEF17_SHIFT		16
-+#define ISPRSZ_VFILT1716_COEF17_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT1918_COEF18_SHIFT		0
-+#define ISPRSZ_VFILT1918_COEF18_MASK		0x3FF
-+#define ISPRSZ_VFILT1918_COEF19_SHIFT		16
-+#define ISPRSZ_VFILT1918_COEF19_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT2120_COEF20_SHIFT		0
-+#define ISPRSZ_VFILT2120_COEF20_MASK		0x3FF
-+#define ISPRSZ_VFILT2120_COEF21_SHIFT		16
-+#define ISPRSZ_VFILT2120_COEF21_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT2322_COEF22_SHIFT		0
-+#define ISPRSZ_VFILT2322_COEF22_MASK		0x3FF
-+#define ISPRSZ_VFILT2322_COEF23_SHIFT		16
-+#define ISPRSZ_VFILT2322_COEF23_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT2524_COEF24_SHIFT		0
-+#define ISPRSZ_VFILT2524_COEF24_MASK		0x3FF
-+#define ISPRSZ_VFILT2524_COEF25_SHIFT		16
-+#define ISPRSZ_VFILT2524_COEF25_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT2726_COEF26_SHIFT		0
-+#define ISPRSZ_VFILT2726_COEF26_MASK		0x3FF
-+#define ISPRSZ_VFILT2726_COEF27_SHIFT		16
-+#define ISPRSZ_VFILT2726_COEF27_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT2928_COEF28_SHIFT		0
-+#define ISPRSZ_VFILT2928_COEF28_MASK		0x3FF
-+#define ISPRSZ_VFILT2928_COEF29_SHIFT		16
-+#define ISPRSZ_VFILT2928_COEF29_MASK		0x3FF0000
-+
-+#define ISPRSZ_VFILT3130_COEF30_SHIFT		0
-+#define ISPRSZ_VFILT3130_COEF30_MASK		0x3FF
-+#define ISPRSZ_VFILT3130_COEF31_SHIFT		16
-+#define ISPRSZ_VFILT3130_COEF31_MASK		0x3FF0000
-+
-+#define ISPRSZ_YENH_CORE_SHIFT			0
-+#define ISPRSZ_YENH_CORE_MASK			\
-+	(0xFF << ISPRSZ_YENH_CORE_SHIFT)
-+#define ISPRSZ_YENH_SLOP_SHIFT			8
-+#define ISPRSZ_YENH_SLOP_MASK			\
-+	(0xF << ISPRSZ_YENH_SLOP_SHIFT)
-+#define ISPRSZ_YENH_GAIN_SHIFT			12
-+#define ISPRSZ_YENH_GAIN_MASK			\
-+	(0xF << ISPRSZ_YENH_GAIN_SHIFT)
-+#define ISPRSZ_YENH_ALGO_SHIFT			16
-+#define ISPRSZ_YENH_ALGO_MASK			\
-+	(0x3 << ISPRSZ_YENH_ALGO_SHIFT)
-+
-+#define ISPH3A_PCR_AEW_ALAW_EN_SHIFT		1
-+#define ISPH3A_PCR_AF_MED_TH_SHIFT		3
-+#define ISPH3A_PCR_AF_RGBPOS_SHIFT		11
-+#define ISPH3A_PCR_AEW_AVE2LMT_SHIFT		22
-+#define ISPH3A_PCR_AEW_AVE2LMT_MASK		0xFFC00000
-+#define ISPH3A_PCR_BUSYAF			(1 << 15)
-+#define ISPH3A_PCR_BUSYAEAWB			(1 << 18)
-+
-+#define ISPH3A_AEWWIN1_WINHC_SHIFT		0
-+#define ISPH3A_AEWWIN1_WINHC_MASK		0x3F
-+#define ISPH3A_AEWWIN1_WINVC_SHIFT		6
-+#define ISPH3A_AEWWIN1_WINVC_MASK		0x1FC0
-+#define ISPH3A_AEWWIN1_WINW_SHIFT		13
-+#define ISPH3A_AEWWIN1_WINW_MASK		0xFE000
-+#define ISPH3A_AEWWIN1_WINH_SHIFT		24
-+#define ISPH3A_AEWWIN1_WINH_MASK		0x7F000000
-+
-+#define ISPH3A_AEWINSTART_WINSH_SHIFT		0
-+#define ISPH3A_AEWINSTART_WINSH_MASK		0x0FFF
-+#define ISPH3A_AEWINSTART_WINSV_SHIFT		16
-+#define ISPH3A_AEWINSTART_WINSV_MASK		0x0FFF0000
-+
-+#define ISPH3A_AEWINBLK_WINH_SHIFT		0
-+#define ISPH3A_AEWINBLK_WINH_MASK		0x7F
-+#define ISPH3A_AEWINBLK_WINSV_SHIFT		16
-+#define ISPH3A_AEWINBLK_WINSV_MASK		0x0FFF0000
-+
-+#define ISPH3A_AEWSUBWIN_AEWINCH_SHIFT		0
-+#define ISPH3A_AEWSUBWIN_AEWINCH_MASK		0x0F
-+#define ISPH3A_AEWSUBWIN_AEWINCV_SHIFT		8
-+#define ISPH3A_AEWSUBWIN_AEWINCV_MASK		0x0F00
-+
-+#define ISPHIST_PCR_ENABLE_SHIFT	0
-+#define ISPHIST_PCR_ENABLE_MASK		0x01
-+#define ISPHIST_PCR_ENABLE		(1 << ISPHIST_PCR_ENABLE_SHIFT)
-+#define ISPHIST_PCR_BUSY		0x02
-+
-+#define ISPHIST_CNT_DATASIZE_SHIFT	8
-+#define ISPHIST_CNT_DATASIZE_MASK	0x0100
-+#define ISPHIST_CNT_CLEAR_SHIFT		7
-+#define ISPHIST_CNT_CLEAR_MASK		0x080
-+#define ISPHIST_CNT_CLEAR		(1 << ISPHIST_CNT_CLEAR_SHIFT)
-+#define ISPHIST_CNT_CFA_SHIFT		6
-+#define ISPHIST_CNT_CFA_MASK		0x040
-+#define ISPHIST_CNT_BINS_SHIFT		4
-+#define ISPHIST_CNT_BINS_MASK		0x030
-+#define ISPHIST_CNT_SOURCE_SHIFT	3
-+#define ISPHIST_CNT_SOURCE_MASK		0x08
-+#define ISPHIST_CNT_SHIFT_SHIFT		0
-+#define ISPHIST_CNT_SHIFT_MASK		0x07
-+
-+#define ISPHIST_WB_GAIN_WG00_SHIFT	24
-+#define ISPHIST_WB_GAIN_WG00_MASK	0xFF000000
-+#define ISPHIST_WB_GAIN_WG01_SHIFT	16
-+#define ISPHIST_WB_GAIN_WG01_MASK	0xFF0000
-+#define ISPHIST_WB_GAIN_WG02_SHIFT	8
-+#define ISPHIST_WB_GAIN_WG02_MASK	0xFF00
-+#define ISPHIST_WB_GAIN_WG03_SHIFT	0
-+#define ISPHIST_WB_GAIN_WG03_MASK	0xFF
-+
-+#define ISPHIST_REG_START_END_MASK		0x3FFF
-+#define ISPHIST_REG_START_SHIFT			16
-+#define ISPHIST_REG_END_SHIFT			0
-+#define ISPHIST_REG_START_MASK			(ISPHIST_REG_START_END_MASK << \
-+						 ISPHIST_REG_START_SHIFT)
-+#define ISPHIST_REG_END_MASK			(ISPHIST_REG_START_END_MASK << \
-+						 ISPHIST_REG_END_SHIFT)
-+
-+#define ISPHIST_REG_MASK			(ISPHIST_REG_START_MASK | \
-+						 ISPHIST_REG_END_MASK)
-+
-+#define ISPHIST_ADDR_SHIFT			0
-+#define ISPHIST_ADDR_MASK			0x3FF
-+
-+#define ISPHIST_DATA_SHIFT			0
-+#define ISPHIST_DATA_MASK			0xFFFFF
-+
-+#define ISPHIST_RADD_SHIFT			0
-+#define ISPHIST_RADD_MASK			0xFFFFFFFF
-+
-+#define ISPHIST_RADD_OFF_SHIFT			0
-+#define ISPHIST_RADD_OFF_MASK			0xFFFF
-+
-+#define ISPHIST_HV_INFO_HSIZE_SHIFT		16
-+#define ISPHIST_HV_INFO_HSIZE_MASK		0x3FFF0000
-+#define ISPHIST_HV_INFO_VSIZE_SHIFT		0
-+#define ISPHIST_HV_INFO_VSIZE_MASK		0x3FFF
-+
-+#define ISPHIST_HV_INFO_MASK			0x3FFF3FFF
-+
-+#define ISPCCDC_LSC_ENABLE			1
-+#define ISPCCDC_LSC_BUSY			(1 << 7)
-+#define ISPCCDC_LSC_GAIN_MODE_N_MASK		0x700
-+#define ISPCCDC_LSC_GAIN_MODE_N_SHIFT		8
-+#define ISPCCDC_LSC_GAIN_MODE_M_MASK		0x3800
-+#define ISPCCDC_LSC_GAIN_MODE_M_SHIFT		12
-+#define ISPCCDC_LSC_GAIN_FORMAT_MASK		0xE
-+#define ISPCCDC_LSC_GAIN_FORMAT_SHIFT		1
-+#define ISPCCDC_LSC_AFTER_REFORMATTER_MASK	(1<<6)
-+
-+#define ISPCCDC_LSC_INITIAL_X_MASK		0x3F
-+#define ISPCCDC_LSC_INITIAL_X_SHIFT		0
-+#define ISPCCDC_LSC_INITIAL_Y_MASK		0x3F0000
-+#define ISPCCDC_LSC_INITIAL_Y_SHIFT		16
-+
-+/* -----------------------------------------------------------------------------
-+ * CSI2 receiver registers (ES2.0)
-+ */
-+
-+#define ISPCSI2_REVISION			(0x000)
-+#define ISPCSI2_SYSCONFIG			(0x010)
-+#define ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SHIFT	12
-+#define ISPCSI2_SYSCONFIG_MSTANDBY_MODE_MASK	\
-+	(0x3 << ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCSI2_SYSCONFIG_MSTANDBY_MODE_FORCE	\
-+	(0x0 << ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCSI2_SYSCONFIG_MSTANDBY_MODE_NO	\
-+	(0x1 << ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SMART	\
-+	(0x2 << ISPCSI2_SYSCONFIG_MSTANDBY_MODE_SHIFT)
-+#define ISPCSI2_SYSCONFIG_SOFT_RESET		(1 << 1)
-+#define ISPCSI2_SYSCONFIG_AUTO_IDLE		(1 << 0)
-+
-+#define ISPCSI2_SYSSTATUS			(0x014)
-+#define ISPCSI2_SYSSTATUS_RESET_DONE		(1 << 0)
-+
-+#define ISPCSI2_IRQSTATUS			(0x018)
-+#define ISPCSI2_IRQSTATUS_OCP_ERR_IRQ		(1 << 14)
-+#define ISPCSI2_IRQSTATUS_SHORT_PACKET_IRQ	(1 << 13)
-+#define ISPCSI2_IRQSTATUS_ECC_CORRECTION_IRQ	(1 << 12)
-+#define ISPCSI2_IRQSTATUS_ECC_NO_CORRECTION_IRQ	(1 << 11)
-+#define ISPCSI2_IRQSTATUS_COMPLEXIO2_ERR_IRQ	(1 << 10)
-+#define ISPCSI2_IRQSTATUS_COMPLEXIO1_ERR_IRQ	(1 << 9)
-+#define ISPCSI2_IRQSTATUS_FIFO_OVF_IRQ		(1 << 8)
-+#define ISPCSI2_IRQSTATUS_CONTEXT(n)		(1 << (n))
-+
-+#define ISPCSI2_IRQENABLE			(0x01c)
-+#define ISPCSI2_CTRL				(0x040)
-+#define ISPCSI2_CTRL_VP_CLK_EN			(1 << 15)
-+#define ISPCSI2_CTRL_VP_ONLY_EN			(1 << 11)
-+#define ISPCSI2_CTRL_VP_OUT_CTRL_SHIFT		8
-+#define ISPCSI2_CTRL_VP_OUT_CTRL_MASK		\
-+	(3 << ISPCSI2_CTRL_VP_OUT_CTRL_SHIFT)
-+#define ISPCSI2_CTRL_DBG_EN			(1 << 7)
-+#define ISPCSI2_CTRL_BURST_SIZE_SHIFT		5
-+#define ISPCSI2_CTRL_BURST_SIZE_MASK		\
-+	(3 << ISPCSI2_CTRL_BURST_SIZE_SHIFT)
-+#define ISPCSI2_CTRL_FRAME			(1 << 3)
-+#define ISPCSI2_CTRL_ECC_EN			(1 << 2)
-+#define ISPCSI2_CTRL_SECURE			(1 << 1)
-+#define ISPCSI2_CTRL_IF_EN			(1 << 0)
-+
-+#define ISPCSI2_DBG_H				(0x044)
-+#define ISPCSI2_GNQ				(0x048)
-+#define ISPCSI2_PHY_CFG				(0x050)
-+#define ISPCSI2_PHY_CFG_RESET_CTRL		(1 << 30)
-+#define ISPCSI2_PHY_CFG_RESET_DONE		(1 << 29)
-+#define ISPCSI2_PHY_CFG_PWR_CMD_SHIFT		27
-+#define ISPCSI2_PHY_CFG_PWR_CMD_MASK		\
-+	(0x3 << ISPCSI2_PHY_CFG_PWR_CMD_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_CMD_OFF		\
-+	(0x0 << ISPCSI2_PHY_CFG_PWR_CMD_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_CMD_ON		\
-+	(0x1 << ISPCSI2_PHY_CFG_PWR_CMD_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_CMD_ULPW		\
-+	(0x2 << ISPCSI2_PHY_CFG_PWR_CMD_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_STATUS_SHIFT	25
-+#define ISPCSI2_PHY_CFG_PWR_STATUS_MASK		\
-+	(0x3 << ISPCSI2_PHY_CFG_PWR_STATUS_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_STATUS_OFF		\
-+	(0x0 << ISPCSI2_PHY_CFG_PWR_STATUS_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_STATUS_ON		\
-+	(0x1 << ISPCSI2_PHY_CFG_PWR_STATUS_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_STATUS_ULPW		\
-+	(0x2 << ISPCSI2_PHY_CFG_PWR_STATUS_SHIFT)
-+#define ISPCSI2_PHY_CFG_PWR_AUTO		(1 << 24)
-+
-+#define ISPCSI2_PHY_CFG_DATA_POL_SHIFT(n)	(3 + ((n) * 4))
-+#define ISPCSI2_PHY_CFG_DATA_POL_MASK(n)	\
-+	(0x1 << ISPCSI2_PHY_CFG_DATA_POL_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POL_PN(n)		\
-+	(0x0 << ISPCSI2_PHY_CFG_DATA_POL_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POL_NP(n)		\
-+	(0x1 << ISPCSI2_PHY_CFG_DATA_POL_SHIFT(n))
-+
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n)	((n) * 4)
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_MASK(n)	\
-+	(0x7 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_NC(n)	\
-+	(0x0 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_1(n)	\
-+	(0x1 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_2(n)	\
-+	(0x2 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_3(n)	\
-+	(0x3 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_4(n)	\
-+	(0x4 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+#define ISPCSI2_PHY_CFG_DATA_POSITION_5(n)	\
-+	(0x5 << ISPCSI2_PHY_CFG_DATA_POSITION_SHIFT(n))
-+
-+#define ISPCSI2_PHY_CFG_CLOCK_POL_SHIFT		3
-+#define ISPCSI2_PHY_CFG_CLOCK_POL_MASK		\
-+	(0x1 << ISPCSI2_PHY_CFG_CLOCK_POL_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POL_PN		\
-+	(0x0 << ISPCSI2_PHY_CFG_CLOCK_POL_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POL_NP		\
-+	(0x1 << ISPCSI2_PHY_CFG_CLOCK_POL_SHIFT)
-+
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT	0
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_MASK	\
-+	(0x7 << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_1	\
-+	(0x1 << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_2	\
-+	(0x2 << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_3	\
-+	(0x3 << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_4	\
-+	(0x4 << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT)
-+#define ISPCSI2_PHY_CFG_CLOCK_POSITION_5	\
-+	(0x5 << ISPCSI2_PHY_CFG_CLOCK_POSITION_SHIFT)
-+
-+#define ISPCSI2_PHY_IRQSTATUS			(0x054)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEALLULPMEXIT	(1 << 26)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEALLULPMENTER	(1 << 25)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEULPM5	(1 << 24)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEULPM4	(1 << 23)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEULPM3	(1 << 22)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEULPM2	(1 << 21)
-+#define ISPCSI2_PHY_IRQSTATUS_STATEULPM1	(1 << 20)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRCONTROL5	(1 << 19)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRCONTROL4	(1 << 18)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRCONTROL3	(1 << 17)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRCONTROL2	(1 << 16)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRCONTROL1	(1 << 15)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRESC5		(1 << 14)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRESC4		(1 << 13)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRESC3		(1 << 12)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRESC2		(1 << 11)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRESC1		(1 << 10)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTSYNCHS5	(1 << 9)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTSYNCHS4	(1 << 8)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTSYNCHS3	(1 << 7)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTSYNCHS2	(1 << 6)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTSYNCHS1	(1 << 5)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTHS5		(1 << 4)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTHS4		(1 << 3)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTHS3		(1 << 2)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTHS2		(1 << 1)
-+#define ISPCSI2_PHY_IRQSTATUS_ERRSOTHS1		1
-+
-+#define ISPCSI2_SHORT_PACKET			(0x05c)
-+#define ISPCSI2_PHY_IRQENABLE			(0x060)
-+#define ISPCSI2_PHY_IRQENABLE_STATEALLULPMEXIT	(1 << 26)
-+#define ISPCSI2_PHY_IRQENABLE_STATEALLULPMENTER	(1 << 25)
-+#define ISPCSI2_PHY_IRQENABLE_STATEULPM5	(1 << 24)
-+#define ISPCSI2_PHY_IRQENABLE_STATEULPM4	(1 << 23)
-+#define ISPCSI2_PHY_IRQENABLE_STATEULPM3	(1 << 22)
-+#define ISPCSI2_PHY_IRQENABLE_STATEULPM2	(1 << 21)
-+#define ISPCSI2_PHY_IRQENABLE_STATEULPM1	(1 << 20)
-+#define ISPCSI2_PHY_IRQENABLE_ERRCONTROL5	(1 << 19)
-+#define ISPCSI2_PHY_IRQENABLE_ERRCONTROL4	(1 << 18)
-+#define ISPCSI2_PHY_IRQENABLE_ERRCONTROL3	(1 << 17)
-+#define ISPCSI2_PHY_IRQENABLE_ERRCONTROL2	(1 << 16)
-+#define ISPCSI2_PHY_IRQENABLE_ERRCONTROL1	(1 << 15)
-+#define ISPCSI2_PHY_IRQENABLE_ERRESC5		(1 << 14)
-+#define ISPCSI2_PHY_IRQENABLE_ERRESC4		(1 << 13)
-+#define ISPCSI2_PHY_IRQENABLE_ERRESC3		(1 << 12)
-+#define ISPCSI2_PHY_IRQENABLE_ERRESC2		(1 << 11)
-+#define ISPCSI2_PHY_IRQENABLE_ERRESC1		(1 << 10)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS5	(1 << 9)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS4	(1 << 8)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS3	(1 << 7)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS2	(1 << 6)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTSYNCHS1	(1 << 5)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTHS5		(1 << 4)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTHS4		(1 << 3)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTHS3		(1 << 2)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTHS2		(1 << 1)
-+#define ISPCSI2_PHY_IRQENABLE_ERRSOTHS1		(1 << 0)
-+
-+#define ISPCSI2_DBG_P				(0x068)
-+#define ISPCSI2_TIMING				(0x06c)
-+#define ISPCSI2_TIMING_FORCE_RX_MODE_IO(n)	(1 << ((16 * ((n) - 1)) + 15))
-+#define ISPCSI2_TIMING_STOP_STATE_X16_IO(n)	(1 << ((16 * ((n) - 1)) + 14))
-+#define ISPCSI2_TIMING_STOP_STATE_X4_IO(n)	(1 << ((16 * ((n) - 1)) + 13))
-+#define ISPCSI2_TIMING_STOP_STATE_COUNTER_IO_SHIFT(n)	(16 * ((n) - 1))
-+#define ISPCSI2_TIMING_STOP_STATE_COUNTER_IO_MASK(n)	\
-+	(0x1fff << ISPCSI2_TIMING_STOP_STATE_COUNTER_IO_SHIFT(n))
-+
-+#define ISPCSI2_CTX_CTRL1(n)			((0x070) + 0x20 * (n))
-+#define ISPCSI2_CTX_CTRL1_COUNT_SHIFT		8
-+#define ISPCSI2_CTX_CTRL1_COUNT_MASK		\
-+	(0xff << ISPCSI2_CTX_CTRL1_COUNT_SHIFT)
-+#define ISPCSI2_CTX_CTRL1_EOF_EN		(1 << 7)
-+#define ISPCSI2_CTX_CTRL1_EOL_EN		(1 << 6)
-+#define ISPCSI2_CTX_CTRL1_CS_EN			(1 << 5)
-+#define ISPCSI2_CTX_CTRL1_COUNT_UNLOCK		(1 << 4)
-+#define ISPCSI2_CTX_CTRL1_PING_PONG		(1 << 3)
-+#define ISPCSI2_CTX_CTRL1_CTX_EN		(1 << 0)
-+
-+#define ISPCSI2_CTX_CTRL2(n)			((0x074) + 0x20 * (n))
-+#define ISPCSI2_CTX_CTRL2_USER_DEF_MAP_SHIFT	13
-+#define ISPCSI2_CTX_CTRL2_USER_DEF_MAP_MASK	\
-+	(0x3 << ISPCSI2_CTX_CTRL2_USER_DEF_MAP_SHIFT)
-+#define ISPCSI2_CTX_CTRL2_VIRTUAL_ID_SHIFT	11
-+#define ISPCSI2_CTX_CTRL2_VIRTUAL_ID_MASK	\
-+	(0x3 <<	ISPCSI2_CTX_CTRL2_VIRTUAL_ID_SHIFT)
-+#define ISPCSI2_CTX_CTRL2_DPCM_PRED		(1 << 10)
-+#define ISPCSI2_CTX_CTRL2_FORMAT_SHIFT		0
-+#define ISPCSI2_CTX_CTRL2_FORMAT_MASK		\
-+	(0x3ff << ISPCSI2_CTX_CTRL2_FORMAT_SHIFT)
-+#define ISPCSI2_CTX_CTRL2_FRAME_SHIFT		16
-+#define ISPCSI2_CTX_CTRL2_FRAME_MASK		\
-+	(0xffff << ISPCSI2_CTX_CTRL2_FRAME_SHIFT)
-+
-+#define ISPCSI2_CTX_DAT_OFST(n)			((0x078) + 0x20 * (n))
-+#define ISPCSI2_CTX_DAT_OFST_OFST_SHIFT		0
-+#define ISPCSI2_CTX_DAT_OFST_OFST_MASK		\
-+	(0x1ffe0 << ISPCSI2_CTX_DAT_OFST_OFST_SHIFT)
-+
-+#define ISPCSI2_CTX_DAT_PING_ADDR(n)		((0x07c) + 0x20 * (n))
-+#define ISPCSI2_CTX_DAT_PONG_ADDR(n)		((0x080) + 0x20 * (n))
-+#define ISPCSI2_CTX_IRQENABLE(n)		((0x084) + 0x20 * (n))
-+#define ISPCSI2_CTX_IRQENABLE_ECC_CORRECTION_IRQ	(1 << 8)
-+#define ISPCSI2_CTX_IRQENABLE_LINE_NUMBER_IRQ	(1 << 7)
-+#define ISPCSI2_CTX_IRQENABLE_FRAME_NUMBER_IRQ	(1 << 6)
-+#define ISPCSI2_CTX_IRQENABLE_CS_IRQ		(1 << 5)
-+#define ISPCSI2_CTX_IRQENABLE_LE_IRQ		(1 << 3)
-+#define ISPCSI2_CTX_IRQENABLE_LS_IRQ		(1 << 2)
-+#define ISPCSI2_CTX_IRQENABLE_FE_IRQ		(1 << 1)
-+#define ISPCSI2_CTX_IRQENABLE_FS_IRQ		(1 << 0)
-+
-+#define ISPCSI2_CTX_IRQSTATUS(n)		((0x088) + 0x20 * (n))
-+#define ISPCSI2_CTX_IRQSTATUS_ECC_CORRECTION_IRQ	(1 << 8)
-+#define ISPCSI2_CTX_IRQSTATUS_LINE_NUMBER_IRQ	(1 << 7)
-+#define ISPCSI2_CTX_IRQSTATUS_FRAME_NUMBER_IRQ	(1 << 6)
-+#define ISPCSI2_CTX_IRQSTATUS_CS_IRQ		(1 << 5)
-+#define ISPCSI2_CTX_IRQSTATUS_LE_IRQ		(1 << 3)
-+#define ISPCSI2_CTX_IRQSTATUS_LS_IRQ		(1 << 2)
-+#define ISPCSI2_CTX_IRQSTATUS_FE_IRQ		(1 << 1)
-+#define ISPCSI2_CTX_IRQSTATUS_FS_IRQ		(1 << 0)
-+
-+#define ISPCSI2_CTX_CTRL3(n)			((0x08c) + 0x20 * (n))
-+#define ISPCSI2_CTX_CTRL3_ALPHA_SHIFT		5
-+#define ISPCSI2_CTX_CTRL3_ALPHA_MASK		\
-+	(0x3fff << ISPCSI2_CTX_CTRL3_ALPHA_SHIFT)
-+
-+/* This instance is for OMAP3630 only */
-+#define ISPCSI2_CTX_TRANSCODEH(n)		(0x000 + 0x8 * (n))
-+#define ISPCSI2_CTX_TRANSCODEH_HCOUNT_SHIFT	16
-+#define ISPCSI2_CTX_TRANSCODEH_HCOUNT_MASK	\
-+	(0x1fff << ISPCSI2_CTX_TRANSCODEH_HCOUNT_SHIFT)
-+#define ISPCSI2_CTX_TRANSCODEH_HSKIP_SHIFT	0
-+#define ISPCSI2_CTX_TRANSCODEH_HSKIP_MASK	\
-+	(0x1fff << ISPCSI2_CTX_TRANSCODEH_HCOUNT_SHIFT)
-+#define ISPCSI2_CTX_TRANSCODEV(n)		(0x004 + 0x8 * (n))
-+#define ISPCSI2_CTX_TRANSCODEV_VCOUNT_SHIFT	16
-+#define ISPCSI2_CTX_TRANSCODEV_VCOUNT_MASK	\
-+	(0x1fff << ISPCSI2_CTX_TRANSCODEV_VCOUNT_SHIFT)
-+#define ISPCSI2_CTX_TRANSCODEV_VSKIP_SHIFT	0
-+#define ISPCSI2_CTX_TRANSCODEV_VSKIP_MASK	\
-+	(0x1fff << ISPCSI2_CTX_TRANSCODEV_VCOUNT_SHIFT)
-+
-+/* -----------------------------------------------------------------------------
-+ * CSI PHY registers
-+ */
-+
-+#define ISPCSIPHY_REG0				(0x000)
-+#define ISPCSIPHY_REG0_THS_TERM_SHIFT		8
-+#define ISPCSIPHY_REG0_THS_TERM_MASK		\
-+	(0xff << ISPCSIPHY_REG0_THS_TERM_SHIFT)
-+#define ISPCSIPHY_REG0_THS_SETTLE_SHIFT		0
-+#define ISPCSIPHY_REG0_THS_SETTLE_MASK		\
-+	(0xff << ISPCSIPHY_REG0_THS_SETTLE_SHIFT)
-+
-+#define ISPCSIPHY_REG1					(0x004)
-+#define ISPCSIPHY_REG1_RESET_DONE_CTRLCLK		(1 << 29)
-+/* This field is for OMAP3630 only */
-+#define ISPCSIPHY_REG1_CLOCK_MISS_DETECTOR_STATUS	(1 << 25)
-+#define ISPCSIPHY_REG1_TCLK_TERM_SHIFT			18
-+#define ISPCSIPHY_REG1_TCLK_TERM_MASK			\
-+	(0x7f << ISPCSIPHY_REG1_TCLK_TERM_SHIFT)
-+#define ISPCSIPHY_REG1_DPHY_HS_SYNC_PATTERN_SHIFT	10
-+#define ISPCSIPHY_REG1_DPHY_HS_SYNC_PATTERN_MASK	\
-+	(0xff << ISPCSIPHY_REG1_DPHY_HS_SYNC_PATTERN)
-+/* This field is for OMAP3430 only */
-+#define ISPCSIPHY_REG1_TCLK_MISS_SHIFT			8
-+#define ISPCSIPHY_REG1_TCLK_MISS_MASK			\
-+	(0x3 << ISPCSIPHY_REG1_TCLK_MISS_SHIFT)
-+/* This field is for OMAP3630 only */
-+#define ISPCSIPHY_REG1_CTRLCLK_DIV_FACTOR_SHIFT		8
-+#define ISPCSIPHY_REG1_CTRLCLK_DIV_FACTOR_MASK		\
-+	(0x3 << ISPCSIPHY_REG1_CTRLCLK_DIV_FACTOR_SHIFT)
-+#define ISPCSIPHY_REG1_TCLK_SETTLE_SHIFT		0
-+#define ISPCSIPHY_REG1_TCLK_SETTLE_MASK			\
-+	(0xff << ISPCSIPHY_REG1_TCLK_SETTLE_SHIFT)
-+
-+/* This register is for OMAP3630 only */
-+#define ISPCSIPHY_REG2					(0x008)
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC0_SHIFT	30
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC0_MASK	\
-+	(0x3 << ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC0_SHIFT)
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC1_SHIFT	28
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC1_MASK	\
-+	(0x3 << ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC1_SHIFT)
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC2_SHIFT	26
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC2_MASK	\
-+	(0x3 << ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC2_SHIFT)
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC3_SHIFT	24
-+#define ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC3_MASK	\
-+	(0x3 << ISPCSIPHY_REG2_TRIGGER_CMD_RXTRIGESC3_SHIFT)
-+#define ISPCSIPHY_REG2_CCP2_SYNC_PATTERN_SHIFT		0
-+#define ISPCSIPHY_REG2_CCP2_SYNC_PATTERN_MASK		\
-+	(0x7fffff << ISPCSIPHY_REG2_CCP2_SYNC_PATTERN_SHIFT)
-+
-+#endif	/* OMAP3_ISP_REG_H */
-diff --git a/drivers/media/video/isp/ispresizer.c b/drivers/media/video/isp/ispresizer.c
-new file mode 100644
-index 0000000..a696450
---- /dev/null
-+++ b/drivers/media/video/isp/ispresizer.c
-@@ -0,0 +1,1710 @@
-+/*
-+ * ispresizer.c
-+ *
-+ * TI OMAP3 ISP - Resizer module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/device.h>
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+
-+#include "isp.h"
-+#include "ispreg.h"
-+#include "ispresizer.h"
-+
-+/*
-+ * Resizer Constants
-+ */
-+#define MIN_RESIZE_VALUE		64
-+#define MID_RESIZE_VALUE		512
-+#define MAX_RESIZE_VALUE		1024
-+
-+#define MIN_IN_WIDTH			32
-+#define MIN_IN_HEIGHT			32
-+#define MAX_IN_WIDTH_MEMORY_MODE	4095
-+#define MAX_IN_WIDTH_ONTHEFLY_MODE_ES1	1280
-+#define MAX_IN_WIDTH_ONTHEFLY_MODE_ES2	4095
-+#define MAX_IN_HEIGHT			4095
-+
-+#define MIN_OUT_WIDTH			16
-+#define MIN_OUT_HEIGHT			2
-+#define MAX_OUT_HEIGHT			4095
-+
-+/*
-+ * Resizer Use Constraints
-+ * "TRM ES3.1, table 12-46"
-+ */
-+#define MAX_4TAP_OUT_WIDTH_ES1		1280
-+#define MAX_7TAP_OUT_WIDTH_ES1		640
-+#define MAX_4TAP_OUT_WIDTH_ES2		3312
-+#define MAX_7TAP_OUT_WIDTH_ES2		1650
-+#define MAX_4TAP_OUT_WIDTH_3630		4096
-+#define MAX_7TAP_OUT_WIDTH_3630		2048
-+
-+/*
-+ * Constants for ratio calculation
-+ */
-+#define RESIZE_DIVISOR			256
-+#define DEFAULT_PHASE			1
-+
-+/*
-+ * Default (and only) configuration of filter coefficients.
-+ * 7-tap mode is for scale factors 0.25x to 0.5x.
-+ * 4-tap mode is for scale factors 0.5x to 4.0x.
-+ * There shouldn't be any reason to recalculate these, EVER.
-+ */
-+static const struct isprsz_coef filter_coefs = {
-+	/* For 8-phase 4-tap horizontal filter: */
-+	{
-+		0x0000, 0x0100, 0x0000, 0x0000,
-+		0x03FA, 0x00F6, 0x0010, 0x0000,
-+		0x03F9, 0x00DB, 0x002C, 0x0000,
-+		0x03FB, 0x00B3, 0x0053, 0x03FF,
-+		0x03FD, 0x0082, 0x0084, 0x03FD,
-+		0x03FF, 0x0053, 0x00B3, 0x03FB,
-+		0x0000, 0x002C, 0x00DB, 0x03F9,
-+		0x0000, 0x0010, 0x00F6, 0x03FA
-+	},
-+	/* For 8-phase 4-tap vertical filter: */
-+	{
-+		0x0000, 0x0100, 0x0000, 0x0000,
-+		0x03FA, 0x00F6, 0x0010, 0x0000,
-+		0x03F9, 0x00DB, 0x002C, 0x0000,
-+		0x03FB, 0x00B3, 0x0053, 0x03FF,
-+		0x03FD, 0x0082, 0x0084, 0x03FD,
-+		0x03FF, 0x0053, 0x00B3, 0x03FB,
-+		0x0000, 0x002C, 0x00DB, 0x03F9,
-+		0x0000, 0x0010, 0x00F6, 0x03FA
-+	},
-+	/* For 4-phase 7-tap horizontal filter: */
-+	#define DUMMY 0
-+	{
-+		0x0004, 0x0023, 0x005A, 0x0058, 0x0023, 0x0004, 0x0000, DUMMY,
-+		0x0002, 0x0018, 0x004d, 0x0060, 0x0031, 0x0008, 0x0000, DUMMY,
-+		0x0001, 0x000f, 0x003f, 0x0062, 0x003f, 0x000f, 0x0001, DUMMY,
-+		0x0000, 0x0008, 0x0031, 0x0060, 0x004d, 0x0018, 0x0002, DUMMY
-+	},
-+	/* For 4-phase 7-tap vertical filter: */
-+	{
-+		0x0004, 0x0023, 0x005A, 0x0058, 0x0023, 0x0004, 0x0000, DUMMY,
-+		0x0002, 0x0018, 0x004d, 0x0060, 0x0031, 0x0008, 0x0000, DUMMY,
-+		0x0001, 0x000f, 0x003f, 0x0062, 0x003f, 0x000f, 0x0001, DUMMY,
-+		0x0000, 0x0008, 0x0031, 0x0060, 0x004d, 0x0018, 0x0002, DUMMY
-+	}
-+	/*
-+	 * The dummy padding is required in 7-tap mode because of how the
-+	 * registers are arranged physically.
-+	 */
-+	#undef DUMMY
-+};
-+
-+/*
-+ * __resizer_get_format - helper function for getting resizer format
-+ * @res   : pointer to resizer private structure
-+ * @pad   : pad number
-+ * @fh    : V4L2 subdev file handle
-+ * @which : wanted subdev format
-+ * return zero
-+ */
-+static struct v4l2_mbus_framefmt *
-+__resizer_get_format(struct isp_res_device *res, struct v4l2_subdev_fh *fh,
-+		     unsigned int pad, enum v4l2_subdev_format_whence which)
-+{
-+	if (which == V4L2_SUBDEV_FORMAT_TRY)
-+		return v4l2_subdev_get_try_format(fh, pad);
-+	else
-+		return &res->formats[pad];
-+}
-+
-+/*
-+ * __resizer_get_crop - helper function for getting resizer crop rectangle
-+ * @res   : pointer to resizer private structure
-+ * @fh    : V4L2 subdev file handle
-+ * @which : wanted subdev crop rectangle
-+ */
-+static struct v4l2_rect *
-+__resizer_get_crop(struct isp_res_device *res, struct v4l2_subdev_fh *fh,
-+		   enum v4l2_subdev_format_whence which)
-+{
-+	if (which == V4L2_SUBDEV_FORMAT_TRY)
-+		return v4l2_subdev_get_try_crop(fh, RESZ_PAD_SINK);
-+	else
-+		return &res->crop.request;
-+}
-+
-+/*
-+ * resizer_set_filters - Set resizer filters
-+ * @res: Device context.
-+ * @h_coeff: horizontal coefficient
-+ * @v_coeff: vertical coefficient
-+ * Return none
-+ */
-+static void resizer_set_filters(struct isp_res_device *res, const u16 *h_coeff,
-+				const u16 *v_coeff)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	u32 startaddr_h, startaddr_v, tmp_h, tmp_v;
-+	int i;
-+
-+	startaddr_h = ISPRSZ_HFILT10;
-+	startaddr_v = ISPRSZ_VFILT10;
-+
-+	for (i = 0; i < COEFF_CNT; i += 2) {
-+		tmp_h = h_coeff[i] |
-+			(h_coeff[i + 1] << ISPRSZ_HFILT_COEF1_SHIFT);
-+		tmp_v = v_coeff[i] |
-+			(v_coeff[i + 1] << ISPRSZ_VFILT_COEF1_SHIFT);
-+		isp_reg_writel(isp, tmp_h, OMAP3_ISP_IOMEM_RESZ, startaddr_h);
-+		isp_reg_writel(isp, tmp_v, OMAP3_ISP_IOMEM_RESZ, startaddr_v);
-+		startaddr_h += 4;
-+		startaddr_v += 4;
-+	}
-+}
-+
-+/*
-+ * resizer_set_bilinear - Chrominance horizontal algorithm select
-+ * @res: Device context.
-+ * @type: Filtering interpolation type.
-+ *
-+ * Filtering that is same as luminance processing is
-+ * intended only for downsampling, and bilinear interpolation
-+ * is intended only for upsampling.
-+ */
-+static void resizer_set_bilinear(struct isp_res_device *res,
-+				 enum resizer_chroma_algo type)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	if (type == RSZ_BILINEAR)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_CBILIN);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_CBILIN);
-+}
-+
-+/*
-+ * resizer_set_ycpos - Luminance and chrominance order
-+ * @res: Device context.
-+ * @order: order type.
-+ */
-+static void resizer_set_ycpos(struct isp_res_device *res,
-+			      enum v4l2_mbus_pixelcode pixelcode)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	switch (pixelcode) {
-+	case V4L2_MBUS_FMT_YUYV8_1X16:
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_YCPOS);
-+		break;
-+	case V4L2_MBUS_FMT_UYVY8_1X16:
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_YCPOS);
-+		break;
-+	default:
-+		return;
-+	}
-+}
-+
-+/*
-+ * resizer_set_phase - Setup horizontal and vertical starting phase
-+ * @res: Device context.
-+ * @h_phase: horizontal phase parameters.
-+ * @v_phase: vertical phase parameters.
-+ *
-+ * Horizontal and vertical phase range is 0 to 7
-+ */
-+static void resizer_set_phase(struct isp_res_device *res, u32 h_phase,
-+			      u32 v_phase)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	u32 rgval = 0;
-+
-+	rgval = isp_reg_readl(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT) &
-+	      ~(ISPRSZ_CNT_HSTPH_MASK | ISPRSZ_CNT_VSTPH_MASK);
-+	rgval |= (h_phase << ISPRSZ_CNT_HSTPH_SHIFT) & ISPRSZ_CNT_HSTPH_MASK;
-+	rgval |= (v_phase << ISPRSZ_CNT_VSTPH_SHIFT) & ISPRSZ_CNT_VSTPH_MASK;
-+
-+	isp_reg_writel(isp, rgval, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT);
-+}
-+
-+/*
-+ * resizer_set_luma - Setup luminance enhancer parameters
-+ * @res: Device context.
-+ * @luma: Structure for luminance enhancer parameters.
-+ *
-+ * Algorithm select:
-+ *  0x0: Disable
-+ *  0x1: [-1  2 -1]/2 high-pass filter
-+ *  0x2: [-1 -2  6 -2 -1]/4 high-pass filter
-+ *
-+ * Maximum gain:
-+ *  The data is coded in U4Q4 representation.
-+ *
-+ * Slope:
-+ *  The data is coded in U4Q4 representation.
-+ *
-+ * Coring offset:
-+ *  The data is coded in U8Q0 representation.
-+ *
-+ * The new luminance value is computed as:
-+ *  Y += HPF(Y) x max(GAIN, (HPF(Y) - CORE) x SLOP + 8) >> 4.
-+ */
-+static void resizer_set_luma(struct isp_res_device *res,
-+			     struct resizer_luma_yenh *luma)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	u32 rgval = 0;
-+
-+	rgval  = (luma->algo << ISPRSZ_YENH_ALGO_SHIFT)
-+		  & ISPRSZ_YENH_ALGO_MASK;
-+	rgval |= (luma->gain << ISPRSZ_YENH_GAIN_SHIFT)
-+		  & ISPRSZ_YENH_GAIN_MASK;
-+	rgval |= (luma->slope << ISPRSZ_YENH_SLOP_SHIFT)
-+		  & ISPRSZ_YENH_SLOP_MASK;
-+	rgval |= (luma->core << ISPRSZ_YENH_CORE_SHIFT)
-+		  & ISPRSZ_YENH_CORE_MASK;
-+
-+	isp_reg_writel(isp, rgval, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_YENH);
-+}
-+
-+/*
-+ * resizer_set_source - Input source select
-+ * @res: Device context.
-+ * @source: Input source type
-+ *
-+ * If this field is set to RESIZER_INPUT_VP, the resizer input is fed from
-+ * Preview/CCDC engine, otherwise from memory.
-+ */
-+static void resizer_set_source(struct isp_res_device *res,
-+			       enum resizer_input_entity source)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	if (source == RESIZER_INPUT_MEMORY)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_INPSRC);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_INPSRC);
-+}
-+
-+/*
-+ * resizer_set_ratio - Setup horizontal and vertical resizing value
-+ * @res: Device context.
-+ * @ratio: Structure for ratio parameters.
-+ *
-+ * Resizing range from 64 to 1024
-+ */
-+static void resizer_set_ratio(struct isp_res_device *res,
-+			      const struct resizer_ratio *ratio)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	const u16 *h_filter, *v_filter;
-+	u32 rgval = 0;
-+
-+	rgval = isp_reg_readl(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT) &
-+			      ~(ISPRSZ_CNT_HRSZ_MASK | ISPRSZ_CNT_VRSZ_MASK);
-+	rgval |= ((ratio->horz - 1) << ISPRSZ_CNT_HRSZ_SHIFT)
-+		  & ISPRSZ_CNT_HRSZ_MASK;
-+	rgval |= ((ratio->vert - 1) << ISPRSZ_CNT_VRSZ_SHIFT)
-+		  & ISPRSZ_CNT_VRSZ_MASK;
-+	isp_reg_writel(isp, rgval, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT);
-+
-+	/* prepare horizontal filter coefficients */
-+	if (ratio->horz > MID_RESIZE_VALUE)
-+		h_filter = &filter_coefs.h_filter_coef_7tap[0];
-+	else
-+		h_filter = &filter_coefs.h_filter_coef_4tap[0];
-+
-+	/* prepare vertical filter coefficients */
-+	if (ratio->vert > MID_RESIZE_VALUE)
-+		v_filter = &filter_coefs.v_filter_coef_7tap[0];
-+	else
-+		v_filter = &filter_coefs.v_filter_coef_4tap[0];
-+
-+	resizer_set_filters(res, h_filter, v_filter);
-+}
-+
-+/*
-+ * resizer_set_dst_size - Setup the output height and width
-+ * @res: Device context.
-+ * @width: Output width.
-+ * @height: Output height.
-+ *
-+ * Width :
-+ *  The value must be EVEN.
-+ *
-+ * Height:
-+ *  The number of bytes written to SDRAM must be
-+ *  a multiple of 16-bytes if the vertical resizing factor
-+ *  is greater than 1x (upsizing)
-+ */
-+static void resizer_set_output_size(struct isp_res_device *res,
-+				    u32 width, u32 height)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	u32 rgval = 0;
-+
-+	dev_dbg(isp->dev, "Output size[w/h]: %dx%d\n", width, height);
-+	rgval  = (width << ISPRSZ_OUT_SIZE_HORZ_SHIFT)
-+		 & ISPRSZ_OUT_SIZE_HORZ_MASK;
-+	rgval |= (height << ISPRSZ_OUT_SIZE_VERT_SHIFT)
-+		 & ISPRSZ_OUT_SIZE_VERT_MASK;
-+	isp_reg_writel(isp, rgval, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_OUT_SIZE);
-+}
-+
-+/*
-+ * resizer_set_output_offset - Setup memory offset for the output lines.
-+ * @res: Device context.
-+ * @offset: Memory offset.
-+ *
-+ * The 5 LSBs are forced to be zeros by the hardware to align on a 32-byte
-+ * boundary; the 5 LSBs are read-only. For optimal use of SDRAM bandwidth,
-+ * the SDRAM line offset must be set on a 256-byte boundary
-+ */
-+static void resizer_set_output_offset(struct isp_res_device *res, u32 offset)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	isp_reg_writel(isp, offset, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_SDR_OUTOFF);
-+}
-+
-+/*
-+ * resizer_set_start - Setup vertical and horizontal start position
-+ * @res: Device context.
-+ * @left: Horizontal start position.
-+ * @top: Vertical start position.
-+ *
-+ * Vertical start line:
-+ *  This field makes sense only when the resizer obtains its input
-+ *  from the preview engine/CCDC
-+ *
-+ * Horizontal start pixel:
-+ *  Pixels are coded on 16 bits for YUV and 8 bits for color separate data.
-+ *  When the resizer gets its input from SDRAM, this field must be set
-+ *  to <= 15 for YUV 16-bit data and <= 31 for 8-bit color separate data
-+ */
-+static void resizer_set_start(struct isp_res_device *res, u32 left, u32 top)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	u32 rgval = 0;
-+
-+	rgval = (left << ISPRSZ_IN_START_HORZ_ST_SHIFT)
-+		& ISPRSZ_IN_START_HORZ_ST_MASK;
-+	rgval |= (top << ISPRSZ_IN_START_VERT_ST_SHIFT)
-+		 & ISPRSZ_IN_START_VERT_ST_MASK;
-+
-+	isp_reg_writel(isp, rgval, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_IN_START);
-+}
-+
-+/*
-+ * resizer_set_input_size - Setup the input size
-+ * @res: Device context.
-+ * @width: The range is 0 to 4095 pixels
-+ * @height: The range is 0 to 4095 lines
-+ */
-+static void resizer_set_input_size(struct isp_res_device *res,
-+				   u32 width, u32 height)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	u32 rgval = 0;
-+
-+	dev_dbg(isp->dev, "Input size[w/h]: %dx%d\n", width, height);
-+
-+	rgval = (width << ISPRSZ_IN_SIZE_HORZ_SHIFT)
-+		& ISPRSZ_IN_SIZE_HORZ_MASK;
-+	rgval |= (height << ISPRSZ_IN_SIZE_VERT_SHIFT)
-+		 & ISPRSZ_IN_SIZE_VERT_MASK;
-+
-+	isp_reg_writel(isp, rgval, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_IN_SIZE);
-+}
-+
-+/*
-+ * resizer_set_src_offs - Setup the memory offset for the input lines
-+ * @res: Device context.
-+ * @offset: Memory offset.
-+ *
-+ * The 5 LSBs are forced to be zeros by the hardware to align on a 32-byte
-+ * boundary; the 5 LSBs are read-only. This field must be programmed to be
-+ * 0x0 if the resizer input is from preview engine/CCDC.
-+ */
-+static void resizer_set_input_offset(struct isp_res_device *res, u32 offset)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	isp_reg_writel(isp, offset, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_SDR_INOFF);
-+}
-+
-+/*
-+ * resizer_set_intype - Input type select
-+ * @res: Device context.
-+ * @type: Pixel format type.
-+ */
-+static void resizer_set_intype(struct isp_res_device *res,
-+			       enum resizer_colors_type type)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	if (type == RSZ_COLOR8)
-+		isp_reg_set(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_INPTYP);
-+	else
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_CNT,
-+			    ISPRSZ_CNT_INPTYP);
-+}
-+
-+/*
-+ * __resizer_set_inaddr - Helper function for set input address
-+ * @res : pointer to resizer private data structure
-+ * @addr: input address
-+ * return none
-+ */
-+static void __resizer_set_inaddr(struct isp_res_device *res, u32 addr)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	isp_reg_writel(isp, addr, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_SDR_INADD);
-+}
-+
-+/*
-+ * The data rate at the horizontal resizer output must not exceed half the
-+ * functional clock or 100 MP/s, whichever is lower. According to the TRM
-+ * there's no similar requirement for the vertical resizer output. However
-+ * experience showed that vertical upscaling by 4 leads to SBL overflows (with
-+ * data rates at the resizer output exceeding 300 MP/s). Limiting the resizer
-+ * output data rate to the functional clock or 200 MP/s, whichever is lower,
-+ * seems to get rid of SBL overflows.
-+ *
-+ * The maximum data rate at the output of the horizontal resizer can thus be
-+ * computed with
-+ *
-+ * max intermediate rate <= L3 clock * input height / output height
-+ * max intermediate rate <= L3 clock / 2
-+ *
-+ * The maximum data rate at the resizer input is then
-+ *
-+ * max input rate <= max intermediate rate * input width / output width
-+ *
-+ * where the input width and height are the resizer input crop rectangle size.
-+ * The TRM doesn't clearly explain if that's a maximum instant data rate or a
-+ * maximum average data rate.
-+ */
-+void omap3isp_resizer_max_rate(struct isp_res_device *res,
-+			       unsigned int *max_rate)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity);
-+	const struct v4l2_mbus_framefmt *ofmt = &res->formats[RESZ_PAD_SOURCE];
-+	unsigned long limit = min(pipe->l3_ick, 200000000UL);
-+	unsigned long clock;
-+
-+	clock = div_u64((u64)limit * res->crop.active.height, ofmt->height);
-+	clock = min(clock, limit / 2);
-+	*max_rate = div_u64((u64)clock * res->crop.active.width, ofmt->width);
-+}
-+
-+/*
-+ * When the resizer processes images from memory, the driver must slow down read
-+ * requests on the input to at least comply with the internal data rate
-+ * requirements. If the application real-time requirements can cope with slower
-+ * processing, the resizer can be slowed down even more to put less pressure on
-+ * the overall system.
-+ *
-+ * When the resizer processes images on the fly (either from the CCDC or the
-+ * preview module), the same data rate requirements apply but they can't be
-+ * enforced at the resizer level. The image input module (sensor, CCP2 or
-+ * preview module) must not provide image data faster than the resizer can
-+ * process.
-+ *
-+ * For live image pipelines, the data rate is set by the frame format, size and
-+ * rate. The sensor output frame rate must not exceed the maximum resizer data
-+ * rate.
-+ *
-+ * The resizer slows down read requests by inserting wait cycles in the SBL
-+ * requests. The maximum number of 256-byte requests per second can be computed
-+ * as (the data rate is multiplied by 2 to convert from pixels per second to
-+ * bytes per second)
-+ *
-+ * request per second = data rate * 2 / 256
-+ * cycles per request = cycles per second / requests per second
-+ *
-+ * The number of cycles per second is controlled by the L3 clock, leading to
-+ *
-+ * cycles per request = L3 frequency / 2 * 256 / data rate
-+ */
-+static void resizer_adjust_bandwidth(struct isp_res_device *res)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity);
-+	struct isp_device *isp = to_isp_device(res);
-+	unsigned long l3_ick = pipe->l3_ick;
-+	struct v4l2_fract *timeperframe;
-+	unsigned int cycles_per_frame;
-+	unsigned int requests_per_frame;
-+	unsigned int cycles_per_request;
-+	unsigned int granularity;
-+	unsigned int minimum;
-+	unsigned int maximum;
-+	unsigned int value;
-+
-+	if (res->input != RESIZER_INPUT_MEMORY) {
-+		isp_reg_clr(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_SDR_REQ_EXP,
-+			    ISPSBL_SDR_REQ_RSZ_EXP_MASK);
-+		return;
-+	}
-+
-+	switch (isp->revision) {
-+	case ISP_REVISION_1_0:
-+	case ISP_REVISION_2_0:
-+	default:
-+		granularity = 1024;
-+		break;
-+
-+	case ISP_REVISION_15_0:
-+		granularity = 32;
-+		break;
-+	}
-+
-+	/* Compute the minimum number of cycles per request, based on the
-+	 * pipeline maximum data rate. This is an absolute lower bound if we
-+	 * don't want SBL overflows, so round the value up.
-+	 */
-+	cycles_per_request = div_u64((u64)l3_ick / 2 * 256 + pipe->max_rate - 1,
-+				     pipe->max_rate);
-+	minimum = DIV_ROUND_UP(cycles_per_request, granularity);
-+
-+	/* Compute the maximum number of cycles per request, based on the
-+	 * requested frame rate. This is a soft upper bound to achieve a frame
-+	 * rate equal or higher than the requested value, so round the value
-+	 * down.
-+	 */
-+	timeperframe = &pipe->max_timeperframe;
-+
-+	requests_per_frame = DIV_ROUND_UP(res->crop.active.width * 2, 256)
-+			   * res->crop.active.height;
-+	cycles_per_frame = div_u64((u64)l3_ick * timeperframe->numerator,
-+				   timeperframe->denominator);
-+	cycles_per_request = cycles_per_frame / requests_per_frame;
-+
-+	maximum = cycles_per_request / granularity;
-+
-+	value = max(minimum, maximum);
-+
-+	dev_dbg(isp->dev, "%s: cycles per request = %u\n", __func__, value);
-+	isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_SBL, ISPSBL_SDR_REQ_EXP,
-+			ISPSBL_SDR_REQ_RSZ_EXP_MASK,
-+			value << ISPSBL_SDR_REQ_RSZ_EXP_SHIFT);
-+}
-+
-+/*
-+ * omap3isp_resizer_busy - Checks if ISP resizer is busy.
-+ *
-+ * Returns busy field from ISPRSZ_PCR register.
-+ */
-+int omap3isp_resizer_busy(struct isp_res_device *res)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	return isp_reg_readl(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_PCR) &
-+			     ISPRSZ_PCR_BUSY;
-+}
-+
-+/*
-+ * resizer_set_inaddr - Sets the memory address of the input frame.
-+ * @addr: 32bit memory address aligned on 32byte boundary.
-+ */
-+static void resizer_set_inaddr(struct isp_res_device *res, u32 addr)
-+{
-+	res->addr_base = addr;
-+
-+	/* This will handle crop settings in stream off state */
-+	if (res->crop_offset)
-+		addr += res->crop_offset & ~0x1f;
-+
-+	__resizer_set_inaddr(res, addr);
-+}
-+
-+/*
-+ * Configures the memory address to which the output frame is written.
-+ * @addr: 32bit memory address aligned on 32byte boundary.
-+ * Note: For SBL efficiency reasons the address should be on a 256-byte
-+ * boundary.
-+ */
-+static void resizer_set_outaddr(struct isp_res_device *res, u32 addr)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	/*
-+	 * Set output address. This needs to be in its own function
-+	 * because it changes often.
-+	 */
-+	isp_reg_writel(isp, addr << ISPRSZ_SDR_OUTADD_ADDR_SHIFT,
-+		       OMAP3_ISP_IOMEM_RESZ, ISPRSZ_SDR_OUTADD);
-+}
-+
-+/*
-+ * resizer_print_status - Prints the values of the resizer module registers.
-+ */
-+#define RSZ_PRINT_REGISTER(isp, name)\
-+	dev_dbg(isp->dev, "###RSZ " #name "=0x%08x\n", \
-+		isp_reg_readl(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_##name))
-+
-+static void resizer_print_status(struct isp_res_device *res)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	dev_dbg(isp->dev, "-------------Resizer Register dump----------\n");
-+
-+	RSZ_PRINT_REGISTER(isp, PCR);
-+	RSZ_PRINT_REGISTER(isp, CNT);
-+	RSZ_PRINT_REGISTER(isp, OUT_SIZE);
-+	RSZ_PRINT_REGISTER(isp, IN_START);
-+	RSZ_PRINT_REGISTER(isp, IN_SIZE);
-+	RSZ_PRINT_REGISTER(isp, SDR_INADD);
-+	RSZ_PRINT_REGISTER(isp, SDR_INOFF);
-+	RSZ_PRINT_REGISTER(isp, SDR_OUTADD);
-+	RSZ_PRINT_REGISTER(isp, SDR_OUTOFF);
-+	RSZ_PRINT_REGISTER(isp, YENH);
-+
-+	dev_dbg(isp->dev, "--------------------------------------------\n");
-+}
-+
-+/*
-+ * resizer_calc_ratios - Helper function for calculate resizer ratios
-+ * @res: pointer to resizer private data structure
-+ * @input: input frame size
-+ * @output: output frame size
-+ * @ratio : return calculated ratios
-+ * return none
-+ *
-+ * The resizer uses a polyphase sample rate converter. The upsampling filter
-+ * has a fixed number of phases that depend on the resizing ratio. As the ratio
-+ * computation depends on the number of phases, we need to compute a first
-+ * approximation and then refine it.
-+ *
-+ * The input/output/ratio relationship is given by the OMAP34xx TRM:
-+ *
-+ * - 8-phase, 4-tap mode (RSZ = 64 ~ 512)
-+ *	iw = (32 * sph + (ow - 1) * hrsz + 16) >> 8 + 7
-+ *	ih = (32 * spv + (oh - 1) * vrsz + 16) >> 8 + 4
-+ * - 4-phase, 7-tap mode (RSZ = 513 ~ 1024)
-+ *	iw = (64 * sph + (ow - 1) * hrsz + 32) >> 8 + 7
-+ *	ih = (64 * spv + (oh - 1) * vrsz + 32) >> 8 + 7
-+ *
-+ * iw and ih are the input width and height after cropping. Those equations need
-+ * to be satisfied exactly for the resizer to work correctly.
-+ *
-+ * Reverting the equations, we can compute the resizing ratios with
-+ *
-+ * - 8-phase, 4-tap mode
-+ *	hrsz = ((iw - 7) * 256 - 16 - 32 * sph) / (ow - 1)
-+ *	vrsz = ((ih - 4) * 256 - 16 - 32 * spv) / (oh - 1)
-+ * - 4-phase, 7-tap mode
-+ *	hrsz = ((iw - 7) * 256 - 32 - 64 * sph) / (ow - 1)
-+ *	vrsz = ((ih - 7) * 256 - 32 - 64 * spv) / (oh - 1)
-+ *
-+ * The ratios are integer values, and must be rounded down to ensure that the
-+ * cropped input size is not bigger than the uncropped input size. As the ratio
-+ * in 7-tap mode is always smaller than the ratio in 4-tap mode, we can use the
-+ * 7-tap mode equations to compute a ratio approximation.
-+ *
-+ * We first clamp the output size according to the hardware capabilitie to avoid
-+ * auto-cropping the input more than required to satisfy the TRM equations. The
-+ * minimum output size is achieved with a scaling factor of 1024. It is thus
-+ * computed using the 7-tap equations.
-+ *
-+ *	min ow = ((iw - 7) * 256 - 32 - 64 * sph) / 1024 + 1
-+ *	min oh = ((ih - 7) * 256 - 32 - 64 * spv) / 1024 + 1
-+ *
-+ * Similarly, the maximum output size is achieved with a scaling factor of 64
-+ * and computed using the 4-tap equations.
-+ *
-+ *	max ow = ((iw - 7) * 256 + 255 - 16 - 32 * sph) / 64 + 1
-+ *	max oh = ((ih - 4) * 256 + 255 - 16 - 32 * spv) / 64 + 1
-+ *
-+ * The additional +255 term compensates for the round down operation performed
-+ * by the TRM equations when shifting the value right by 8 bits.
-+ *
-+ * We then compute and clamp the ratios (x1/4 ~ x4). Clamping the output size to
-+ * the maximum value guarantees that the ratio value will never be smaller than
-+ * the minimum, but it could still slightly exceed the maximum. Clamping the
-+ * ratio will thus result in a resizing factor slightly larger than the
-+ * requested value.
-+ *
-+ * To accomodate that, and make sure the TRM equations are satisfied exactly, we
-+ * compute the input crop rectangle as the last step.
-+ *
-+ * As if the situation wasn't complex enough, the maximum output width depends
-+ * on the vertical resizing ratio.  Fortunately, the output height doesn't
-+ * depend on the horizontal resizing ratio. We can then start by computing the
-+ * output height and the vertical ratio, and then move to computing the output
-+ * width and the horizontal ratio.
-+ */
-+static void resizer_calc_ratios(struct isp_res_device *res,
-+				struct v4l2_rect *input,
-+				struct v4l2_mbus_framefmt *output,
-+				struct resizer_ratio *ratio)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+	const unsigned int spv = DEFAULT_PHASE;
-+	const unsigned int sph = DEFAULT_PHASE;
-+	unsigned int upscaled_width;
-+	unsigned int upscaled_height;
-+	unsigned int min_width;
-+	unsigned int min_height;
-+	unsigned int max_width;
-+	unsigned int max_height;
-+	unsigned int width_alignment;
-+
-+	/*
-+	 * Clamp the output height based on the hardware capabilities and
-+	 * compute the vertical resizing ratio.
-+	 */
-+	min_height = ((input->height - 7) * 256 - 32 - 64 * spv) / 1024 + 1;
-+	min_height = max_t(unsigned int, min_height, MIN_OUT_HEIGHT);
-+	max_height = ((input->height - 4) * 256 + 255 - 16 - 32 * spv) / 64 + 1;
-+	max_height = min_t(unsigned int, max_height, MAX_OUT_HEIGHT);
-+	output->height = clamp(output->height, min_height, max_height);
-+
-+	ratio->vert = ((input->height - 7) * 256 - 32 - 64 * spv)
-+		    / (output->height - 1);
-+	ratio->vert = clamp_t(unsigned int, ratio->vert,
-+			      MIN_RESIZE_VALUE, MAX_RESIZE_VALUE);
-+
-+	if (ratio->vert <= MID_RESIZE_VALUE) {
-+		upscaled_height = (output->height - 1) * ratio->vert
-+				+ 32 * spv + 16;
-+		input->height = (upscaled_height >> 8) + 4;
-+	} else {
-+		upscaled_height = (output->height - 1) * ratio->vert
-+				+ 64 * spv + 32;
-+		input->height = (upscaled_height >> 8) + 7;
-+	}
-+
-+	/*
-+	 * Compute the minimum and maximum output widths based on the hardware
-+	 * capabilities. The maximum depends on the vertical resizing ratio.
-+	 */
-+	min_width = ((input->width - 7) * 256 - 32 - 64 * sph) / 1024 + 1;
-+	min_width = max_t(unsigned int, min_width, MIN_OUT_WIDTH);
-+
-+	if (ratio->vert <= MID_RESIZE_VALUE) {
-+		switch (isp->revision) {
-+		case ISP_REVISION_1_0:
-+			max_width = MAX_4TAP_OUT_WIDTH_ES1;
-+			break;
-+
-+		case ISP_REVISION_2_0:
-+		default:
-+			max_width = MAX_4TAP_OUT_WIDTH_ES2;
-+			break;
-+
-+		case ISP_REVISION_15_0:
-+			max_width = MAX_4TAP_OUT_WIDTH_3630;
-+			break;
-+		}
-+	} else {
-+		switch (isp->revision) {
-+		case ISP_REVISION_1_0:
-+			max_width = MAX_7TAP_OUT_WIDTH_ES1;
-+			break;
-+
-+		case ISP_REVISION_2_0:
-+		default:
-+			max_width = MAX_7TAP_OUT_WIDTH_ES2;
-+			break;
-+
-+		case ISP_REVISION_15_0:
-+			max_width = MAX_7TAP_OUT_WIDTH_3630;
-+			break;
-+		}
-+	}
-+	max_width = min(((input->width - 7) * 256 + 255 - 16 - 32 * sph) / 64
-+			+ 1, max_width);
-+
-+	/*
-+	 * The output width must be even, and must be a multiple of 16 bytes
-+	 * when upscaling vertically. Clamp the output width to the valid range.
-+	 * Take the alignment into account (the maximum width in 7-tap mode on
-+	 * ES2 isn't a multiple of 8) and align the result up to make sure it
-+	 * won't be smaller than the minimum.
-+	 */
-+	width_alignment = ratio->vert < 256 ? 8 : 2;
-+	output->width = clamp(output->width, min_width,
-+			      max_width & ~(width_alignment - 1));
-+	output->width = ALIGN(output->width, width_alignment);
-+
-+	ratio->horz = ((input->width - 7) * 256 - 32 - 64 * sph)
-+		    / (output->width - 1);
-+	ratio->horz = clamp_t(unsigned int, ratio->horz,
-+			      MIN_RESIZE_VALUE, MAX_RESIZE_VALUE);
-+
-+	if (ratio->horz <= MID_RESIZE_VALUE) {
-+		upscaled_width = (output->width - 1) * ratio->horz
-+			       + 32 * sph + 16;
-+		input->width = (upscaled_width >> 8) + 7;
-+	} else {
-+		upscaled_width = (output->width - 1) * ratio->horz
-+			       + 64 * sph + 32;
-+		input->width = (upscaled_width >> 8) + 7;
-+	}
-+}
-+
-+/*
-+ * resizer_set_crop_params - Setup hardware with cropping parameters
-+ * @res : resizer private structure
-+ * @crop_rect : current crop rectangle
-+ * @ratio : resizer ratios
-+ * return none
-+ */
-+static void resizer_set_crop_params(struct isp_res_device *res,
-+				    const struct v4l2_mbus_framefmt *input,
-+				    const struct v4l2_mbus_framefmt *output)
-+{
-+	resizer_set_ratio(res, &res->ratio);
-+
-+	/* Set chrominance horizontal algorithm */
-+	if (res->ratio.horz >= RESIZE_DIVISOR)
-+		resizer_set_bilinear(res, RSZ_THE_SAME);
-+	else
-+		resizer_set_bilinear(res, RSZ_BILINEAR);
-+
-+	resizer_adjust_bandwidth(res);
-+
-+	if (res->input == RESIZER_INPUT_MEMORY) {
-+		/* Calculate additional offset for crop */
-+		res->crop_offset = (res->crop.active.top * input->width +
-+				    res->crop.active.left) * 2;
-+		/*
-+		 * Write lowest 4 bits of horizontal pixel offset (in pixels),
-+		 * vertical start must be 0.
-+		 */
-+		resizer_set_start(res, (res->crop_offset / 2) & 0xf, 0);
-+
-+		/*
-+		 * Set start (read) address for cropping, in bytes.
-+		 * Lowest 5 bits must be zero.
-+		 */
-+		__resizer_set_inaddr(res,
-+				res->addr_base + (res->crop_offset & ~0x1f));
-+	} else {
-+		/*
-+		 * Set vertical start line and horizontal starting pixel.
-+		 * If the input is from CCDC/PREV, horizontal start field is
-+		 * in bytes (twice number of pixels).
-+		 */
-+		resizer_set_start(res, res->crop.active.left * 2,
-+				  res->crop.active.top);
-+		/* Input address and offset must be 0 for preview/ccdc input */
-+		__resizer_set_inaddr(res, 0);
-+		resizer_set_input_offset(res, 0);
-+	}
-+
-+	/* Set the input size */
-+	resizer_set_input_size(res, res->crop.active.width,
-+			       res->crop.active.height);
-+}
-+
-+static void resizer_configure(struct isp_res_device *res)
-+{
-+	struct v4l2_mbus_framefmt *informat, *outformat;
-+	struct resizer_luma_yenh luma = {0, 0, 0, 0};
-+
-+	resizer_set_source(res, res->input);
-+
-+	informat = &res->formats[RESZ_PAD_SINK];
-+	outformat = &res->formats[RESZ_PAD_SOURCE];
-+
-+	/* RESZ_PAD_SINK */
-+	if (res->input == RESIZER_INPUT_VP)
-+		resizer_set_input_offset(res, 0);
-+	else
-+		resizer_set_input_offset(res, ALIGN(informat->width, 0x10) * 2);
-+
-+	/* YUV422 interleaved, default phase, no luma enhancement */
-+	resizer_set_intype(res, RSZ_YUV422);
-+	resizer_set_ycpos(res, informat->code);
-+	resizer_set_phase(res, DEFAULT_PHASE, DEFAULT_PHASE);
-+	resizer_set_luma(res, &luma);
-+
-+	/* RESZ_PAD_SOURCE */
-+	resizer_set_output_offset(res, ALIGN(outformat->width * 2, 32));
-+	resizer_set_output_size(res, outformat->width, outformat->height);
-+
-+	resizer_set_crop_params(res, informat, outformat);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Interrupt handling
-+ */
-+
-+static void resizer_enable_oneshot(struct isp_res_device *res)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	isp_reg_set(isp, OMAP3_ISP_IOMEM_RESZ, ISPRSZ_PCR,
-+		    ISPRSZ_PCR_ENABLE | ISPRSZ_PCR_ONESHOT);
-+}
-+
-+void omap3isp_resizer_isr_frame_sync(struct isp_res_device *res)
-+{
-+	/*
-+	 * If ISP_VIDEO_DMAQUEUE_QUEUED is set, DMA queue had an underrun
-+	 * condition, the module was paused and now we have a buffer queued
-+	 * on the output again. Restart the pipeline if running in continuous
-+	 * mode.
-+	 */
-+	if (res->state == ISP_PIPELINE_STREAM_CONTINUOUS &&
-+	    res->video_out.dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED) {
-+		resizer_enable_oneshot(res);
-+		isp_video_dmaqueue_flags_clr(&res->video_out);
-+	}
-+}
-+
-+static void resizer_isr_buffer(struct isp_res_device *res)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&res->subdev.entity);
-+	struct isp_buffer *buffer;
-+	int restart = 0;
-+
-+	if (res->state == ISP_PIPELINE_STREAM_STOPPED)
-+		return;
-+
-+	/* Complete the output buffer and, if reading from memory, the input
-+	 * buffer.
-+	 */
-+	buffer = omap3isp_video_buffer_next(&res->video_out, res->error);
-+	if (buffer != NULL) {
-+		resizer_set_outaddr(res, buffer->isp_addr);
-+		restart = 1;
-+	}
-+
-+	pipe->state |= ISP_PIPELINE_IDLE_OUTPUT;
-+
-+	if (res->input == RESIZER_INPUT_MEMORY) {
-+		buffer = omap3isp_video_buffer_next(&res->video_in, 0);
-+		if (buffer != NULL)
-+			resizer_set_inaddr(res, buffer->isp_addr);
-+		pipe->state |= ISP_PIPELINE_IDLE_INPUT;
-+	}
-+
-+	if (res->state == ISP_PIPELINE_STREAM_SINGLESHOT) {
-+		if (isp_pipeline_ready(pipe))
-+			omap3isp_pipeline_set_stream(pipe,
-+						ISP_PIPELINE_STREAM_SINGLESHOT);
-+	} else {
-+		/* If an underrun occurs, the video queue operation handler will
-+		 * restart the resizer. Otherwise restart it immediately.
-+		 */
-+		if (restart)
-+			resizer_enable_oneshot(res);
-+	}
-+
-+	res->error = 0;
-+}
-+
-+/*
-+ * omap3isp_resizer_isr - ISP resizer interrupt handler
-+ *
-+ * Manage the resizer video buffers and configure shadowed and busy-locked
-+ * registers.
-+ */
-+void omap3isp_resizer_isr(struct isp_res_device *res)
-+{
-+	struct v4l2_mbus_framefmt *informat, *outformat;
-+
-+	if (omap3isp_module_sync_is_stopping(&res->wait, &res->stopping))
-+		return;
-+
-+	if (res->applycrop) {
-+		outformat = __resizer_get_format(res, NULL, RESZ_PAD_SOURCE,
-+					      V4L2_SUBDEV_FORMAT_ACTIVE);
-+		informat = __resizer_get_format(res, NULL, RESZ_PAD_SINK,
-+					      V4L2_SUBDEV_FORMAT_ACTIVE);
-+		resizer_set_crop_params(res, informat, outformat);
-+		res->applycrop = 0;
-+	}
-+
-+	resizer_isr_buffer(res);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP video operations
-+ */
-+
-+static int resizer_video_queue(struct isp_video *video,
-+			       struct isp_buffer *buffer)
-+{
-+	struct isp_res_device *res = &video->isp->isp_res;
-+
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
-+		resizer_set_inaddr(res, buffer->isp_addr);
-+
-+	/*
-+	 * We now have a buffer queued on the output. Despite what the
-+	 * TRM says, the resizer can't be restarted immediately.
-+	 * Enabling it in one shot mode in the middle of a frame (or at
-+	 * least asynchronously to the frame) results in the output
-+	 * being shifted randomly left/right and up/down, as if the
-+	 * hardware didn't synchronize itself to the beginning of the
-+	 * frame correctly.
-+	 *
-+	 * Restart the resizer on the next sync interrupt if running in
-+	 * continuous mode or when starting the stream.
-+	 */
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+		resizer_set_outaddr(res, buffer->isp_addr);
-+
-+	return 0;
-+}
-+
-+static const struct isp_video_operations resizer_video_ops = {
-+	.queue = resizer_video_queue,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 subdev operations
-+ */
-+
-+/*
-+ * resizer_set_stream - Enable/Disable streaming on resizer subdev
-+ * @sd: ISP resizer V4L2 subdev
-+ * @enable: 1 == Enable, 0 == Disable
-+ *
-+ * The resizer hardware can't be enabled without a memory buffer to write to.
-+ * As the s_stream operation is called in response to a STREAMON call without
-+ * any buffer queued yet, just update the state field and return immediately.
-+ * The resizer will be enabled in resizer_video_queue().
-+ */
-+static int resizer_set_stream(struct v4l2_subdev *sd, int enable)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct isp_video *video_out = &res->video_out;
-+	struct isp_device *isp = to_isp_device(res);
-+	struct device *dev = to_device(res);
-+
-+	if (res->state == ISP_PIPELINE_STREAM_STOPPED) {
-+		if (enable == ISP_PIPELINE_STREAM_STOPPED)
-+			return 0;
-+
-+		omap3isp_subclk_enable(isp, OMAP3_ISP_SUBCLK_RESIZER);
-+		resizer_configure(res);
-+		res->error = 0;
-+		resizer_print_status(res);
-+	}
-+
-+	switch (enable) {
-+	case ISP_PIPELINE_STREAM_CONTINUOUS:
-+		omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_RESIZER_WRITE);
-+		if (video_out->dmaqueue_flags & ISP_VIDEO_DMAQUEUE_QUEUED) {
-+			resizer_enable_oneshot(res);
-+			isp_video_dmaqueue_flags_clr(video_out);
-+		}
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_SINGLESHOT:
-+		if (res->input == RESIZER_INPUT_MEMORY)
-+			omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_RESIZER_READ);
-+		omap3isp_sbl_enable(isp, OMAP3_ISP_SBL_RESIZER_WRITE);
-+
-+		resizer_enable_oneshot(res);
-+		break;
-+
-+	case ISP_PIPELINE_STREAM_STOPPED:
-+		if (omap3isp_module_sync_idle(&sd->entity, &res->wait,
-+					      &res->stopping))
-+			dev_dbg(dev, "%s: module stop timeout.\n", sd->name);
-+		omap3isp_sbl_disable(isp, OMAP3_ISP_SBL_RESIZER_READ |
-+				OMAP3_ISP_SBL_RESIZER_WRITE);
-+		omap3isp_subclk_disable(isp, OMAP3_ISP_SUBCLK_RESIZER);
-+		isp_video_dmaqueue_flags_clr(video_out);
-+		break;
-+	}
-+
-+	res->state = enable;
-+	return 0;
-+}
-+
-+/*
-+ * resizer_g_crop - handle get crop subdev operation
-+ * @sd : pointer to v4l2 subdev structure
-+ * @pad : subdev pad
-+ * @crop : pointer to crop structure
-+ * @which : active or try format
-+ * return zero
-+ */
-+static int resizer_g_crop(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			  struct v4l2_subdev_crop *crop)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+	struct resizer_ratio ratio;
-+
-+	/* Only sink pad has crop capability */
-+	if (crop->pad != RESZ_PAD_SINK)
-+		return -EINVAL;
-+
-+	format = __resizer_get_format(res, fh, RESZ_PAD_SOURCE, crop->which);
-+	crop->rect = *__resizer_get_crop(res, fh, crop->which);
-+	resizer_calc_ratios(res, &crop->rect, format, &ratio);
-+
-+	return 0;
-+}
-+
-+/*
-+ * resizer_try_crop - mangles crop parameters.
-+ */
-+static void resizer_try_crop(const struct v4l2_mbus_framefmt *sink,
-+			     const struct v4l2_mbus_framefmt *source,
-+			     struct v4l2_rect *crop)
-+{
-+	const unsigned int spv = DEFAULT_PHASE;
-+	const unsigned int sph = DEFAULT_PHASE;
-+
-+	/* Crop rectangle is constrained to the output size so that zoom ratio
-+	 * cannot exceed +/-4.0.
-+	 */
-+	unsigned int min_width =
-+		((32 * sph + (source->width - 1) * 64 + 16) >> 8) + 7;
-+	unsigned int min_height =
-+		((32 * spv + (source->height - 1) * 64 + 16) >> 8) + 4;
-+	unsigned int max_width =
-+		((64 * sph + (source->width - 1) * 1024 + 32) >> 8) + 7;
-+	unsigned int max_height =
-+		((64 * spv + (source->height - 1) * 1024 + 32) >> 8) + 7;
-+
-+	crop->width = clamp_t(u32, crop->width, min_width, max_width);
-+	crop->height = clamp_t(u32, crop->height, min_height, max_height);
-+
-+	/* Crop can not go beyond of the input rectangle */
-+	crop->left = clamp_t(u32, crop->left, 0, sink->width - MIN_IN_WIDTH);
-+	crop->width = clamp_t(u32, crop->width, MIN_IN_WIDTH,
-+			      sink->width - crop->left);
-+	crop->top = clamp_t(u32, crop->top, 0, sink->height - MIN_IN_HEIGHT);
-+	crop->height = clamp_t(u32, crop->height, MIN_IN_HEIGHT,
-+			       sink->height - crop->top);
-+}
-+
-+/*
-+ * resizer_s_crop - handle set crop subdev operation
-+ * @sd : pointer to v4l2 subdev structure
-+ * @pad : subdev pad
-+ * @crop : pointer to crop structure
-+ * @which : active or try format
-+ * return -EINVAL or zero when succeed
-+ */
-+static int resizer_s_crop(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			  struct v4l2_subdev_crop *crop)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct isp_device *isp = to_isp_device(res);
-+	struct v4l2_mbus_framefmt *format_sink, *format_source;
-+	struct resizer_ratio ratio;
-+
-+	/* Only sink pad has crop capability */
-+	if (crop->pad != RESZ_PAD_SINK)
-+		return -EINVAL;
-+
-+	format_sink = __resizer_get_format(res, fh, RESZ_PAD_SINK,
-+					   crop->which);
-+	format_source = __resizer_get_format(res, fh, RESZ_PAD_SOURCE,
-+					     crop->which);
-+
-+	dev_dbg(isp->dev, "%s: L=%d,T=%d,W=%d,H=%d,which=%d\n", __func__,
-+		crop->rect.left, crop->rect.top, crop->rect.width,
-+		crop->rect.height, crop->which);
-+
-+	dev_dbg(isp->dev, "%s: input=%dx%d, output=%dx%d\n", __func__,
-+		format_sink->width, format_sink->height,
-+		format_source->width, format_source->height);
-+
-+	resizer_try_crop(format_sink, format_source, &crop->rect);
-+	*__resizer_get_crop(res, fh, crop->which) = crop->rect;
-+	resizer_calc_ratios(res, &crop->rect, format_source, &ratio);
-+
-+	if (crop->which == V4L2_SUBDEV_FORMAT_TRY)
-+		return 0;
-+
-+	res->ratio = ratio;
-+	res->crop.active = crop->rect;
-+
-+	/*
-+	 * s_crop can be called while streaming is on. In this case
-+	 * the crop values will be set in the next IRQ.
-+	 */
-+	if (res->state != ISP_PIPELINE_STREAM_STOPPED)
-+		res->applycrop = 1;
-+
-+	return 0;
-+}
-+
-+/* resizer pixel formats */
-+static const unsigned int resizer_formats[] = {
-+	V4L2_MBUS_FMT_UYVY8_1X16,
-+	V4L2_MBUS_FMT_YUYV8_1X16,
-+};
-+
-+static unsigned int resizer_max_in_width(struct isp_res_device *res)
-+{
-+	struct isp_device *isp = to_isp_device(res);
-+
-+	if (res->input == RESIZER_INPUT_MEMORY) {
-+		return MAX_IN_WIDTH_MEMORY_MODE;
-+	} else {
-+		if (isp->revision == ISP_REVISION_1_0)
-+			return MAX_IN_WIDTH_ONTHEFLY_MODE_ES1;
-+		else
-+			return MAX_IN_WIDTH_ONTHEFLY_MODE_ES2;
-+	}
-+}
-+
-+/*
-+ * resizer_try_format - Handle try format by pad subdev method
-+ * @res   : ISP resizer device
-+ * @fh    : V4L2 subdev file handle
-+ * @pad   : pad num
-+ * @fmt   : pointer to v4l2 format structure
-+ * @which : wanted subdev format
-+ */
-+static void resizer_try_format(struct isp_res_device *res,
-+			       struct v4l2_subdev_fh *fh, unsigned int pad,
-+			       struct v4l2_mbus_framefmt *fmt,
-+			       enum v4l2_subdev_format_whence which)
-+{
-+	struct v4l2_mbus_framefmt *format;
-+	struct resizer_ratio ratio;
-+	struct v4l2_rect crop;
-+
-+	switch (pad) {
-+	case RESZ_PAD_SINK:
-+		if (fmt->code != V4L2_MBUS_FMT_YUYV8_1X16 &&
-+		    fmt->code != V4L2_MBUS_FMT_UYVY8_1X16)
-+			fmt->code = V4L2_MBUS_FMT_YUYV8_1X16;
-+
-+		fmt->width = clamp_t(u32, fmt->width, MIN_IN_WIDTH,
-+				     resizer_max_in_width(res));
-+		fmt->height = clamp_t(u32, fmt->height, MIN_IN_HEIGHT,
-+				      MAX_IN_HEIGHT);
-+		break;
-+
-+	case RESZ_PAD_SOURCE:
-+		format = __resizer_get_format(res, fh, RESZ_PAD_SINK, which);
-+		fmt->code = format->code;
-+
-+		crop = *__resizer_get_crop(res, fh, which);
-+		resizer_calc_ratios(res, &crop, fmt, &ratio);
-+		break;
-+	}
-+
-+	fmt->colorspace = V4L2_COLORSPACE_JPEG;
-+	fmt->field = V4L2_FIELD_NONE;
-+}
-+
-+/*
-+ * resizer_enum_mbus_code - Handle pixel format enumeration
-+ * @sd     : pointer to v4l2 subdev structure
-+ * @fh     : V4L2 subdev file handle
-+ * @code   : pointer to v4l2_subdev_mbus_code_enum structure
-+ * return -EINVAL or zero on success
-+ */
-+static int resizer_enum_mbus_code(struct v4l2_subdev *sd,
-+				  struct v4l2_subdev_fh *fh,
-+				  struct v4l2_subdev_mbus_code_enum *code)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	if (code->pad == RESZ_PAD_SINK) {
-+		if (code->index >= ARRAY_SIZE(resizer_formats))
-+			return -EINVAL;
-+
-+		code->code = resizer_formats[code->index];
-+	} else {
-+		if (code->index != 0)
-+			return -EINVAL;
-+
-+		format = __resizer_get_format(res, fh, RESZ_PAD_SINK,
-+					      V4L2_SUBDEV_FORMAT_TRY);
-+		code->code = format->code;
-+	}
-+
-+	return 0;
-+}
-+
-+static int resizer_enum_frame_size(struct v4l2_subdev *sd,
-+				   struct v4l2_subdev_fh *fh,
-+				   struct v4l2_subdev_frame_size_enum *fse)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt format;
-+
-+	if (fse->index != 0)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = 1;
-+	format.height = 1;
-+	resizer_try_format(res, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->min_width = format.width;
-+	fse->min_height = format.height;
-+
-+	if (format.code != fse->code)
-+		return -EINVAL;
-+
-+	format.code = fse->code;
-+	format.width = -1;
-+	format.height = -1;
-+	resizer_try_format(res, fh, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
-+	fse->max_width = format.width;
-+	fse->max_height = format.height;
-+
-+	return 0;
-+}
-+
-+/*
-+ * resizer_get_format - Handle get format by pads subdev method
-+ * @sd    : pointer to v4l2 subdev structure
-+ * @fh    : V4L2 subdev file handle
-+ * @fmt   : pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on sucess
-+ */
-+static int resizer_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+
-+	format = __resizer_get_format(res, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	fmt->format = *format;
-+	return 0;
-+}
-+
-+/*
-+ * resizer_set_format - Handle set format by pads subdev method
-+ * @sd    : pointer to v4l2 subdev structure
-+ * @fh    : V4L2 subdev file handle
-+ * @fmt   : pointer to v4l2 subdev format structure
-+ * return -EINVAL or zero on success
-+ */
-+static int resizer_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
-+			      struct v4l2_subdev_format *fmt)
-+{
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+	struct v4l2_mbus_framefmt *format;
-+	struct v4l2_rect *crop;
-+
-+	format = __resizer_get_format(res, fh, fmt->pad, fmt->which);
-+	if (format == NULL)
-+		return -EINVAL;
-+
-+	resizer_try_format(res, fh, fmt->pad, &fmt->format, fmt->which);
-+	*format = fmt->format;
-+
-+	if (fmt->pad == RESZ_PAD_SINK) {
-+		/* reset crop rectangle */
-+		crop = __resizer_get_crop(res, fh, fmt->which);
-+		crop->left = 0;
-+		crop->top = 0;
-+		crop->width = fmt->format.width;
-+		crop->height = fmt->format.height;
-+
-+		/* Propagate the format from sink to source */
-+		format = __resizer_get_format(res, fh, RESZ_PAD_SOURCE,
-+					      fmt->which);
-+		*format = fmt->format;
-+		resizer_try_format(res, fh, RESZ_PAD_SOURCE, format,
-+				   fmt->which);
-+	}
-+
-+	if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
-+		/* Compute and store the active crop rectangle and resizer
-+		 * ratios. format already points to the source pad active
-+		 * format.
-+		 */
-+		res->crop.active = res->crop.request;
-+		resizer_calc_ratios(res, &res->crop.active, format,
-+				       &res->ratio);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * resizer_init_formats - Initialize formats on all pads
-+ * @sd: ISP resizer V4L2 subdevice
-+ * @fh: V4L2 subdev file handle
-+ *
-+ * Initialize all pad formats with default values. If fh is not NULL, try
-+ * formats are initialized on the file handle. Otherwise active formats are
-+ * initialized on the device.
-+ */
-+static int resizer_init_formats(struct v4l2_subdev *sd,
-+				struct v4l2_subdev_fh *fh)
-+{
-+	struct v4l2_subdev_format format;
-+
-+	memset(&format, 0, sizeof(format));
-+	format.pad = RESZ_PAD_SINK;
-+	format.which = fh ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
-+	format.format.code = V4L2_MBUS_FMT_YUYV8_1X16;
-+	format.format.width = 4096;
-+	format.format.height = 4096;
-+	resizer_set_format(sd, fh, &format);
-+
-+	return 0;
-+}
-+
-+/* subdev core operations */
-+static const struct v4l2_subdev_core_ops resizer_v4l2_core_ops = {
-+	.queryctrl = v4l2_subdev_queryctrl,
-+	.querymenu = v4l2_subdev_querymenu,
-+	.g_ctrl = v4l2_subdev_g_ctrl,
-+	.s_ctrl = v4l2_subdev_s_ctrl,
-+	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
-+	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
-+	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
-+};
-+
-+/* subdev file operations */
-+static const struct v4l2_subdev_file_ops resizer_v4l2_file_ops = {
-+	.open = resizer_init_formats,
-+};
-+
-+/* subdev video operations */
-+static const struct v4l2_subdev_video_ops resizer_v4l2_video_ops = {
-+	.s_stream = resizer_set_stream,
-+};
-+
-+/* subdev pad operations */
-+static const struct v4l2_subdev_pad_ops resizer_v4l2_pad_ops = {
-+	.enum_mbus_code = resizer_enum_mbus_code,
-+	.enum_frame_size = resizer_enum_frame_size,
-+	.get_fmt = resizer_get_format,
-+	.set_fmt = resizer_set_format,
-+	.get_crop = resizer_g_crop,
-+	.set_crop = resizer_s_crop,
-+};
-+
-+/* subdev operations */
-+static const struct v4l2_subdev_ops resizer_v4l2_ops = {
-+	.core = &resizer_v4l2_core_ops,
-+	.file = &resizer_v4l2_file_ops,
-+	.video = &resizer_v4l2_video_ops,
-+	.pad = &resizer_v4l2_pad_ops,
-+};
-+
-+
-+/* -----------------------------------------------------------------------------
-+ * Media entity operations
-+ */
-+
-+/*
-+ * resizer_link_setup - Setup resizer connections.
-+ * @entity : Pointer to media entity structure
-+ * @local  : Pointer to local pad array
-+ * @remote : Pointer to remote pad array
-+ * @flags  : Link flags
-+ * return -EINVAL or zero on success
-+ */
-+static int resizer_link_setup(struct media_entity *entity,
-+			      const struct media_pad *local,
-+			      const struct media_pad *remote, u32 flags)
-+{
-+	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
-+	struct isp_res_device *res = v4l2_get_subdevdata(sd);
-+
-+	switch (local->index | media_entity_type(remote->entity)) {
-+	case RESZ_PAD_SINK | MEDIA_ENT_T_DEVNODE:
-+		/* read from memory */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (res->input == RESIZER_INPUT_VP)
-+				return -EBUSY;
-+			res->input = RESIZER_INPUT_MEMORY;
-+		} else {
-+			if (res->input == RESIZER_INPUT_MEMORY)
-+				res->input = RESIZER_INPUT_NONE;
-+		}
-+		break;
-+
-+	case RESZ_PAD_SINK | MEDIA_ENT_T_V4L2_SUBDEV:
-+		/* read from ccdc or previewer */
-+		if (flags & MEDIA_LNK_FL_ENABLED) {
-+			if (res->input == RESIZER_INPUT_MEMORY)
-+				return -EBUSY;
-+			res->input = RESIZER_INPUT_VP;
-+		} else {
-+			if (res->input == RESIZER_INPUT_VP)
-+				res->input = RESIZER_INPUT_NONE;
-+		}
-+		break;
-+
-+	case RESZ_PAD_SOURCE | MEDIA_ENT_T_DEVNODE:
-+		/* resizer always write to memory */
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	return 0;
-+}
-+
-+/* media operations */
-+static const struct media_entity_operations resizer_media_ops = {
-+	.link_setup = resizer_link_setup,
-+};
-+
-+/*
-+ * resizer_init_entities - Initialize resizer subdev and media entity.
-+ * @res : Pointer to resizer device structure
-+ * return -ENOMEM or zero on success
-+ */
-+static int resizer_init_entities(struct isp_res_device *res)
-+{
-+	struct v4l2_subdev *sd = &res->subdev;
-+	struct media_pad *pads = res->pads;
-+	struct media_entity *me = &sd->entity;
-+	int ret;
-+
-+	res->input = RESIZER_INPUT_NONE;
-+
-+	v4l2_subdev_init(sd, &resizer_v4l2_ops);
-+	strlcpy(sd->name, "OMAP3 ISP resizer", sizeof(sd->name));
-+	sd->grp_id = 1 << 16;	/* group ID for isp subdevs */
-+	v4l2_set_subdevdata(sd, res);
-+	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
-+
-+	v4l2_ctrl_handler_init(&res->ctrls, 1);
-+	sd->ctrl_handler = &res->ctrls;
-+
-+	pads[RESZ_PAD_SINK].flags = MEDIA_PAD_FL_INPUT;
-+	pads[RESZ_PAD_SOURCE].flags = MEDIA_PAD_FL_OUTPUT;
-+
-+	me->ops = &resizer_media_ops;
-+	ret = media_entity_init(me, RESZ_PADS_NUM, pads, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	resizer_init_formats(sd, NULL);
-+
-+	res->video_in.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-+	res->video_in.ops = &resizer_video_ops;
-+	res->video_in.isp = to_isp_device(res);
-+	res->video_in.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3;
-+	res->video_in.bpl_alignment = 32;
-+	res->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-+	res->video_out.ops = &resizer_video_ops;
-+	res->video_out.isp = to_isp_device(res);
-+	res->video_out.capture_mem = PAGE_ALIGN(4096 * 4096) * 2 * 3;
-+	res->video_out.bpl_alignment = 32;
-+
-+	ret = omap3isp_video_init(&res->video_in, "resizer");
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = omap3isp_video_init(&res->video_out, "resizer");
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Connect the video nodes to the resizer subdev. */
-+	ret = media_entity_create_link(&res->video_in.video.entity, 0,
-+			&res->subdev.entity, RESZ_PAD_SINK, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = media_entity_create_link(&res->subdev.entity, RESZ_PAD_SOURCE,
-+			&res->video_out.video.entity, 0, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+void omap3isp_resizer_unregister_entities(struct isp_res_device *res)
-+{
-+	media_entity_cleanup(&res->subdev.entity);
-+
-+	v4l2_device_unregister_subdev(&res->subdev);
-+	v4l2_ctrl_handler_free(&res->ctrls);
-+	omap3isp_video_unregister(&res->video_in);
-+	omap3isp_video_unregister(&res->video_out);
-+}
-+
-+int omap3isp_resizer_register_entities(struct isp_res_device *res,
-+				       struct v4l2_device *vdev)
-+{
-+	int ret;
-+
-+	/* Register the subdev and video nodes. */
-+	ret = v4l2_device_register_subdev(vdev, &res->subdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&res->video_in, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	ret = omap3isp_video_register(&res->video_out, vdev);
-+	if (ret < 0)
-+		goto error;
-+
-+	return 0;
-+
-+error:
-+	omap3isp_resizer_unregister_entities(res);
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP resizer initialization and cleanup
-+ */
-+
-+void omap3isp_resizer_cleanup(struct isp_device *isp)
-+{
-+}
-+
-+/*
-+ * isp_resizer_init - Resizer initialization.
-+ * @isp : Pointer to ISP device
-+ * return -ENOMEM or zero on success
-+ */
-+int omap3isp_resizer_init(struct isp_device *isp)
-+{
-+	struct isp_res_device *res = &isp->isp_res;
-+	int ret;
-+
-+	init_waitqueue_head(&res->wait);
-+	atomic_set(&res->stopping, 0);
-+	ret = resizer_init_entities(res);
-+	if (ret < 0)
-+		goto out;
-+
-+out:
-+	if (ret)
-+		omap3isp_resizer_cleanup(isp);
-+
-+	return ret;
-+}
-diff --git a/drivers/media/video/isp/ispresizer.h b/drivers/media/video/isp/ispresizer.h
-new file mode 100644
-index 0000000..39d188f
---- /dev/null
-+++ b/drivers/media/video/isp/ispresizer.h
-@@ -0,0 +1,150 @@
-+/*
-+ * ispresizer.h
-+ *
-+ * TI OMAP3 ISP - Resizer module
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_RESIZER_H
-+#define OMAP3_ISP_RESIZER_H
-+
-+#include <linux/types.h>
-+#include <media/v4l2-ctrls.h>
-+
-+/*
-+ * Constants for filter coefficents count
-+ */
-+#define COEFF_CNT		32
-+
-+/*
-+ * struct isprsz_coef - Structure for resizer filter coeffcients.
-+ * @h_filter_coef_4tap: Horizontal filter coefficients for 8-phase/4-tap
-+ *			mode (.5x-4x)
-+ * @v_filter_coef_4tap: Vertical filter coefficients for 8-phase/4-tap
-+ *			mode (.5x-4x)
-+ * @h_filter_coef_7tap: Horizontal filter coefficients for 4-phase/7-tap
-+ *			mode (.25x-.5x)
-+ * @v_filter_coef_7tap: Vertical filter coefficients for 4-phase/7-tap
-+ *			mode (.25x-.5x)
-+ */
-+struct isprsz_coef {
-+	u16 h_filter_coef_4tap[32];
-+	u16 v_filter_coef_4tap[32];
-+	/* Every 8th value is a dummy value in the following arrays: */
-+	u16 h_filter_coef_7tap[32];
-+	u16 v_filter_coef_7tap[32];
-+};
-+
-+/* Chrominance horizontal algorithm */
-+enum resizer_chroma_algo {
-+	RSZ_THE_SAME = 0,	/* Chrominance the same as Luminance */
-+	RSZ_BILINEAR = 1,	/* Chrominance uses bilinear interpolation */
-+};
-+
-+/* Resizer input type select */
-+enum resizer_colors_type {
-+	RSZ_YUV422 = 0,		/* YUV422 color is interleaved */
-+	RSZ_COLOR8 = 1,		/* Color separate data on 8 bits */
-+};
-+
-+/*
-+ * Structure for horizontal and vertical resizing value
-+ */
-+struct resizer_ratio {
-+	u32 horz;
-+	u32 vert;
-+};
-+
-+/*
-+ * Structure for luminance enhancer parameters.
-+ */
-+struct resizer_luma_yenh {
-+	u8 algo;		/* algorithm select. */
-+	u8 gain;		/* maximum gain. */
-+	u8 slope;		/* slope. */
-+	u8 core;		/* core offset. */
-+};
-+
-+enum resizer_input_entity {
-+	RESIZER_INPUT_NONE,
-+	RESIZER_INPUT_VP,	/* input video port - prev or ccdc */
-+	RESIZER_INPUT_MEMORY,
-+};
-+
-+/* Sink and source resizer pads */
-+#define RESZ_PAD_SINK			0
-+#define RESZ_PAD_SOURCE			1
-+#define RESZ_PADS_NUM			2
-+
-+/*
-+ * struct isp_res_device - OMAP3 ISP resizer module
-+ * @crop.request: Crop rectangle requested by the user
-+ * @crop.active: Active crop rectangle (based on hardware requirements)
-+ */
-+struct isp_res_device {
-+	struct v4l2_subdev subdev;
-+	struct media_pad pads[RESZ_PADS_NUM];
-+	struct v4l2_mbus_framefmt formats[RESZ_PADS_NUM];
-+
-+	struct v4l2_ctrl_handler ctrls;
-+
-+	enum resizer_input_entity input;
-+	struct isp_video video_in;
-+	struct isp_video video_out;
-+	unsigned int error;
-+
-+	u32 addr_base;   /* stored source buffer address in memory mode */
-+	u32 crop_offset; /* additional offset for crop in memory mode */
-+	struct resizer_ratio ratio;
-+	int pm_state;
-+	unsigned int applycrop:1;
-+	enum isp_pipeline_stream_state state;
-+	wait_queue_head_t wait;
-+	atomic_t stopping;
-+
-+	struct {
-+		struct v4l2_rect request;
-+		struct v4l2_rect active;
-+	} crop;
-+};
-+
-+struct isp_device;
-+
-+int omap3isp_resizer_init(struct isp_device *isp);
-+void omap3isp_resizer_cleanup(struct isp_device *isp);
-+
-+int omap3isp_resizer_register_entities(struct isp_res_device *res,
-+				       struct v4l2_device *vdev);
-+void omap3isp_resizer_unregister_entities(struct isp_res_device *res);
-+void omap3isp_resizer_isr_frame_sync(struct isp_res_device *res);
-+void omap3isp_resizer_isr(struct isp_res_device *isp_res);
-+
-+void omap3isp_resizer_max_rate(struct isp_res_device *res,
-+			       unsigned int *max_rate);
-+
-+void omap3isp_resizer_suspend(struct isp_res_device *isp_res);
-+
-+void omap3isp_resizer_resume(struct isp_res_device *isp_res);
-+
-+int omap3isp_resizer_busy(struct isp_res_device *isp_res);
-+
-+#endif	/* OMAP3_ISP_RESIZER_H */
-diff --git a/drivers/media/video/isp/ispstat.c b/drivers/media/video/isp/ispstat.c
-new file mode 100644
-index 0000000..3406572
---- /dev/null
-+++ b/drivers/media/video/isp/ispstat.c
-@@ -0,0 +1,1100 @@
-+/*
-+ * ispstat.c
-+ *
-+ * TI OMAP3 ISP - Statistics core
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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/dma-mapping.h>
-+#include <linux/slab.h>
-+#include <linux/uaccess.h>
-+
-+#include "isp.h"
-+
-+#define IS_COHERENT_BUF(stat)	((stat)->dma_ch >= 0)
-+
-+/*
-+ * MAGIC_SIZE must always be the greatest common divisor of
-+ * AEWB_PACKET_SIZE and AF_PAXEL_SIZE.
-+ */
-+#define MAGIC_SIZE		16
-+#define MAGIC_NUM		0x55
-+
-+/* HACK: AF module seems to be writing one more paxel data than it should. */
-+#define AF_EXTRA_DATA		OMAP3ISP_AF_PAXEL_SIZE
-+
-+/*
-+ * HACK: H3A modules go to an invalid state after have a SBL overflow. It makes
-+ * the next buffer to start to be written in the same point where the overflow
-+ * occurred instead of the configured address. The only known way to make it to
-+ * go back to a valid state is having a valid buffer processing. Of course it
-+ * requires at least a doubled buffer size to avoid an access to invalid memory
-+ * region. But it does not fix everything. It may happen more than one
-+ * consecutive SBL overflows. In that case, it might be unpredictable how many
-+ * buffers the allocated memory should fit. For that case, a recover
-+ * configuration was created. It produces the minimum buffer size for each H3A
-+ * module and decrease the change for more SBL overflows. This recover state
-+ * will be enabled every time a SBL overflow occur. As the output buffer size
-+ * isn't big, it's possible to have an extra size able to fit many recover
-+ * buffers making it extreamily unlikely to have an access to invalid memory
-+ * region.
-+ */
-+#define NUM_H3A_RECOVER_BUFS	10
-+
-+/*
-+ * HACK: Because of HW issues the generic layer sometimes need to have
-+ * different behaviour for different statistic modules.
-+ */
-+#define IS_H3A_AF(stat)		((stat) == &(stat)->isp->isp_af)
-+#define IS_H3A_AEWB(stat)	((stat) == &(stat)->isp->isp_aewb)
-+#define IS_H3A(stat)		(IS_H3A_AF(stat) || IS_H3A_AEWB(stat))
-+
-+static void __isp_stat_buf_sync_magic(struct ispstat *stat,
-+				      struct ispstat_buffer *buf,
-+				      u32 buf_size, enum dma_data_direction dir,
-+				      void (*dma_sync)(struct device *,
-+					dma_addr_t, unsigned long, size_t,
-+					enum dma_data_direction))
-+{
-+	struct device *dev = stat->isp->dev;
-+	struct page *pg;
-+	dma_addr_t dma_addr;
-+	u32 offset;
-+
-+	/* Initial magic words */
-+	pg = vmalloc_to_page(buf->virt_addr);
-+	dma_addr = page_to_dma(dev, pg);
-+	dma_sync(dev, dma_addr, 0, MAGIC_SIZE, dir);
-+
-+	/* Final magic words */
-+	pg = vmalloc_to_page(buf->virt_addr + buf_size);
-+	dma_addr = page_to_dma(dev, pg);
-+	offset = ((u32)buf->virt_addr + buf_size) & ~PAGE_MASK;
-+	dma_sync(dev, dma_addr, offset, MAGIC_SIZE, dir);
-+}
-+
-+static void isp_stat_buf_sync_magic_for_device(struct ispstat *stat,
-+					       struct ispstat_buffer *buf,
-+					       u32 buf_size,
-+					       enum dma_data_direction dir)
-+{
-+	if (IS_COHERENT_BUF(stat))
-+		return;
-+
-+	__isp_stat_buf_sync_magic(stat, buf, buf_size, dir,
-+				  dma_sync_single_range_for_device);
-+}
-+
-+static void isp_stat_buf_sync_magic_for_cpu(struct ispstat *stat,
-+					    struct ispstat_buffer *buf,
-+					    u32 buf_size,
-+					    enum dma_data_direction dir)
-+{
-+	if (IS_COHERENT_BUF(stat))
-+		return;
-+
-+	__isp_stat_buf_sync_magic(stat, buf, buf_size, dir,
-+				  dma_sync_single_range_for_cpu);
-+}
-+
-+static int isp_stat_buf_check_magic(struct ispstat *stat,
-+				    struct ispstat_buffer *buf)
-+{
-+	const u32 buf_size = IS_H3A_AF(stat) ?
-+			     buf->buf_size + AF_EXTRA_DATA : buf->buf_size;
-+	u8 *w;
-+	u8 *end;
-+	int ret = -EINVAL;
-+
-+	isp_stat_buf_sync_magic_for_cpu(stat, buf, buf_size, DMA_FROM_DEVICE);
-+
-+	/* Checking initial magic numbers. They shouldn't be here anymore. */
-+	for (w = buf->virt_addr, end = w + MAGIC_SIZE; w < end; w++)
-+		if (likely(*w != MAGIC_NUM))
-+			ret = 0;
-+
-+	if (ret) {
-+		dev_dbg(stat->isp->dev, "%s: beginning magic check does not "
-+					"match.\n", stat->subdev.name);
-+		return ret;
-+	}
-+
-+	/* Checking magic numbers at the end. They must be still here. */
-+	for (w = buf->virt_addr + buf_size, end = w + MAGIC_SIZE;
-+	     w < end; w++) {
-+		if (unlikely(*w != MAGIC_NUM)) {
-+			dev_dbg(stat->isp->dev, "%s: endding magic check does "
-+				"not match.\n", stat->subdev.name);
-+			return -EINVAL;
-+		}
-+	}
-+
-+	isp_stat_buf_sync_magic_for_device(stat, buf, buf_size,
-+					   DMA_FROM_DEVICE);
-+
-+	return 0;
-+}
-+
-+static void isp_stat_buf_insert_magic(struct ispstat *stat,
-+				      struct ispstat_buffer *buf)
-+{
-+	const u32 buf_size = IS_H3A_AF(stat) ?
-+			     stat->buf_size + AF_EXTRA_DATA : stat->buf_size;
-+
-+	isp_stat_buf_sync_magic_for_cpu(stat, buf, buf_size, DMA_FROM_DEVICE);
-+
-+	/*
-+	 * Inserting MAGIC_NUM at the beginning and end of the buffer.
-+	 * buf->buf_size is set only after the buffer is queued. For now the
-+	 * right buf_size for the current configuration is pointed by
-+	 * stat->buf_size.
-+	 */
-+	memset(buf->virt_addr, MAGIC_NUM, MAGIC_SIZE);
-+	memset(buf->virt_addr + buf_size, MAGIC_NUM, MAGIC_SIZE);
-+
-+	isp_stat_buf_sync_magic_for_device(stat, buf, buf_size,
-+					   DMA_BIDIRECTIONAL);
-+}
-+
-+static void isp_stat_buf_sync_for_device(struct ispstat *stat,
-+					 struct ispstat_buffer *buf)
-+{
-+	if (IS_COHERENT_BUF(stat))
-+		return;
-+
-+	dma_sync_sg_for_device(stat->isp->dev, buf->iovm->sgt->sgl,
-+			       buf->iovm->sgt->nents, DMA_FROM_DEVICE);
-+}
-+
-+static void isp_stat_buf_sync_for_cpu(struct ispstat *stat,
-+				      struct ispstat_buffer *buf)
-+{
-+	if (IS_COHERENT_BUF(stat))
-+		return;
-+
-+	dma_sync_sg_for_cpu(stat->isp->dev, buf->iovm->sgt->sgl,
-+			    buf->iovm->sgt->nents, DMA_FROM_DEVICE);
-+}
-+
-+static void isp_stat_buf_clear(struct ispstat *stat)
-+{
-+	int i;
-+
-+	for (i = 0; i < STAT_MAX_BUFS; i++)
-+		stat->buf[i].empty = 1;
-+}
-+
-+static struct ispstat_buffer *
-+__isp_stat_buf_find(struct ispstat *stat, int look_empty)
-+{
-+	struct ispstat_buffer *found = NULL;
-+	int i;
-+
-+	for (i = 0; i < STAT_MAX_BUFS; i++) {
-+		struct ispstat_buffer *curr = &stat->buf[i];
-+
-+		/*
-+		 * Don't select the buffer which is being copied to
-+		 * userspace or used by the module.
-+		 */
-+		if (curr == stat->locked_buf || curr == stat->active_buf)
-+			continue;
-+
-+		/* Don't select uninitialised buffers if it's not required */
-+		if (!look_empty && curr->empty)
-+			continue;
-+
-+		/* Pick uninitialised buffer over anything else if look_empty */
-+		if (curr->empty) {
-+			found = curr;
-+			break;
-+		}
-+
-+		/* Choose the oldest buffer */
-+		if (!found ||
-+		    (s32)curr->frame_number - (s32)found->frame_number < 0)
-+			found = curr;
-+	}
-+
-+	return found;
-+}
-+
-+static inline struct ispstat_buffer *
-+isp_stat_buf_find_oldest(struct ispstat *stat)
-+{
-+	return __isp_stat_buf_find(stat, 0);
-+}
-+
-+static inline struct ispstat_buffer *
-+isp_stat_buf_find_oldest_or_empty(struct ispstat *stat)
-+{
-+	return __isp_stat_buf_find(stat, 1);
-+}
-+
-+static int isp_stat_buf_queue(struct ispstat *stat)
-+{
-+	if (!stat->active_buf)
-+		return STAT_NO_BUF;
-+
-+	do_gettimeofday(&stat->active_buf->ts);
-+
-+	stat->active_buf->buf_size = stat->buf_size;
-+	if (isp_stat_buf_check_magic(stat, stat->active_buf)) {
-+		dev_dbg(stat->isp->dev, "%s: data wasn't properly written.\n",
-+			stat->subdev.name);
-+		return STAT_NO_BUF;
-+	}
-+	stat->active_buf->config_counter = stat->config_counter;
-+	stat->active_buf->frame_number = stat->frame_number;
-+	stat->active_buf->empty = 0;
-+	stat->active_buf = NULL;
-+
-+	return STAT_BUF_DONE;
-+}
-+
-+/* Get next free buffer to write the statistics to and mark it active. */
-+static void isp_stat_buf_next(struct ispstat *stat)
-+{
-+	if (unlikely(stat->active_buf))
-+		/* Overwriting unused active buffer */
-+		dev_dbg(stat->isp->dev, "%s: new buffer requested without "
-+					"queuing active one.\n",
-+					stat->subdev.name);
-+	else
-+		stat->active_buf = isp_stat_buf_find_oldest_or_empty(stat);
-+}
-+
-+static void isp_stat_buf_release(struct ispstat *stat)
-+{
-+	unsigned long flags;
-+
-+	isp_stat_buf_sync_for_device(stat, stat->locked_buf);
-+	spin_lock_irqsave(&stat->isp->stat_lock, flags);
-+	stat->locked_buf = NULL;
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+}
-+
-+/* Get buffer to userspace. */
-+static struct ispstat_buffer *isp_stat_buf_get(struct ispstat *stat,
-+					       struct omap3isp_stat_data *data)
-+{
-+	int rval = 0;
-+	unsigned long flags;
-+	struct ispstat_buffer *buf;
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, flags);
-+
-+	while (1) {
-+		buf = isp_stat_buf_find_oldest(stat);
-+		if (!buf) {
-+			spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+			dev_dbg(stat->isp->dev, "%s: cannot find a buffer.\n",
-+				stat->subdev.name);
-+			return ERR_PTR(-EBUSY);
-+		}
-+		if (isp_stat_buf_check_magic(stat, buf)) {
-+			dev_dbg(stat->isp->dev, "%s: current buffer has "
-+				"corrupted data\n.", stat->subdev.name);
-+			/* Mark empty because it doesn't have valid data. */
-+			buf->empty = 1;
-+		} else {
-+			/* Buffer isn't corrupted. */
-+			break;
-+		}
-+	}
-+
-+	stat->locked_buf = buf;
-+
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+
-+	if (buf->buf_size > data->buf_size) {
-+		dev_warn(stat->isp->dev, "%s: userspace's buffer size is "
-+					 "not enough.\n", stat->subdev.name);
-+		isp_stat_buf_release(stat);
-+		return ERR_PTR(-EINVAL);
-+	}
-+
-+	isp_stat_buf_sync_for_cpu(stat, buf);
-+
-+	rval = copy_to_user(data->buf,
-+			    buf->virt_addr,
-+			    buf->buf_size);
-+
-+	if (rval) {
-+		dev_info(stat->isp->dev,
-+			 "%s: failed copying %d bytes of stat data\n",
-+			 stat->subdev.name, rval);
-+		buf = ERR_PTR(-EFAULT);
-+		isp_stat_buf_release(stat);
-+	}
-+
-+	return buf;
-+}
-+
-+static void isp_stat_bufs_free(struct ispstat *stat)
-+{
-+	struct isp_device *isp = stat->isp;
-+	int i;
-+
-+	for (i = 0; i < STAT_MAX_BUFS; i++) {
-+		struct ispstat_buffer *buf = &stat->buf[i];
-+
-+		if (!IS_COHERENT_BUF(stat)) {
-+			if (IS_ERR_OR_NULL((void *)buf->iommu_addr))
-+				continue;
-+			if (buf->iovm)
-+				dma_unmap_sg(isp->dev, buf->iovm->sgt->sgl,
-+					     buf->iovm->sgt->nents,
-+					     DMA_FROM_DEVICE);
-+			iommu_vfree(isp->iommu, buf->iommu_addr);
-+		} else {
-+			if (!buf->virt_addr)
-+				continue;
-+			dma_free_coherent(stat->isp->dev, stat->buf_alloc_size,
-+					  buf->virt_addr, buf->dma_addr);
-+		}
-+		buf->iommu_addr = 0;
-+		buf->iovm = NULL;
-+		buf->dma_addr = 0;
-+		buf->virt_addr = NULL;
-+		buf->empty = 1;
-+	}
-+
-+	dev_dbg(stat->isp->dev, "%s: all buffers were freed.\n",
-+		stat->subdev.name);
-+
-+	stat->buf_alloc_size = 0;
-+	stat->active_buf = NULL;
-+}
-+
-+static int isp_stat_bufs_alloc_iommu(struct ispstat *stat, unsigned int size)
-+{
-+	struct isp_device *isp = stat->isp;
-+	int i;
-+
-+	stat->buf_alloc_size = size;
-+
-+	for (i = 0; i < STAT_MAX_BUFS; i++) {
-+		struct ispstat_buffer *buf = &stat->buf[i];
-+		struct iovm_struct *iovm;
-+
-+		WARN_ON(buf->dma_addr);
-+		buf->iommu_addr = iommu_vmalloc(isp->iommu, 0, size,
-+						IOMMU_FLAG);
-+		if (IS_ERR((void *)buf->iommu_addr)) {
-+			dev_err(stat->isp->dev,
-+				 "%s: Can't acquire memory for "
-+				 "buffer %d\n", stat->subdev.name, i);
-+			isp_stat_bufs_free(stat);
-+			return -ENOMEM;
-+		}
-+
-+		iovm = find_iovm_area(isp->iommu, buf->iommu_addr);
-+		if (!iovm ||
-+		    !dma_map_sg(isp->dev, iovm->sgt->sgl, iovm->sgt->nents,
-+				DMA_FROM_DEVICE)) {
-+			isp_stat_bufs_free(stat);
-+			return -ENOMEM;
-+		}
-+		buf->iovm = iovm;
-+
-+		buf->virt_addr = da_to_va(stat->isp->iommu,
-+					  (u32)buf->iommu_addr);
-+		buf->empty = 1;
-+		dev_dbg(stat->isp->dev, "%s: buffer[%d] allocated."
-+			"iommu_addr=0x%08lx virt_addr=0x%08lx",
-+			stat->subdev.name, i, buf->iommu_addr,
-+			(unsigned long)buf->virt_addr);
-+	}
-+
-+	return 0;
-+}
-+
-+static int isp_stat_bufs_alloc_dma(struct ispstat *stat, unsigned int size)
-+{
-+	int i;
-+
-+	stat->buf_alloc_size = size;
-+
-+	for (i = 0; i < STAT_MAX_BUFS; i++) {
-+		struct ispstat_buffer *buf = &stat->buf[i];
-+
-+		WARN_ON(buf->iommu_addr);
-+		buf->virt_addr = dma_alloc_coherent(stat->isp->dev, size,
-+					&buf->dma_addr, GFP_KERNEL | GFP_DMA);
-+
-+		if (!buf->virt_addr || !buf->dma_addr) {
-+			dev_info(stat->isp->dev,
-+				 "%s: Can't acquire memory for "
-+				 "DMA buffer %d\n", stat->subdev.name, i);
-+			isp_stat_bufs_free(stat);
-+			return -ENOMEM;
-+		}
-+		buf->empty = 1;
-+
-+		dev_dbg(stat->isp->dev, "%s: buffer[%d] allocated."
-+			"dma_addr=0x%08lx virt_addr=0x%08lx\n",
-+			stat->subdev.name, i, (unsigned long)buf->dma_addr,
-+			(unsigned long)buf->virt_addr);
-+	}
-+
-+	return 0;
-+}
-+
-+static int isp_stat_bufs_alloc(struct ispstat *stat, u32 size)
-+{
-+	unsigned long flags;
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, flags);
-+
-+	BUG_ON(stat->locked_buf != NULL);
-+
-+	/* Are the old buffers big enough? */
-+	if (stat->buf_alloc_size >= size) {
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+		return 0;
-+	}
-+
-+	if (stat->state != ISPSTAT_DISABLED || stat->buf_processing) {
-+		dev_info(stat->isp->dev,
-+			 "%s: trying to allocate memory when busy\n",
-+			 stat->subdev.name);
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+		return -EBUSY;
-+	}
-+
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+
-+	isp_stat_bufs_free(stat);
-+
-+	if (IS_COHERENT_BUF(stat))
-+		return isp_stat_bufs_alloc_dma(stat, size);
-+	else
-+		return isp_stat_bufs_alloc_iommu(stat, size);
-+}
-+
-+static void isp_stat_queue_event(struct ispstat *stat, int err)
-+{
-+	struct video_device *vdev = &stat->subdev.devnode;
-+	struct v4l2_event event;
-+	struct omap3isp_stat_event_status *status = (void *)event.u.data;
-+
-+	memset(&event, 0, sizeof(event));
-+	if (!err) {
-+		status->frame_number = stat->frame_number;
-+		status->config_counter = stat->config_counter;
-+	} else {
-+		status->buf_err = 1;
-+	}
-+	event.type = stat->event_type;
-+	v4l2_event_queue(vdev, &event);
-+}
-+
-+
-+/*
-+ * omap3isp_stat_request_statistics - Request statistics.
-+ * @data: Pointer to return statistics data.
-+ *
-+ * Returns 0 if successful.
-+ */
-+int omap3isp_stat_request_statistics(struct ispstat *stat,
-+				     struct omap3isp_stat_data *data)
-+{
-+	struct ispstat_buffer *buf;
-+
-+	if (stat->state != ISPSTAT_ENABLED) {
-+		dev_dbg(stat->isp->dev, "%s: engine not enabled.\n",
-+			stat->subdev.name);
-+		return -EINVAL;
-+	}
-+
-+	mutex_lock(&stat->ioctl_lock);
-+	buf = isp_stat_buf_get(stat, data);
-+	if (IS_ERR(buf)) {
-+		mutex_unlock(&stat->ioctl_lock);
-+		return PTR_ERR(buf);
-+	}
-+
-+	data->ts = buf->ts;
-+	data->config_counter = buf->config_counter;
-+	data->frame_number = buf->frame_number;
-+	data->buf_size = buf->buf_size;
-+
-+	/*
-+	 * Deprecated. Number of new buffers is always equal to number of
-+	 * queued events without error flag. By setting it to 0, userspace
-+	 * won't try to request new buffer without receiving new event.
-+	 * This field must go away in future.
-+	 */
-+	data->new_bufs = 0;
-+
-+	buf->empty = 1;
-+	isp_stat_buf_release(stat);
-+	mutex_unlock(&stat->ioctl_lock);
-+
-+	return 0;
-+}
-+
-+/*
-+ * omap3isp_stat_config - Receives new statistic engine configuration.
-+ * @new_conf: Pointer to config structure.
-+ *
-+ * Returns 0 if successful, -EINVAL if new_conf pointer is NULL, -ENOMEM if
-+ * was unable to allocate memory for the buffer, or other errors if parameters
-+ * are invalid.
-+ */
-+int omap3isp_stat_config(struct ispstat *stat, void *new_conf)
-+{
-+	int ret;
-+	unsigned long irqflags;
-+	struct ispstat_generic_config *user_cfg = new_conf;
-+	u32 buf_size = user_cfg->buf_size;
-+
-+	if (!new_conf) {
-+		dev_dbg(stat->isp->dev, "%s: configuration is NULL\n",
-+			stat->subdev.name);
-+		return -EINVAL;
-+	}
-+
-+	mutex_lock(&stat->ioctl_lock);
-+
-+	dev_dbg(stat->isp->dev, "%s: configuring module with buffer "
-+		"size=0x%08lx\n", stat->subdev.name, (unsigned long)buf_size);
-+
-+	ret = stat->ops->validate_params(stat, new_conf);
-+	if (ret) {
-+		mutex_unlock(&stat->ioctl_lock);
-+		dev_dbg(stat->isp->dev, "%s: configuration values are "
-+					"invalid.\n", stat->subdev.name);
-+		return ret;
-+	}
-+
-+	if (buf_size != user_cfg->buf_size)
-+		dev_dbg(stat->isp->dev, "%s: driver has corrected buffer size "
-+			"request to 0x%08lx\n", stat->subdev.name,
-+			(unsigned long)user_cfg->buf_size);
-+
-+	/*
-+	 * Hack: H3A modules may need a doubled buffer size to avoid access
-+	 * to a invalid memory address after a SBL overflow.
-+	 * The buffer size is always PAGE_ALIGNED.
-+	 * Hack 2: MAGIC_SIZE is added to buf_size so a magic word can be
-+	 * inserted at the end to data integrity check purpose.
-+	 * Hack 3: AF module writes one paxel data more than it should, so
-+	 * the buffer allocation must consider it to avoid invalid memory
-+	 * access.
-+	 * Hack 4: H3A need to allocate extra space for the recover state.
-+	 */
-+	if (IS_H3A(stat)) {
-+		buf_size = user_cfg->buf_size * 2 + MAGIC_SIZE;
-+		if (IS_H3A_AF(stat))
-+			/*
-+			 * Adding one extra paxel data size for each recover
-+			 * buffer + 2 regular ones.
-+			 */
-+			buf_size += AF_EXTRA_DATA * (NUM_H3A_RECOVER_BUFS + 2);
-+		if (stat->recover_priv) {
-+			struct ispstat_generic_config *recover_cfg =
-+				stat->recover_priv;
-+			buf_size += recover_cfg->buf_size *
-+				    NUM_H3A_RECOVER_BUFS;
-+		}
-+		buf_size = PAGE_ALIGN(buf_size);
-+	} else { /* Histogram */
-+		buf_size = PAGE_ALIGN(user_cfg->buf_size + MAGIC_SIZE);
-+	}
-+
-+	ret = isp_stat_bufs_alloc(stat, buf_size);
-+	if (ret) {
-+		mutex_unlock(&stat->ioctl_lock);
-+		return ret;
-+	}
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, irqflags);
-+	stat->ops->set_params(stat, new_conf);
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+
-+	/*
-+	 * Returning the right future config_counter for this setup, so
-+	 * userspace can *know* when it has been applied.
-+	 */
-+	user_cfg->config_counter = stat->config_counter + stat->inc_config;
-+
-+	/* Module has a valid configuration. */
-+	stat->configured = 1;
-+	dev_dbg(stat->isp->dev, "%s: module has been successfully "
-+		"configured.\n", stat->subdev.name);
-+
-+	mutex_unlock(&stat->ioctl_lock);
-+
-+	return 0;
-+}
-+
-+/*
-+ * isp_stat_buf_process - Process statistic buffers.
-+ * @buf_state: points out if buffer is ready to be processed. It's necessary
-+ *	       because histogram needs to copy the data from internal memory
-+ *	       before be able to process the buffer.
-+ */
-+static int isp_stat_buf_process(struct ispstat *stat, int buf_state)
-+{
-+	int ret = STAT_NO_BUF;
-+
-+	if (!atomic_add_unless(&stat->buf_err, -1, 0) &&
-+	    buf_state == STAT_BUF_DONE && stat->state == ISPSTAT_ENABLED) {
-+		ret = isp_stat_buf_queue(stat);
-+		isp_stat_buf_next(stat);
-+	}
-+
-+	return ret;
-+}
-+
-+int omap3isp_stat_pcr_busy(struct ispstat *stat)
-+{
-+	return stat->ops->busy(stat);
-+}
-+
-+int omap3isp_stat_busy(struct ispstat *stat)
-+{
-+	return omap3isp_stat_pcr_busy(stat) | stat->buf_processing |
-+		(stat->state != ISPSTAT_DISABLED);
-+}
-+
-+/*
-+ * isp_stat_pcr_enable - Disables/Enables statistic engines.
-+ * @pcr_enable: 0/1 - Disables/Enables the engine.
-+ *
-+ * Must be called from ISP driver when the module is idle and synchronized
-+ * with CCDC.
-+ */
-+static void isp_stat_pcr_enable(struct ispstat *stat, u8 pcr_enable)
-+{
-+	if ((stat->state != ISPSTAT_ENABLING &&
-+	     stat->state != ISPSTAT_ENABLED) && pcr_enable)
-+		/* Userspace has disabled the module. Aborting. */
-+		return;
-+
-+	stat->ops->enable(stat, pcr_enable);
-+	if (stat->state == ISPSTAT_DISABLING && !pcr_enable)
-+		stat->state = ISPSTAT_DISABLED;
-+	else if (stat->state == ISPSTAT_ENABLING && pcr_enable)
-+		stat->state = ISPSTAT_ENABLED;
-+}
-+
-+void omap3isp_stat_suspend(struct ispstat *stat)
-+{
-+	unsigned long flags;
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, flags);
-+
-+	if (stat->state != ISPSTAT_DISABLED)
-+		stat->ops->enable(stat, 0);
-+	if (stat->state == ISPSTAT_ENABLED)
-+		stat->state = ISPSTAT_SUSPENDED;
-+
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+}
-+
-+void omap3isp_stat_resume(struct ispstat *stat)
-+{
-+	/* Module will be re-enabled with its pipeline */
-+	if (stat->state == ISPSTAT_SUSPENDED)
-+		stat->state = ISPSTAT_ENABLING;
-+}
-+
-+static void isp_stat_try_enable(struct ispstat *stat)
-+{
-+	unsigned long irqflags;
-+
-+	if (stat->priv == NULL)
-+		/* driver wasn't initialised */
-+		return;
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, irqflags);
-+	if (stat->state == ISPSTAT_ENABLING && !stat->buf_processing &&
-+	    stat->buf_alloc_size) {
-+		/*
-+		 * Userspace's requested to enable the engine but it wasn't yet.
-+		 * Let's do that now.
-+		 */
-+		stat->update = 1;
-+		isp_stat_buf_next(stat);
-+		stat->ops->setup_regs(stat, stat->priv);
-+		isp_stat_buf_insert_magic(stat, stat->active_buf);
-+
-+		/*
-+		 * H3A module has some hw issues which forces the driver to
-+		 * ignore next buffers even if it was disabled in the meantime.
-+		 * On the other hand, Histogram shouldn't ignore buffers anymore
-+		 * if it's being enabled.
-+		 */
-+		if (!IS_H3A(stat))
-+			atomic_set(&stat->buf_err, 0);
-+
-+		isp_stat_pcr_enable(stat, 1);
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+		dev_dbg(stat->isp->dev, "%s: module is enabled.\n",
-+			stat->subdev.name);
-+	} else {
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+	}
-+}
-+
-+void omap3isp_stat_isr_frame_sync(struct ispstat *stat)
-+{
-+	isp_stat_try_enable(stat);
-+}
-+
-+void omap3isp_stat_sbl_overflow(struct ispstat *stat)
-+{
-+	unsigned long irqflags;
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, irqflags);
-+	/*
-+	 * Due to a H3A hw issue which prevents the next buffer to start from
-+	 * the correct memory address, 2 buffers must be ignored.
-+	 */
-+	atomic_set(&stat->buf_err, 2);
-+
-+	/*
-+	 * If more than one SBL overflow happen in a row, H3A module may access
-+	 * invalid memory region.
-+	 * stat->sbl_ovl_recover is set to tell to the driver to temporarily use
-+	 * a soft configuration which helps to avoid consecutive overflows.
-+	 */
-+	if (stat->recover_priv)
-+		stat->sbl_ovl_recover = 1;
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+}
-+
-+/*
-+ * omap3isp_stat_enable - Disable/Enable statistic engine as soon as possible
-+ * @enable: 0/1 - Disables/Enables the engine.
-+ *
-+ * Client should configure all the module registers before this.
-+ * This function can be called from a userspace request.
-+ */
-+int omap3isp_stat_enable(struct ispstat *stat, u8 enable)
-+{
-+	unsigned long irqflags;
-+
-+	dev_dbg(stat->isp->dev, "%s: user wants to %s module.\n",
-+		stat->subdev.name, enable ? "enable" : "disable");
-+
-+	/* Prevent enabling while configuring */
-+	mutex_lock(&stat->ioctl_lock);
-+
-+	spin_lock_irqsave(&stat->isp->stat_lock, irqflags);
-+
-+	if (!stat->configured && enable) {
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+		mutex_unlock(&stat->ioctl_lock);
-+		dev_dbg(stat->isp->dev, "%s: cannot enable module as it's "
-+			"never been successfully configured so far.\n",
-+			stat->subdev.name);
-+		return -EINVAL;
-+	}
-+
-+	if (enable) {
-+		if (stat->state == ISPSTAT_DISABLING)
-+			/* Previous disabling request wasn't done yet */
-+			stat->state = ISPSTAT_ENABLED;
-+		else if (stat->state == ISPSTAT_DISABLED)
-+			/* Module is now being enabled */
-+			stat->state = ISPSTAT_ENABLING;
-+	} else {
-+		if (stat->state == ISPSTAT_ENABLING) {
-+			/* Previous enabling request wasn't done yet */
-+			stat->state = ISPSTAT_DISABLED;
-+		} else if (stat->state == ISPSTAT_ENABLED) {
-+			/* Module is now being disabled */
-+			stat->state = ISPSTAT_DISABLING;
-+			isp_stat_buf_clear(stat);
-+		}
-+	}
-+
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+	mutex_unlock(&stat->ioctl_lock);
-+
-+	return 0;
-+}
-+
-+int omap3isp_stat_s_stream(struct v4l2_subdev *subdev, int enable)
-+{
-+	struct ispstat *stat = v4l2_get_subdevdata(subdev);
-+
-+	if (enable) {
-+		/*
-+		 * Only set enable PCR bit if the module was previously
-+		 * enabled through ioct.
-+		 */
-+		isp_stat_try_enable(stat);
-+	} else {
-+		unsigned long flags;
-+		/* Disable PCR bit and config enable field */
-+		omap3isp_stat_enable(stat, 0);
-+		spin_lock_irqsave(&stat->isp->stat_lock, flags);
-+		stat->ops->enable(stat, 0);
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, flags);
-+
-+		/*
-+		 * If module isn't busy, a new interrupt may come or not to
-+		 * set the state to DISABLED. As Histogram needs to read its
-+		 * internal memory to clear it, let interrupt handler
-+		 * responsible of changing state to DISABLED. If the last
-+		 * interrupt is coming, it's still safe as the handler will
-+		 * ignore the second time when state is already set to DISABLED.
-+		 * It's necessary to synchronize Histogram with streamoff, once
-+		 * the module may be considered idle before last SDMA transfer
-+		 * starts if we return here.
-+		 */
-+		if (!omap3isp_stat_pcr_busy(stat))
-+			omap3isp_stat_isr(stat);
-+
-+		dev_dbg(stat->isp->dev, "%s: module is being disabled\n",
-+			stat->subdev.name);
-+	}
-+
-+	return 0;
-+}
-+
-+/*
-+ * __stat_isr - Interrupt handler for statistic drivers
-+ */
-+static void __stat_isr(struct ispstat *stat, int from_dma)
-+{
-+	int ret = STAT_BUF_DONE;
-+	int buf_processing;
-+	unsigned long irqflags;
-+	struct isp_pipeline *pipe;
-+
-+	/*
-+	 * stat->buf_processing must be set before disable module. It's
-+	 * necessary to not inform too early the buffers aren't busy in case
-+	 * of SDMA is going to be used.
-+	 */
-+	spin_lock_irqsave(&stat->isp->stat_lock, irqflags);
-+	if (stat->state == ISPSTAT_DISABLED) {
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+		return;
-+	}
-+	buf_processing = stat->buf_processing;
-+	stat->buf_processing = 1;
-+	stat->ops->enable(stat, 0);
-+
-+	if (buf_processing && !from_dma) {
-+		if (stat->state == ISPSTAT_ENABLED) {
-+			spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+			dev_err(stat->isp->dev,
-+				"%s: interrupt occurred when module was still "
-+				"processing a buffer.\n", stat->subdev.name);
-+			ret = STAT_NO_BUF;
-+			goto out;
-+		} else {
-+			/*
-+			 * Interrupt handler was called from streamoff when
-+			 * the module wasn't busy anymore to ensure it is being
-+			 * disabled after process last buffer. If such buffer
-+			 * processing has already started, no need to do
-+			 * anything else.
-+			 */
-+			spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+			return;
-+		}
-+	}
-+	spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+
-+	/* If it's busy we can't process this buffer anymore */
-+	if (!omap3isp_stat_pcr_busy(stat)) {
-+		if (!from_dma && stat->ops->buf_process)
-+			/* Module still need to copy data to buffer. */
-+			ret = stat->ops->buf_process(stat);
-+		if (ret == STAT_BUF_WAITING_DMA)
-+			/* Buffer is not ready yet */
-+			return;
-+
-+		spin_lock_irqsave(&stat->isp->stat_lock, irqflags);
-+
-+		/*
-+		 * Histogram needs to read its internal memory to clear it
-+		 * before be disabled. For that reason, common statistic layer
-+		 * can return only after call stat's buf_process() operator.
-+		 */
-+		if (stat->state == ISPSTAT_DISABLING) {
-+			stat->state = ISPSTAT_DISABLED;
-+			spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+			stat->buf_processing = 0;
-+			return;
-+		}
-+		pipe = to_isp_pipeline(&stat->subdev.entity);
-+		stat->frame_number = atomic_read(&pipe->frame_number);
-+
-+		/*
-+		 * Before this point, 'ret' stores the buffer's status if it's
-+		 * ready to be processed. Afterwards, it holds the status if
-+		 * it was processed successfully.
-+		 */
-+		ret = isp_stat_buf_process(stat, ret);
-+
-+		if (likely(!stat->sbl_ovl_recover)) {
-+			stat->ops->setup_regs(stat, stat->priv);
-+		} else {
-+			/*
-+			 * Using recover config to increase the chance to have
-+			 * a good buffer processing and make the H3A module to
-+			 * go back to a valid state.
-+			 */
-+			stat->update = 1;
-+			stat->ops->setup_regs(stat, stat->recover_priv);
-+			stat->sbl_ovl_recover = 0;
-+
-+			/*
-+			 * Set 'update' in case of the module needs to use
-+			 * regular configuration after next buffer.
-+			 */
-+			stat->update = 1;
-+		}
-+
-+		isp_stat_buf_insert_magic(stat, stat->active_buf);
-+
-+		/*
-+		 * Hack: H3A modules may access invalid memory address or send
-+		 * corrupted data to userspace if more than 1 SBL overflow
-+		 * happens in a row without re-writing its buffer's start memory
-+		 * address in the meantime. Such situation is avoided if the
-+		 * module is not immediately re-enabled when the ISR misses the
-+		 * timing to process the buffer and to setup the registers.
-+		 * Because of that, pcr_enable(1) was moved to inside this 'if'
-+		 * block. But the next interruption will still happen as during
-+		 * pcr_enable(0) the module was busy.
-+		 */
-+		isp_stat_pcr_enable(stat, 1);
-+		spin_unlock_irqrestore(&stat->isp->stat_lock, irqflags);
-+	} else {
-+		/*
-+		 * If a SBL overflow occurs and the H3A driver misses the timing
-+		 * to process the buffer, stat->buf_err is set and won't be
-+		 * cleared now. So the next buffer will be correctly ignored.
-+		 * It's necessary due to a hw issue which makes the next H3A
-+		 * buffer to start from the memory address where the previous
-+		 * one stopped, instead of start where it was configured to.
-+		 * Do not "stat->buf_err = 0" here.
-+		 */
-+
-+		if (stat->ops->buf_process)
-+			/*
-+			 * Driver may need to erase current data prior to
-+			 * process a new buffer. If it misses the timing, the
-+			 * next buffer might be wrong. So should be ignored.
-+			 * It happens only for Histogram.
-+			 */
-+			atomic_set(&stat->buf_err, 1);
-+
-+		ret = STAT_NO_BUF;
-+		dev_dbg(stat->isp->dev, "%s: cannot process buffer, "
-+					"device is busy.\n", stat->subdev.name);
-+	}
-+
-+out:
-+	stat->buf_processing = 0;
-+	isp_stat_queue_event(stat, ret != STAT_BUF_DONE);
-+}
-+
-+void omap3isp_stat_isr(struct ispstat *stat)
-+{
-+	__stat_isr(stat, 0);
-+}
-+
-+void omap3isp_stat_dma_isr(struct ispstat *stat)
-+{
-+	__stat_isr(stat, 1);
-+}
-+
-+static int isp_stat_init_entities(struct ispstat *stat, const char *name,
-+				  const struct v4l2_subdev_ops *sd_ops)
-+{
-+	struct v4l2_subdev *subdev = &stat->subdev;
-+	struct media_entity *me = &subdev->entity;
-+
-+	v4l2_subdev_init(subdev, sd_ops);
-+	snprintf(subdev->name, V4L2_SUBDEV_NAME_SIZE, "OMAP3 ISP %s", name);
-+	subdev->grp_id = 1 << 16;	/* group ID for isp subdevs */
-+	subdev->flags |= V4L2_SUBDEV_FL_HAS_EVENTS | V4L2_SUBDEV_FL_HAS_DEVNODE;
-+	subdev->nevents = STAT_NEVENTS;
-+	v4l2_set_subdevdata(subdev, stat);
-+
-+	stat->pad.flags = MEDIA_PAD_FL_INPUT;
-+	me->ops = NULL;
-+
-+	return media_entity_init(me, 1, &stat->pad, 0);
-+}
-+
-+int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,
-+				  struct v4l2_fh *fh,
-+				  struct v4l2_event_subscription *sub)
-+{
-+	struct ispstat *stat = v4l2_get_subdevdata(subdev);
-+
-+	if (sub->type != stat->event_type)
-+		return -EINVAL;
-+
-+	return v4l2_event_subscribe(fh, sub);
-+}
-+
-+int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev,
-+				    struct v4l2_fh *fh,
-+				    struct v4l2_event_subscription *sub)
-+{
-+	return v4l2_event_unsubscribe(fh, sub);
-+}
-+
-+void omap3isp_stat_unregister_entities(struct ispstat *stat)
-+{
-+	media_entity_cleanup(&stat->subdev.entity);
-+	v4l2_device_unregister_subdev(&stat->subdev);
-+}
-+
-+int omap3isp_stat_register_entities(struct ispstat *stat,
-+				    struct v4l2_device *vdev)
-+{
-+	return v4l2_device_register_subdev(vdev, &stat->subdev);
-+}
-+
-+int omap3isp_stat_init(struct ispstat *stat, const char *name,
-+		       const struct v4l2_subdev_ops *sd_ops)
-+{
-+	stat->buf = kcalloc(STAT_MAX_BUFS, sizeof(*stat->buf), GFP_KERNEL);
-+	if (!stat->buf)
-+		return -ENOMEM;
-+	isp_stat_buf_clear(stat);
-+	mutex_init(&stat->ioctl_lock);
-+	atomic_set(&stat->buf_err, 0);
-+
-+	return isp_stat_init_entities(stat, name, sd_ops);
-+}
-+
-+void omap3isp_stat_free(struct ispstat *stat)
-+{
-+	isp_stat_bufs_free(stat);
-+	kfree(stat->buf);
-+}
-diff --git a/drivers/media/video/isp/ispstat.h b/drivers/media/video/isp/ispstat.h
-new file mode 100644
-index 0000000..5298d33
---- /dev/null
-+++ b/drivers/media/video/isp/ispstat.h
-@@ -0,0 +1,169 @@
-+/*
-+ * ispstat.h
-+ *
-+ * TI OMAP3 ISP - Statistics core
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc
-+ *
-+ * Contacts: David Cohen <david.cohen at nokia.com>
-+ *	     Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_STAT_H
-+#define OMAP3_ISP_STAT_H
-+
-+#include <linux/types.h>
-+#include <linux/omap3isp.h>
-+#include <plat/dma.h>
-+#include <media/v4l2-event.h>
-+
-+#include "isp.h"
-+#include "ispvideo.h"
-+
-+#define STAT_MAX_BUFS		5
-+#define STAT_NEVENTS		8
-+
-+#define STAT_BUF_DONE		0	/* Buffer is ready */
-+#define STAT_NO_BUF		1	/* An error has occurred */
-+#define STAT_BUF_WAITING_DMA	2	/* Histogram only: DMA is running */
-+
-+struct ispstat;
-+
-+struct ispstat_buffer {
-+	unsigned long iommu_addr;
-+	struct iovm_struct *iovm;
-+	void *virt_addr;
-+	dma_addr_t dma_addr;
-+	struct timeval ts;
-+	u32 buf_size;
-+	u32 frame_number;
-+	u16 config_counter;
-+	u8 empty;
-+};
-+
-+struct ispstat_ops {
-+	/*
-+	 * Validate new params configuration.
-+	 * new_conf->buf_size value must be changed to the exact buffer size
-+	 * necessary for the new configuration if it's smaller.
-+	 */
-+	int (*validate_params)(struct ispstat *stat, void *new_conf);
-+
-+	/*
-+	 * Save new params configuration.
-+	 * stat->priv->buf_size value must be set to the exact buffer size for
-+	 * the new configuration.
-+	 * stat->update is set to 1 if new configuration is different than
-+	 * current one.
-+	 */
-+	void (*set_params)(struct ispstat *stat, void *new_conf);
-+
-+	/* Apply stored configuration. */
-+	void (*setup_regs)(struct ispstat *stat, void *priv);
-+
-+	/* Enable/Disable module. */
-+	void (*enable)(struct ispstat *stat, int enable);
-+
-+	/* Verify is module is busy. */
-+	int (*busy)(struct ispstat *stat);
-+
-+	/* Used for specific operations during generic buf process task. */
-+	int (*buf_process)(struct ispstat *stat);
-+};
-+
-+enum ispstat_state_t {
-+	ISPSTAT_DISABLED = 0,
-+	ISPSTAT_DISABLING,
-+	ISPSTAT_ENABLED,
-+	ISPSTAT_ENABLING,
-+	ISPSTAT_SUSPENDED,
-+};
-+
-+struct ispstat {
-+	struct v4l2_subdev subdev;
-+	struct media_pad pad;	/* sink pad */
-+
-+	/* Control */
-+	unsigned configured:1;
-+	unsigned update:1;
-+	unsigned buf_processing:1;
-+	unsigned sbl_ovl_recover:1;
-+	u8 inc_config;
-+	atomic_t buf_err;
-+	enum ispstat_state_t state;	/* enabling/disabling state */
-+	struct omap_dma_channel_params dma_config;
-+	struct isp_device *isp;
-+	void *priv;		/* pointer to priv config struct */
-+	void *recover_priv;	/* pointer to recover priv configuration */
-+	struct mutex ioctl_lock; /* serialize private ioctl */
-+
-+	const struct ispstat_ops *ops;
-+
-+	/* Buffer */
-+	u8 wait_acc_frames;
-+	u16 config_counter;
-+	u32 frame_number;
-+	u32 buf_size;
-+	u32 buf_alloc_size;
-+	int dma_ch;
-+	unsigned long event_type;
-+	struct ispstat_buffer *buf;
-+	struct ispstat_buffer *active_buf;
-+	struct ispstat_buffer *locked_buf;
-+};
-+
-+struct ispstat_generic_config {
-+	/*
-+	 * Fields must be in the same order as in:
-+	 *  - isph3a_aewb_config
-+	 *  - isph3a_af_config
-+	 *  - isphist_config
-+	 */
-+	u32 buf_size;
-+	u16 config_counter;
-+};
-+
-+int omap3isp_stat_config(struct ispstat *stat, void *new_conf);
-+int omap3isp_stat_request_statistics(struct ispstat *stat,
-+				     struct omap3isp_stat_data *data);
-+int omap3isp_stat_init(struct ispstat *stat, const char *name,
-+		       const struct v4l2_subdev_ops *sd_ops);
-+void omap3isp_stat_free(struct ispstat *stat);
-+int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,
-+				  struct v4l2_fh *fh,
-+				  struct v4l2_event_subscription *sub);
-+int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev,
-+				    struct v4l2_fh *fh,
-+				    struct v4l2_event_subscription *sub);
-+int omap3isp_stat_s_stream(struct v4l2_subdev *subdev, int enable);
-+
-+int omap3isp_stat_busy(struct ispstat *stat);
-+int omap3isp_stat_pcr_busy(struct ispstat *stat);
-+void omap3isp_stat_suspend(struct ispstat *stat);
-+void omap3isp_stat_resume(struct ispstat *stat);
-+int omap3isp_stat_enable(struct ispstat *stat, u8 enable);
-+void omap3isp_stat_sbl_overflow(struct ispstat *stat);
-+void omap3isp_stat_isr(struct ispstat *stat);
-+void omap3isp_stat_isr_frame_sync(struct ispstat *stat);
-+void omap3isp_stat_dma_isr(struct ispstat *stat);
-+int omap3isp_stat_register_entities(struct ispstat *stat,
-+				    struct v4l2_device *vdev);
-+void omap3isp_stat_unregister_entities(struct ispstat *stat);
-+
-+#endif /* OMAP3_ISP_STAT_H */
-diff --git a/drivers/media/video/isp/ispvideo.c b/drivers/media/video/isp/ispvideo.c
-new file mode 100644
-index 0000000..ef0adb0
---- /dev/null
-+++ b/drivers/media/video/isp/ispvideo.c
-@@ -0,0 +1,1264 @@
-+/*
-+ * ispvideo.c
-+ *
-+ * TI OMAP3 ISP - Generic video node
-+ *
-+ * Copyright (C) 2009-2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 <asm/cacheflush.h>
-+#include <linux/clk.h>
-+#include <linux/mm.h>
-+#include <linux/pagemap.h>
-+#include <linux/scatterlist.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <media/v4l2-dev.h>
-+#include <media/v4l2-ioctl.h>
-+#include <plat/iommu.h>
-+#include <plat/iovmm.h>
-+#include <plat/omap-pm.h>
-+
-+#include "ispvideo.h"
-+#include "isp.h"
-+
-+
-+/* -----------------------------------------------------------------------------
-+ * Helper functions
-+ */
-+
-+static struct isp_format_info formats[] = {
-+	{ V4L2_MBUS_FMT_Y8_1X8, V4L2_MBUS_FMT_Y8_1X8,
-+	  V4L2_MBUS_FMT_Y8_1X8, V4L2_PIX_FMT_GREY, 8, },
-+	{ V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8, V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8,
-+	  V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_PIX_FMT_SGRBG10DPCM8, 8, },
-+	{ V4L2_MBUS_FMT_SBGGR10_1X10, V4L2_MBUS_FMT_SBGGR10_1X10,
-+	  V4L2_MBUS_FMT_SBGGR10_1X10, V4L2_PIX_FMT_SBGGR10, 10, },
-+	{ V4L2_MBUS_FMT_SGBRG10_1X10, V4L2_MBUS_FMT_SGBRG10_1X10,
-+	  V4L2_MBUS_FMT_SGBRG10_1X10, V4L2_PIX_FMT_SGBRG10, 10, },
-+	{ V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_MBUS_FMT_SGRBG10_1X10,
-+	  V4L2_MBUS_FMT_SGRBG10_1X10, V4L2_PIX_FMT_SGRBG10, 10, },
-+	{ V4L2_MBUS_FMT_SRGGB10_1X10, V4L2_MBUS_FMT_SRGGB10_1X10,
-+	  V4L2_MBUS_FMT_SRGGB10_1X10, V4L2_PIX_FMT_SRGGB10, 10, },
-+	{ V4L2_MBUS_FMT_SBGGR12_1X12, V4L2_MBUS_FMT_SBGGR10_1X10,
-+	  V4L2_MBUS_FMT_SBGGR12_1X12, V4L2_PIX_FMT_SBGGR12, 12, },
-+	{ V4L2_MBUS_FMT_SGBRG12_1X12, V4L2_MBUS_FMT_SGBRG10_1X10,
-+	  V4L2_MBUS_FMT_SGBRG12_1X12, V4L2_PIX_FMT_SGBRG12, 12, },
-+	{ V4L2_MBUS_FMT_SGRBG12_1X12, V4L2_MBUS_FMT_SGRBG10_1X10,
-+	  V4L2_MBUS_FMT_SGRBG12_1X12, V4L2_PIX_FMT_SGRBG12, 12, },
-+	{ V4L2_MBUS_FMT_SRGGB12_1X12, V4L2_MBUS_FMT_SRGGB10_1X10,
-+	  V4L2_MBUS_FMT_SRGGB12_1X12, V4L2_PIX_FMT_SRGGB12, 12, },
-+	{ V4L2_MBUS_FMT_UYVY8_1X16, V4L2_MBUS_FMT_UYVY8_1X16,
-+	  V4L2_MBUS_FMT_UYVY8_1X16, V4L2_PIX_FMT_UYVY, 16, },
-+	{ V4L2_MBUS_FMT_YUYV8_1X16, V4L2_MBUS_FMT_YUYV8_1X16,
-+	  V4L2_MBUS_FMT_YUYV8_1X16, V4L2_PIX_FMT_YUYV, 16, },
-+};
-+
-+const struct isp_format_info *
-+omap3isp_video_format_info(enum v4l2_mbus_pixelcode code)
-+{
-+	unsigned int i;
-+
-+	for (i = 0; i < ARRAY_SIZE(formats); ++i) {
-+		if (formats[i].code == code)
-+			return &formats[i];
-+	}
-+
-+	return NULL;
-+}
-+
-+/*
-+ * isp_video_mbus_to_pix - Convert v4l2_mbus_framefmt to v4l2_pix_format
-+ * @video: ISP video instance
-+ * @mbus: v4l2_mbus_framefmt format (input)
-+ * @pix: v4l2_pix_format format (output)
-+ *
-+ * Fill the output pix structure with information from the input mbus format.
-+ * The bytesperline and sizeimage fields are computed from the requested bytes
-+ * per line value in the pix format and information from the video instance.
-+ *
-+ * Return the number of padding bytes at end of line.
-+ */
-+static unsigned int isp_video_mbus_to_pix(const struct isp_video *video,
-+					  const struct v4l2_mbus_framefmt *mbus,
-+					  struct v4l2_pix_format *pix)
-+{
-+	unsigned int bpl = pix->bytesperline;
-+	unsigned int min_bpl;
-+	unsigned int i;
-+
-+	memset(pix, 0, sizeof(*pix));
-+	pix->width = mbus->width;
-+	pix->height = mbus->height;
-+
-+	for (i = 0; i < ARRAY_SIZE(formats); ++i) {
-+		if (formats[i].code == mbus->code)
-+			break;
-+	}
-+
-+	if (WARN_ON(i == ARRAY_SIZE(formats)))
-+		return 0;
-+
-+	min_bpl = pix->width * ALIGN(formats[i].bpp, 8) / 8;
-+
-+	/* Clamp the requested bytes per line value. If the maximum bytes per
-+	 * line value is zero, the module doesn't support user configurable line
-+	 * sizes. Override the requested value with the minimum in that case.
-+	 */
-+	if (video->bpl_max)
-+		bpl = clamp(bpl, min_bpl, video->bpl_max);
-+	else
-+		bpl = min_bpl;
-+
-+	if (!video->bpl_zero_padding || bpl != min_bpl)
-+		bpl = ALIGN(bpl, video->bpl_alignment);
-+
-+	pix->pixelformat = formats[i].pixelformat;
-+	pix->bytesperline = bpl;
-+	pix->sizeimage = pix->bytesperline * pix->height;
-+	pix->colorspace = mbus->colorspace;
-+	pix->field = mbus->field;
-+
-+	return bpl - min_bpl;
-+}
-+
-+static void isp_video_pix_to_mbus(const struct v4l2_pix_format *pix,
-+				  struct v4l2_mbus_framefmt *mbus)
-+{
-+	unsigned int i;
-+
-+	memset(mbus, 0, sizeof(*mbus));
-+	mbus->width = pix->width;
-+	mbus->height = pix->height;
-+
-+	for (i = 0; i < ARRAY_SIZE(formats); ++i) {
-+		if (formats[i].pixelformat == pix->pixelformat)
-+			break;
-+	}
-+
-+	if (WARN_ON(i == ARRAY_SIZE(formats)))
-+		return;
-+
-+	mbus->code = formats[i].code;
-+	mbus->colorspace = pix->colorspace;
-+	mbus->field = pix->field;
-+}
-+
-+static struct v4l2_subdev *
-+isp_video_remote_subdev(struct isp_video *video, u32 *pad)
-+{
-+	struct media_pad *remote;
-+
-+	remote = media_entity_remote_source(&video->pad);
-+
-+	if (remote == NULL ||
-+	    media_entity_type(remote->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
-+		return NULL;
-+
-+	if (pad)
-+		*pad = remote->index;
-+
-+	return media_entity_to_v4l2_subdev(remote->entity);
-+}
-+
-+/* Return a pointer to the ISP video instance at the far end of the pipeline. */
-+static struct isp_video *
-+isp_video_far_end(struct isp_video *video)
-+{
-+	struct media_entity_graph graph;
-+	struct media_entity *entity = &video->video.entity;
-+	struct media_device *mdev = entity->parent;
-+	struct isp_video *far_end = NULL;
-+
-+	mutex_lock(&mdev->graph_mutex);
-+	media_entity_graph_walk_start(&graph, entity);
-+
-+	while ((entity = media_entity_graph_walk_next(&graph))) {
-+		if (entity == &video->video.entity)
-+			continue;
-+
-+		if (media_entity_type(entity) != MEDIA_ENT_T_DEVNODE)
-+			continue;
-+
-+		far_end = to_isp_video(media_entity_to_video_device(entity));
-+		if (far_end->type != video->type)
-+			break;
-+
-+		far_end = NULL;
-+	}
-+
-+	mutex_unlock(&mdev->graph_mutex);
-+	return far_end;
-+}
-+
-+/*
-+ * Validate a pipeline by checking both ends of all links for format
-+ * discrepancies.
-+ *
-+ * Compute the minimum time per frame value as the maximum of time per frame
-+ * limits reported by every block in the pipeline.
-+ *
-+ * Return 0 if all formats match, or -EPIPE if at least one link is found with
-+ * different formats on its two ends.
-+ */
-+static int isp_video_validate_pipeline(struct isp_pipeline *pipe)
-+{
-+	struct isp_device *isp = pipe->output->isp;
-+	struct v4l2_subdev_format fmt_source;
-+	struct v4l2_subdev_format fmt_sink;
-+	struct media_pad *pad;
-+	struct v4l2_subdev *subdev;
-+	int ret;
-+
-+	pipe->max_rate = pipe->l3_ick;
-+
-+	subdev = isp_video_remote_subdev(pipe->output, NULL);
-+	if (subdev == NULL)
-+		return -EPIPE;
-+
-+	while (1) {
-+		/* Retrieve the sink format */
-+		pad = &subdev->entity.pads[0];
-+		if (!(pad->flags & MEDIA_PAD_FL_INPUT))
-+			break;
-+
-+		fmt_sink.pad = pad->index;
-+		fmt_sink.which = V4L2_SUBDEV_FORMAT_ACTIVE;
-+		ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt_sink);
-+		if (ret < 0 && ret != -ENOIOCTLCMD)
-+			return -EPIPE;
-+
-+		/* Update the maximum frame rate */
-+		if (subdev == &isp->isp_res.subdev)
-+			omap3isp_resizer_max_rate(&isp->isp_res,
-+						  &pipe->max_rate);
-+
-+		/* Check ccdc maximum data rate when data comes from sensor
-+		 * TODO: Include ccdc rate in pipe->max_rate and compare the
-+		 *       total pipe rate with the input data rate from sensor.
-+		 */
-+		if (subdev == &isp->isp_ccdc.subdev && pipe->input == NULL) {
-+			unsigned int rate = UINT_MAX;
-+
-+			omap3isp_ccdc_max_rate(&isp->isp_ccdc, &rate);
-+			if (isp->isp_ccdc.vpcfg.pixelclk > rate)
-+				return -ENOSPC;
-+		}
-+
-+		/* Retrieve the source format */
-+		pad = media_entity_remote_source(pad);
-+		if (pad == NULL ||
-+		    media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
-+			break;
-+
-+		subdev = media_entity_to_v4l2_subdev(pad->entity);
-+
-+		fmt_source.pad = pad->index;
-+		fmt_source.which = V4L2_SUBDEV_FORMAT_ACTIVE;
-+		ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt_source);
-+		if (ret < 0 && ret != -ENOIOCTLCMD)
-+			return -EPIPE;
-+
-+		/* Check if the two ends match */
-+		if (fmt_source.format.code != fmt_sink.format.code ||
-+		    fmt_source.format.width != fmt_sink.format.width ||
-+		    fmt_source.format.height != fmt_sink.format.height)
-+			return -EPIPE;
-+	}
-+
-+	return 0;
-+}
-+
-+static int
-+__isp_video_get_format(struct isp_video *video, struct v4l2_format *format)
-+{
-+	struct v4l2_subdev_format fmt;
-+	struct v4l2_subdev *subdev;
-+	u32 pad;
-+	int ret;
-+
-+	subdev = isp_video_remote_subdev(video, &pad);
-+	if (subdev == NULL)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->mutex);
-+
-+	fmt.pad = pad;
-+	fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
-+	ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt);
-+	if (ret == -ENOIOCTLCMD)
-+		ret = -EINVAL;
-+
-+	mutex_unlock(&video->mutex);
-+
-+	if (ret)
-+		return ret;
-+
-+	format->type = video->type;
-+	return isp_video_mbus_to_pix(video, &fmt.format, &format->fmt.pix);
-+}
-+
-+static int
-+isp_video_check_format(struct isp_video *video, struct isp_video_fh *vfh)
-+{
-+	struct v4l2_format format;
-+	int ret;
-+
-+	memcpy(&format, &vfh->format, sizeof(format));
-+	ret = __isp_video_get_format(video, &format);
-+	if (ret < 0)
-+		return ret;
-+
-+	if (vfh->format.fmt.pix.pixelformat != format.fmt.pix.pixelformat ||
-+	    vfh->format.fmt.pix.height != format.fmt.pix.height ||
-+	    vfh->format.fmt.pix.width != format.fmt.pix.width ||
-+	    vfh->format.fmt.pix.bytesperline != format.fmt.pix.bytesperline ||
-+	    vfh->format.fmt.pix.sizeimage != format.fmt.pix.sizeimage)
-+		return -EINVAL;
-+
-+	return ret;
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * IOMMU management
-+ */
-+
-+#define IOMMU_FLAG	(IOVMF_ENDIAN_LITTLE | IOVMF_ELSZ_8)
-+
-+/*
-+ * ispmmu_vmap - Wrapper for Virtual memory mapping of a scatter gather list
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @sglist: Pointer to source Scatter gather list to allocate.
-+ * @sglen: Number of elements of the scatter-gatter list.
-+ *
-+ * Returns a resulting mapped device address by the ISP MMU, or -ENOMEM if
-+ * we ran out of memory.
-+ */
-+static dma_addr_t
-+ispmmu_vmap(struct isp_device *isp, const struct scatterlist *sglist, int sglen)
-+{
-+	struct sg_table *sgt;
-+	u32 da;
-+
-+	sgt = kmalloc(sizeof(*sgt), GFP_KERNEL);
-+	if (sgt == NULL)
-+		return -ENOMEM;
-+
-+	sgt->sgl = (struct scatterlist *)sglist;
-+	sgt->nents = sglen;
-+	sgt->orig_nents = sglen;
-+
-+	da = iommu_vmap(isp->iommu, 0, sgt, IOMMU_FLAG);
-+	if (IS_ERR_VALUE(da))
-+		kfree(sgt);
-+
-+	return da;
-+}
-+
-+/*
-+ * ispmmu_vunmap - Unmap a device address from the ISP MMU
-+ * @dev: Device pointer specific to the OMAP3 ISP.
-+ * @da: Device address generated from a ispmmu_vmap call.
-+ */
-+static void ispmmu_vunmap(struct isp_device *isp, dma_addr_t da)
-+{
-+	struct sg_table *sgt;
-+
-+	sgt = iommu_vunmap(isp->iommu, (u32)da);
-+	kfree(sgt);
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Video queue operations
-+ */
-+
-+static void isp_video_queue_prepare(struct isp_video_queue *queue,
-+				    unsigned int *nbuffers, unsigned int *size)
-+{
-+	struct isp_video_fh *vfh =
-+		container_of(queue, struct isp_video_fh, queue);
-+	struct isp_video *video = vfh->video;
-+
-+	*size = vfh->format.fmt.pix.sizeimage;
-+	if (*size == 0)
-+		return;
-+
-+	*nbuffers = min(*nbuffers, video->capture_mem / PAGE_ALIGN(*size));
-+}
-+
-+static void isp_video_buffer_cleanup(struct isp_video_buffer *buf)
-+{
-+	struct isp_video_fh *vfh = isp_video_queue_to_isp_video_fh(buf->queue);
-+	struct isp_buffer *buffer = to_isp_buffer(buf);
-+	struct isp_video *video = vfh->video;
-+
-+	if (buffer->isp_addr) {
-+		ispmmu_vunmap(video->isp, buffer->isp_addr);
-+		buffer->isp_addr = 0;
-+	}
-+}
-+
-+static int isp_video_buffer_prepare(struct isp_video_buffer *buf)
-+{
-+	struct isp_video_fh *vfh = isp_video_queue_to_isp_video_fh(buf->queue);
-+	struct isp_buffer *buffer = to_isp_buffer(buf);
-+	struct isp_video *video = vfh->video;
-+	unsigned long addr;
-+
-+	addr = ispmmu_vmap(video->isp, buf->sglist, buf->sglen);
-+	if (IS_ERR_VALUE(addr))
-+		return -EIO;
-+
-+	if (!IS_ALIGNED(addr, 32)) {
-+		dev_dbg(video->isp->dev, "Buffer address must be "
-+			"aligned to 32 bytes boundary.\n");
-+		ispmmu_vunmap(video->isp, buffer->isp_addr);
-+		return -EINVAL;
-+	}
-+
-+	buf->vbuf.bytesused = vfh->format.fmt.pix.sizeimage;
-+	buffer->isp_addr = addr;
-+	return 0;
-+}
-+
-+/*
-+ * isp_video_buffer_queue - Add buffer to streaming queue
-+ * @buf: Video buffer
-+ *
-+ * In memory-to-memory mode, start streaming on the pipeline if buffers are
-+ * queued on both the input and the output, if the pipeline isn't already busy.
-+ * If the pipeline is busy, it will be restarted in the output module interrupt
-+ * handler.
-+ */
-+static void isp_video_buffer_queue(struct isp_video_buffer *buf)
-+{
-+	struct isp_video_fh *vfh = isp_video_queue_to_isp_video_fh(buf->queue);
-+	struct isp_buffer *buffer = to_isp_buffer(buf);
-+	struct isp_video *video = vfh->video;
-+	struct isp_pipeline *pipe = to_isp_pipeline(&video->video.entity);
-+	enum isp_pipeline_state state;
-+	unsigned long flags;
-+	unsigned int empty;
-+	unsigned int start;
-+
-+	empty = list_empty(&video->dmaqueue);
-+	list_add_tail(&buffer->buffer.irqlist, &video->dmaqueue);
-+
-+	if (empty) {
-+		if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+			state = ISP_PIPELINE_QUEUE_OUTPUT;
-+		else
-+			state = ISP_PIPELINE_QUEUE_INPUT;
-+
-+		spin_lock_irqsave(&pipe->lock, flags);
-+		pipe->state |= state;
-+		video->ops->queue(video, buffer);
-+		video->dmaqueue_flags |= ISP_VIDEO_DMAQUEUE_QUEUED;
-+
-+		start = isp_pipeline_ready(pipe);
-+		if (start)
-+			pipe->state |= ISP_PIPELINE_STREAM;
-+		spin_unlock_irqrestore(&pipe->lock, flags);
-+
-+		if (start)
-+			omap3isp_pipeline_set_stream(pipe,
-+						ISP_PIPELINE_STREAM_SINGLESHOT);
-+	}
-+}
-+
-+static const struct isp_video_queue_operations isp_video_queue_ops = {
-+	.queue_prepare = &isp_video_queue_prepare,
-+	.buffer_prepare = &isp_video_buffer_prepare,
-+	.buffer_queue = &isp_video_buffer_queue,
-+	.buffer_cleanup = &isp_video_buffer_cleanup,
-+};
-+
-+/*
-+ * omap3isp_video_buffer_next - Complete the current buffer and return the next
-+ * @video: ISP video object
-+ * @error: Whether an error occured during capture
-+ *
-+ * Remove the current video buffer from the DMA queue and fill its timestamp,
-+ * field count and state fields before waking up its completion handler.
-+ *
-+ * The buffer state is set to VIDEOBUF_DONE if no error occured (@error is 0)
-+ * or VIDEOBUF_ERROR otherwise (@error is non-zero).
-+ *
-+ * The DMA queue is expected to contain at least one buffer.
-+ *
-+ * Return a pointer to the next buffer in the DMA queue, or NULL if the queue is
-+ * empty.
-+ */
-+struct isp_buffer *omap3isp_video_buffer_next(struct isp_video *video,
-+					      unsigned int error)
-+{
-+	struct isp_pipeline *pipe = to_isp_pipeline(&video->video.entity);
-+	struct isp_video_queue *queue = video->queue;
-+	enum isp_pipeline_state state;
-+	struct isp_video_buffer *buf;
-+	unsigned long flags;
-+	struct timespec ts;
-+
-+	spin_lock_irqsave(&queue->irqlock, flags);
-+	if (WARN_ON(list_empty(&video->dmaqueue))) {
-+		spin_unlock_irqrestore(&queue->irqlock, flags);
-+		return NULL;
-+	}
-+
-+	buf = list_first_entry(&video->dmaqueue, struct isp_video_buffer,
-+			       irqlist);
-+	list_del(&buf->irqlist);
-+	spin_unlock_irqrestore(&queue->irqlock, flags);
-+
-+	ktime_get_ts(&ts);
-+	buf->vbuf.timestamp.tv_sec = ts.tv_sec;
-+	buf->vbuf.timestamp.tv_usec = ts.tv_nsec / NSEC_PER_USEC;
-+
-+	/* Do frame number propagation only if this is the output video node.
-+	 * Frame number either comes from the CSI receivers or it gets
-+	 * incremented here if H3A is not active.
-+	 * Note: There is no guarantee that the output buffer will finish
-+	 * first, so the input number might lag behind by 1 in some cases.
-+	 */
-+	if (video == pipe->output && !pipe->do_propagation)
-+		buf->vbuf.sequence = atomic_inc_return(&pipe->frame_number);
-+	else
-+		buf->vbuf.sequence = atomic_read(&pipe->frame_number);
-+
-+	buf->state = error ? ISP_BUF_STATE_ERROR : ISP_BUF_STATE_DONE;
-+
-+	wake_up(&buf->wait);
-+
-+	if (list_empty(&video->dmaqueue)) {
-+		if (queue->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+			state = ISP_PIPELINE_QUEUE_OUTPUT
-+			      | ISP_PIPELINE_STREAM;
-+		else
-+			state = ISP_PIPELINE_QUEUE_INPUT
-+			      | ISP_PIPELINE_STREAM;
-+
-+		spin_lock_irqsave(&pipe->lock, flags);
-+		pipe->state &= ~state;
-+		if (video->pipe.stream_state == ISP_PIPELINE_STREAM_CONTINUOUS)
-+			video->dmaqueue_flags |= ISP_VIDEO_DMAQUEUE_UNDERRUN;
-+		spin_unlock_irqrestore(&pipe->lock, flags);
-+		return NULL;
-+	}
-+
-+	if (queue->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && pipe->input != NULL) {
-+		spin_lock_irqsave(&pipe->lock, flags);
-+		pipe->state &= ~ISP_PIPELINE_STREAM;
-+		spin_unlock_irqrestore(&pipe->lock, flags);
-+	}
-+
-+	buf = list_first_entry(&video->dmaqueue, struct isp_video_buffer,
-+			       irqlist);
-+	buf->state = ISP_BUF_STATE_ACTIVE;
-+	return to_isp_buffer(buf);
-+}
-+
-+/*
-+ * omap3isp_video_resume - Perform resume operation on the buffers
-+ * @video: ISP video object
-+ * @continuous: Pipeline is in single shot mode if 0 or continous mode otherwise
-+ *
-+ * This function is intended to be used on suspend/resume scenario. It
-+ * requests video queue layer to discard buffers marked as DONE if it's in
-+ * continuous mode and requests ISP modules to queue again the ACTIVE buffer
-+ * if there's any.
-+ */
-+void omap3isp_video_resume(struct isp_video *video, int continuous)
-+{
-+	struct isp_buffer *buf = NULL;
-+
-+	if (continuous && video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+		omap3isp_video_queue_discard_done(video->queue);
-+
-+	if (!list_empty(&video->dmaqueue)) {
-+		buf = list_first_entry(&video->dmaqueue,
-+				       struct isp_buffer, buffer.irqlist);
-+		video->ops->queue(video, buf);
-+		video->dmaqueue_flags |= ISP_VIDEO_DMAQUEUE_QUEUED;
-+	} else {
-+		if (continuous)
-+			video->dmaqueue_flags |= ISP_VIDEO_DMAQUEUE_UNDERRUN;
-+	}
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 ioctls
-+ */
-+
-+static int
-+isp_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+
-+	strlcpy(cap->driver, ISP_VIDEO_DRIVER_NAME, sizeof(cap->driver));
-+	strlcpy(cap->card, video->video.name, sizeof(cap->card));
-+	strlcpy(cap->bus_info, "media", sizeof(cap->bus_info));
-+	cap->version = ISP_VIDEO_DRIVER_VERSION;
-+
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+		cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
-+	else
-+		cap->capabilities = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_get_format(struct file *file, void *fh, struct v4l2_format *format)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+	struct isp_video *video = video_drvdata(file);
-+
-+	if (format->type != video->type)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->mutex);
-+	*format = vfh->format;
-+	mutex_unlock(&video->mutex);
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_set_format(struct file *file, void *fh, struct v4l2_format *format)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+	struct isp_video *video = video_drvdata(file);
-+	struct v4l2_mbus_framefmt fmt;
-+
-+	if (format->type != video->type)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->mutex);
-+
-+	/* Fill the bytesperline and sizeimage fields by converting to media bus
-+	 * format and back to pixel format.
-+	 */
-+	isp_video_pix_to_mbus(&format->fmt.pix, &fmt);
-+	isp_video_mbus_to_pix(video, &fmt, &format->fmt.pix);
-+
-+	vfh->format = *format;
-+
-+	mutex_unlock(&video->mutex);
-+	return 0;
-+}
-+
-+static int
-+isp_video_try_format(struct file *file, void *fh, struct v4l2_format *format)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+	struct v4l2_subdev_format fmt;
-+	struct v4l2_subdev *subdev;
-+	u32 pad;
-+	int ret;
-+
-+	if (format->type != video->type)
-+		return -EINVAL;
-+
-+	subdev = isp_video_remote_subdev(video, &pad);
-+	if (subdev == NULL)
-+		return -EINVAL;
-+
-+	isp_video_pix_to_mbus(&format->fmt.pix, &fmt.format);
-+
-+	fmt.pad = pad;
-+	fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE;
-+	ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt);
-+	if (ret)
-+		return ret == -ENOIOCTLCMD ? -EINVAL : ret;
-+
-+	isp_video_mbus_to_pix(video, &fmt.format, &format->fmt.pix);
-+	return 0;
-+}
-+
-+static int
-+isp_video_cropcap(struct file *file, void *fh, struct v4l2_cropcap *cropcap)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+	struct v4l2_subdev *subdev;
-+	int ret;
-+
-+	subdev = isp_video_remote_subdev(video, NULL);
-+	if (subdev == NULL)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->mutex);
-+	ret = v4l2_subdev_call(subdev, video, cropcap, cropcap);
-+	mutex_unlock(&video->mutex);
-+
-+	return ret == -ENOIOCTLCMD ? -EINVAL : ret;
-+}
-+
-+static int
-+isp_video_get_crop(struct file *file, void *fh, struct v4l2_crop *crop)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+	struct v4l2_subdev_format format;
-+	struct v4l2_subdev *subdev;
-+	u32 pad;
-+	int ret;
-+
-+	subdev = isp_video_remote_subdev(video, &pad);
-+	if (subdev == NULL)
-+		return -EINVAL;
-+
-+	/* Try the get crop operation first and fallback to get format if not
-+	 * implemented.
-+	 */
-+	ret = v4l2_subdev_call(subdev, video, g_crop, crop);
-+	if (ret != -ENOIOCTLCMD)
-+		return ret;
-+
-+	format.pad = pad;
-+	format.which = V4L2_SUBDEV_FORMAT_ACTIVE;
-+	ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &format);
-+	if (ret < 0)
-+		return ret == -ENOIOCTLCMD ? -EINVAL : ret;
-+
-+	crop->c.left = 0;
-+	crop->c.top = 0;
-+	crop->c.width = format.format.width;
-+	crop->c.height = format.format.height;
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_set_crop(struct file *file, void *fh, struct v4l2_crop *crop)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+	struct v4l2_subdev *subdev;
-+	int ret;
-+
-+	subdev = isp_video_remote_subdev(video, NULL);
-+	if (subdev == NULL)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->mutex);
-+	ret = v4l2_subdev_call(subdev, video, s_crop, crop);
-+	mutex_unlock(&video->mutex);
-+
-+	return ret == -ENOIOCTLCMD ? -EINVAL : ret;
-+}
-+
-+static int
-+isp_video_get_param(struct file *file, void *fh, struct v4l2_streamparm *a)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+	struct isp_video *video = video_drvdata(file);
-+
-+	if (video->type != V4L2_BUF_TYPE_VIDEO_OUTPUT ||
-+	    video->type != a->type)
-+		return -EINVAL;
-+
-+	memset(a, 0, sizeof(*a));
-+	a->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-+	a->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
-+	a->parm.output.timeperframe = vfh->timeperframe;
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_set_param(struct file *file, void *fh, struct v4l2_streamparm *a)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+	struct isp_video *video = video_drvdata(file);
-+
-+	if (video->type != V4L2_BUF_TYPE_VIDEO_OUTPUT ||
-+	    video->type != a->type)
-+		return -EINVAL;
-+
-+	if (a->parm.output.timeperframe.denominator == 0)
-+		a->parm.output.timeperframe.denominator = 1;
-+
-+	vfh->timeperframe = a->parm.output.timeperframe;
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_reqbufs(struct file *file, void *fh, struct v4l2_requestbuffers *rb)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+
-+	return omap3isp_video_queue_reqbufs(&vfh->queue, rb);
-+}
-+
-+static int
-+isp_video_querybuf(struct file *file, void *fh, struct v4l2_buffer *b)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+
-+	return omap3isp_video_queue_querybuf(&vfh->queue, b);
-+}
-+
-+static int
-+isp_video_qbuf(struct file *file, void *fh, struct v4l2_buffer *b)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+
-+	return omap3isp_video_queue_qbuf(&vfh->queue, b);
-+}
-+
-+static int
-+isp_video_dqbuf(struct file *file, void *fh, struct v4l2_buffer *b)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+
-+	return omap3isp_video_queue_dqbuf(&vfh->queue, b,
-+					  file->f_flags & O_NONBLOCK);
-+}
-+
-+/*
-+ * Stream management
-+ *
-+ * Every ISP pipeline has a single input and a single output. The input can be
-+ * either a sensor or a video node. The output is always a video node.
-+ *
-+ * As every pipeline has an output video node, the ISP video objects at the
-+ * pipeline output stores the pipeline state. It tracks the streaming state of
-+ * both the input and output, as well as the availability of buffers.
-+ *
-+ * In sensor-to-memory mode, frames are always available at the pipeline input.
-+ * Starting the sensor usually requires I2C transfers and must be done in
-+ * interruptible context. The pipeline is started and stopped synchronously
-+ * to the stream on/off commands. All modules in the pipeline will get their
-+ * subdev set stream handler called. The module at the end of the pipeline must
-+ * delay starting the hardware until buffers are available at its output.
-+ *
-+ * In memory-to-memory mode, starting/stopping the stream requires
-+ * synchronization between the input and output. ISP modules can't be stopped
-+ * in the middle of a frame, and at least some of the modules seem to become
-+ * busy as soon as they're started, even if they don't receive a frame start
-+ * event. For that reason frames need to be processed in single-shot mode. The
-+ * driver needs to wait until a frame is completely processed and written to
-+ * memory before restarting the pipeline for the next frame. Pipelined
-+ * processing might be possible but requires more testing.
-+ *
-+ * Stream start must be delayed until buffers are available at both the input
-+ * and output. The pipeline must be started in the videobuf queue callback with
-+ * the buffers queue spinlock held. The modules subdev set stream operation must
-+ * not sleep.
-+ */
-+static int
-+isp_video_streamon(struct file *file, void *fh, enum v4l2_buf_type type)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+	struct isp_video *video = video_drvdata(file);
-+	enum isp_pipeline_state state;
-+	struct isp_pipeline *pipe;
-+	struct isp_video *far_end;
-+	unsigned long flags;
-+	int ret;
-+
-+	if (type != video->type)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->stream_lock);
-+
-+	if (video->streaming) {
-+		mutex_unlock(&video->stream_lock);
-+		return -EBUSY;
-+	}
-+
-+	/* Start streaming on the pipeline. No link touching an entity in the
-+	 * pipeline can be activated or deactivated once streaming is started.
-+	 */
-+	pipe = video->video.entity.pipe
-+	     ? to_isp_pipeline(&video->video.entity) : &video->pipe;
-+	media_entity_pipeline_start(&video->video.entity, &pipe->pipe);
-+
-+	/* Verify that the currently configured format matches the output of
-+	 * the connected subdev.
-+	 */
-+	ret = isp_video_check_format(video, vfh);
-+	if (ret < 0)
-+		goto error;
-+
-+	video->bpl_padding = ret;
-+	video->bpl_value = vfh->format.fmt.pix.bytesperline;
-+
-+	/* Find the ISP video node connected at the far end of the pipeline and
-+	 * update the pipeline.
-+	 */
-+	far_end = isp_video_far_end(video);
-+
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
-+		state = ISP_PIPELINE_STREAM_OUTPUT | ISP_PIPELINE_IDLE_OUTPUT;
-+		pipe->input = far_end;
-+		pipe->output = video;
-+	} else {
-+		if (far_end == NULL) {
-+			ret = -EPIPE;
-+			goto error;
-+		}
-+
-+		state = ISP_PIPELINE_STREAM_INPUT | ISP_PIPELINE_IDLE_INPUT;
-+		pipe->input = video;
-+		pipe->output = far_end;
-+	}
-+
-+	/* Make sure the interconnect clock runs fast enough.
-+	 *
-+	 * Formula from: resource34xx.c set_opp()
-+	 * If MPU freq is above 500MHz, make sure the interconnect
-+	 * is at 100Mhz or above.
-+	 * throughput in KiB/s for 100 Mhz = 100 * 1000 * 4.
-+	 *
-+	 * We want to be fast enough then set OCP clock to be max as
-+	 * possible, in that case 185Mhz then:
-+	 * throughput in KiB/s for 185Mhz = 185 * 1000 * 4 = 740000 KiB/s
-+	 */
-+	omap_pm_set_min_bus_tput(video->isp->dev, OCP_INITIATOR_AGENT, 740000);
-+	pipe->l3_ick = clk_get_rate(video->isp->clock[ISP_CLK_L3_ICK]);
-+
-+	/* Validate the pipeline and update its state. */
-+	ret = isp_video_validate_pipeline(pipe);
-+	if (ret < 0)
-+		goto error;
-+
-+	spin_lock_irqsave(&pipe->lock, flags);
-+	pipe->state &= ~ISP_PIPELINE_STREAM;
-+	pipe->state |= state;
-+	spin_unlock_irqrestore(&pipe->lock, flags);
-+
-+	/* Set the maximum time per frame as the value requested by userspace.
-+	 * This is a soft limit that can be overridden if the hardware doesn't
-+	 * support the request limit.
-+	 */
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
-+		pipe->max_timeperframe = vfh->timeperframe;
-+
-+	video->queue = &vfh->queue;
-+	INIT_LIST_HEAD(&video->dmaqueue);
-+	atomic_set(&pipe->frame_number, -1);
-+
-+	ret = omap3isp_video_queue_streamon(&vfh->queue);
-+	if (ret < 0)
-+		goto error;
-+
-+	/* In sensor-to-memory mode, the stream can be started synchronously
-+	 * to the stream on command. In memory-to-memory mode, it will be
-+	 * started when buffers are queued on both the input and output.
-+	 */
-+	if (pipe->input == NULL) {
-+		ret = omap3isp_pipeline_set_stream(pipe,
-+					      ISP_PIPELINE_STREAM_CONTINUOUS);
-+		if (ret < 0)
-+			goto error;
-+		spin_lock_irqsave(&video->queue->irqlock, flags);
-+		if (list_empty(&video->dmaqueue))
-+			video->dmaqueue_flags |= ISP_VIDEO_DMAQUEUE_UNDERRUN;
-+		spin_unlock_irqrestore(&video->queue->irqlock, flags);
-+	}
-+
-+error:
-+	if (ret < 0) {
-+		omap3isp_video_queue_streamoff(&vfh->queue);
-+		omap_pm_set_min_bus_tput(video->isp->dev,
-+					 OCP_INITIATOR_AGENT, 0);
-+		media_entity_pipeline_stop(&video->video.entity);
-+		video->queue = NULL;
-+	}
-+
-+	if (!ret)
-+		video->streaming = 1;
-+
-+	mutex_unlock(&video->stream_lock);
-+	return ret;
-+}
-+
-+static int
-+isp_video_streamoff(struct file *file, void *fh, enum v4l2_buf_type type)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(fh);
-+	struct isp_video *video = video_drvdata(file);
-+	struct isp_pipeline *pipe = to_isp_pipeline(&video->video.entity);
-+	enum isp_pipeline_state state;
-+	unsigned int streaming;
-+	unsigned long flags;
-+
-+	if (type != video->type)
-+		return -EINVAL;
-+
-+	mutex_lock(&video->stream_lock);
-+
-+	/* Make sure we're not streaming yet. */
-+	mutex_lock(&vfh->queue.lock);
-+	streaming = vfh->queue.streaming;
-+	mutex_unlock(&vfh->queue.lock);
-+
-+	if (!streaming)
-+		goto done;
-+
-+	/* Update the pipeline state. */
-+	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
-+		state = ISP_PIPELINE_STREAM_OUTPUT
-+		      | ISP_PIPELINE_QUEUE_OUTPUT;
-+	else
-+		state = ISP_PIPELINE_STREAM_INPUT
-+		      | ISP_PIPELINE_QUEUE_INPUT;
-+
-+	spin_lock_irqsave(&pipe->lock, flags);
-+	pipe->state &= ~state;
-+	spin_unlock_irqrestore(&pipe->lock, flags);
-+
-+	/* Stop the stream. */
-+	omap3isp_pipeline_set_stream(pipe, ISP_PIPELINE_STREAM_STOPPED);
-+	omap3isp_video_queue_streamoff(&vfh->queue);
-+	video->queue = NULL;
-+	video->streaming = 0;
-+
-+	omap_pm_set_min_bus_tput(video->isp->dev, OCP_INITIATOR_AGENT, 0);
-+	media_entity_pipeline_stop(&video->video.entity);
-+
-+done:
-+	mutex_unlock(&video->stream_lock);
-+	return 0;
-+}
-+
-+static int
-+isp_video_enum_input(struct file *file, void *fh, struct v4l2_input *input)
-+{
-+	if (input->index > 0)
-+		return -EINVAL;
-+
-+	strlcpy(input->name, "camera", sizeof(input->name));
-+	input->type = V4L2_INPUT_TYPE_CAMERA;
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_g_input(struct file *file, void *fh, unsigned int *input)
-+{
-+	*input = 0;
-+
-+	return 0;
-+}
-+
-+static int
-+isp_video_s_input(struct file *file, void *fh, unsigned int input)
-+{
-+	return input == 0 ? 0 : -EINVAL;
-+}
-+
-+static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
-+	.vidioc_querycap		= isp_video_querycap,
-+	.vidioc_g_fmt_vid_cap		= isp_video_get_format,
-+	.vidioc_s_fmt_vid_cap		= isp_video_set_format,
-+	.vidioc_try_fmt_vid_cap		= isp_video_try_format,
-+	.vidioc_g_fmt_vid_out		= isp_video_get_format,
-+	.vidioc_s_fmt_vid_out		= isp_video_set_format,
-+	.vidioc_try_fmt_vid_out		= isp_video_try_format,
-+	.vidioc_cropcap			= isp_video_cropcap,
-+	.vidioc_g_crop			= isp_video_get_crop,
-+	.vidioc_s_crop			= isp_video_set_crop,
-+	.vidioc_g_parm			= isp_video_get_param,
-+	.vidioc_s_parm			= isp_video_set_param,
-+	.vidioc_reqbufs			= isp_video_reqbufs,
-+	.vidioc_querybuf		= isp_video_querybuf,
-+	.vidioc_qbuf			= isp_video_qbuf,
-+	.vidioc_dqbuf			= isp_video_dqbuf,
-+	.vidioc_streamon		= isp_video_streamon,
-+	.vidioc_streamoff		= isp_video_streamoff,
-+	.vidioc_enum_input		= isp_video_enum_input,
-+	.vidioc_g_input			= isp_video_g_input,
-+	.vidioc_s_input			= isp_video_s_input,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * V4L2 file operations
-+ */
-+
-+static int isp_video_open(struct file *file)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+	struct isp_video_fh *handle;
-+	int ret = 0;
-+
-+	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
-+	if (handle == NULL)
-+		return -ENOMEM;
-+
-+	v4l2_fh_init(&handle->vfh, &video->video);
-+	v4l2_fh_add(&handle->vfh);
-+
-+	/* If this is the first user, initialise the pipeline. */
-+	if (omap3isp_get(video->isp) == NULL) {
-+		ret = -EBUSY;
-+		goto done;
-+	}
-+
-+	ret = omap3isp_pipeline_pm_use(&video->video.entity, 1);
-+	if (ret < 0) {
-+		omap3isp_put(video->isp);
-+		goto done;
-+	}
-+
-+	omap3isp_video_queue_init(&handle->queue, video->type,
-+				  &isp_video_queue_ops, video->isp->dev,
-+				  sizeof(struct isp_buffer));
-+
-+	memset(&handle->format, 0, sizeof(handle->format));
-+	handle->format.type = video->type;
-+	handle->timeperframe.denominator = 1;
-+
-+	handle->video = video;
-+	file->private_data = &handle->vfh;
-+
-+done:
-+	if (ret < 0) {
-+		v4l2_fh_del(&handle->vfh);
-+		kfree(handle);
-+	}
-+
-+	return ret;
-+}
-+
-+static int isp_video_release(struct file *file)
-+{
-+	struct isp_video *video = video_drvdata(file);
-+	struct v4l2_fh *vfh = file->private_data;
-+	struct isp_video_fh *handle = to_isp_video_fh(vfh);
-+
-+	/* Disable streaming and free the buffers queue resources. */
-+	isp_video_streamoff(file, vfh, video->type);
-+
-+	mutex_lock(&handle->queue.lock);
-+	omap3isp_video_queue_cleanup(&handle->queue);
-+	mutex_unlock(&handle->queue.lock);
-+
-+	omap3isp_pipeline_pm_use(&video->video.entity, 0);
-+
-+	/* Release the file handle. */
-+	v4l2_fh_del(vfh);
-+	kfree(handle);
-+	file->private_data = NULL;
-+
-+	omap3isp_put(video->isp);
-+
-+	return 0;
-+}
-+
-+static unsigned int isp_video_poll(struct file *file, poll_table *wait)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(file->private_data);
-+	struct isp_video_queue *queue = &vfh->queue;
-+
-+	return omap3isp_video_queue_poll(queue, file, wait);
-+}
-+
-+static int isp_video_mmap(struct file *file, struct vm_area_struct *vma)
-+{
-+	struct isp_video_fh *vfh = to_isp_video_fh(file->private_data);
-+
-+	return omap3isp_video_queue_mmap(&vfh->queue, vma);
-+}
-+
-+static struct v4l2_file_operations isp_video_fops = {
-+	.owner = THIS_MODULE,
-+	.unlocked_ioctl = video_ioctl2,
-+	.open = isp_video_open,
-+	.release = isp_video_release,
-+	.poll = isp_video_poll,
-+	.mmap = isp_video_mmap,
-+};
-+
-+/* -----------------------------------------------------------------------------
-+ * ISP video core
-+ */
-+
-+static const struct isp_video_operations isp_video_dummy_ops = {
-+};
-+
-+int omap3isp_video_init(struct isp_video *video, const char *name)
-+{
-+	const char *direction;
-+	int ret;
-+
-+	switch (video->type) {
-+	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
-+		direction = "output";
-+		video->pad.flags = MEDIA_PAD_FL_INPUT;
-+		break;
-+	case V4L2_BUF_TYPE_VIDEO_OUTPUT:
-+		direction = "input";
-+		video->pad.flags = MEDIA_PAD_FL_OUTPUT;
-+		break;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+	ret = media_entity_init(&video->video.entity, 1, &video->pad, 0);
-+	if (ret < 0)
-+		return ret;
-+
-+	mutex_init(&video->mutex);
-+	atomic_set(&video->active, 0);
-+
-+	spin_lock_init(&video->pipe.lock);
-+	mutex_init(&video->stream_lock);
-+
-+	/* Initialize the video device. */
-+	if (video->ops == NULL)
-+		video->ops = &isp_video_dummy_ops;
-+
-+	video->video.fops = &isp_video_fops;
-+	snprintf(video->video.name, sizeof(video->video.name),
-+		 "OMAP3 ISP %s %s", name, direction);
-+	video->video.vfl_type = VFL_TYPE_GRABBER;
-+	video->video.release = video_device_release_empty;
-+	video->video.ioctl_ops = &isp_video_ioctl_ops;
-+	video->pipe.stream_state = ISP_PIPELINE_STREAM_STOPPED;
-+
-+	video_set_drvdata(&video->video, video);
-+
-+	return 0;
-+}
-+
-+int omap3isp_video_register(struct isp_video *video, struct v4l2_device *vdev)
-+{
-+	int ret;
-+
-+	video->video.v4l2_dev = vdev;
-+
-+	ret = video_register_device(&video->video, VFL_TYPE_GRABBER, -1);
-+	if (ret < 0)
-+		printk(KERN_ERR "%s: could not register video device (%d)\n",
-+			__func__, ret);
-+
-+	return ret;
-+}
-+
-+void omap3isp_video_unregister(struct isp_video *video)
-+{
-+	if (video_is_registered(&video->video)) {
-+		media_entity_cleanup(&video->video.entity);
-+		video_unregister_device(&video->video);
-+	}
-+}
-diff --git a/drivers/media/video/isp/ispvideo.h b/drivers/media/video/isp/ispvideo.h
-new file mode 100644
-index 0000000..41c8fb9
---- /dev/null
-+++ b/drivers/media/video/isp/ispvideo.h
-@@ -0,0 +1,202 @@
-+/*
-+ * ispvideo.h
-+ *
-+ * TI OMAP3 ISP - Generic video node
-+ *
-+ * Copyright (C) 2009-2010 Nokia Corporation
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_VIDEO_H
-+#define OMAP3_ISP_VIDEO_H
-+
-+#include <linux/v4l2-mediabus.h>
-+#include <linux/version.h>
-+#include <media/media-entity.h>
-+#include <media/v4l2-dev.h>
-+#include <media/v4l2-fh.h>
-+
-+#include "ispqueue.h"
-+
-+#define ISP_VIDEO_DRIVER_NAME		"ispvideo"
-+#define ISP_VIDEO_DRIVER_VERSION	KERNEL_VERSION(0, 0, 1)
-+
-+struct isp_device;
-+struct isp_video;
-+struct v4l2_mbus_framefmt;
-+struct v4l2_pix_format;
-+
-+/*
-+ * struct isp_format_info - ISP media bus format information
-+ * @code: V4L2 media bus format code
-+ * @truncated: V4L2 media bus format code for the same format truncated to 10
-+ * 	bits. Identical to @code if the format is 10 bits wide or less.
-+ * @uncompressed: V4L2 media bus format code for the corresponding uncompressed
-+ * 	format. Identical to @code if the format is not DPCM compressed.
-+ * @pixelformat: V4L2 pixel format FCC identifier
-+ * @bpp: Bits per pixel
-+ */
-+struct isp_format_info {
-+	enum v4l2_mbus_pixelcode code;
-+	enum v4l2_mbus_pixelcode truncated;
-+	enum v4l2_mbus_pixelcode uncompressed;
-+	u32 pixelformat;
-+	unsigned int bpp;
-+};
-+
-+enum isp_pipeline_stream_state {
-+	ISP_PIPELINE_STREAM_STOPPED = 0,
-+	ISP_PIPELINE_STREAM_CONTINUOUS = 1,
-+	ISP_PIPELINE_STREAM_SINGLESHOT = 2,
-+};
-+
-+enum isp_pipeline_state {
-+	/* The stream has been started on the input video node. */
-+	ISP_PIPELINE_STREAM_INPUT = 1,
-+	/* The stream has been started on the output video node. */
-+	ISP_PIPELINE_STREAM_OUTPUT = 2,
-+	/* At least one buffer is queued on the input video node. */
-+	ISP_PIPELINE_QUEUE_INPUT = 4,
-+	/* At least one buffer is queued on the output video node. */
-+	ISP_PIPELINE_QUEUE_OUTPUT = 8,
-+	/* The input entity is idle, ready to be started. */
-+	ISP_PIPELINE_IDLE_INPUT = 16,
-+	/* The output entity is idle, ready to be started. */
-+	ISP_PIPELINE_IDLE_OUTPUT = 32,
-+	/* The pipeline is currently streaming. */
-+	ISP_PIPELINE_STREAM = 64,
-+};
-+
-+struct isp_pipeline {
-+	struct media_pipeline pipe;
-+	spinlock_t lock;
-+	unsigned int state;
-+	enum isp_pipeline_stream_state stream_state;
-+	struct isp_video *input;
-+	struct isp_video *output;
-+	unsigned long l3_ick;
-+	unsigned int max_rate;
-+	atomic_t frame_number;
-+	bool do_propagation; /* of frame number */
-+	struct v4l2_fract max_timeperframe;
-+};
-+
-+#define to_isp_pipeline(__e) \
-+	container_of((__e)->pipe, struct isp_pipeline, pipe)
-+
-+static inline int isp_pipeline_ready(struct isp_pipeline *pipe)
-+{
-+	return pipe->state == (ISP_PIPELINE_STREAM_INPUT |
-+			       ISP_PIPELINE_STREAM_OUTPUT |
-+			       ISP_PIPELINE_QUEUE_INPUT |
-+			       ISP_PIPELINE_QUEUE_OUTPUT |
-+			       ISP_PIPELINE_IDLE_INPUT |
-+			       ISP_PIPELINE_IDLE_OUTPUT);
-+}
-+
-+/*
-+ * struct isp_buffer - ISP buffer
-+ * @buffer: ISP video buffer
-+ * @isp_addr: MMU mapped address (a.k.a. device address) of the buffer.
-+ */
-+struct isp_buffer {
-+	struct isp_video_buffer buffer;
-+	dma_addr_t isp_addr;
-+};
-+
-+#define to_isp_buffer(buf)	container_of(buf, struct isp_buffer, buffer)
-+
-+enum isp_video_dmaqueue_flags {
-+	/* Set if DMA queue becomes empty when ISP_PIPELINE_STREAM_CONTINUOUS */
-+	ISP_VIDEO_DMAQUEUE_UNDERRUN = (1 << 0),
-+	/* Set when queuing buffer to an empty DMA queue */
-+	ISP_VIDEO_DMAQUEUE_QUEUED = (1 << 1),
-+};
-+
-+#define isp_video_dmaqueue_flags_clr(video)	\
-+			({ (video)->dmaqueue_flags = 0; })
-+
-+/*
-+ * struct isp_video_operations - ISP video operations
-+ * @queue:	Resume streaming when a buffer is queued. Called on VIDIOC_QBUF
-+ *		if there was no buffer previously queued.
-+ */
-+struct isp_video_operations {
-+	int(*queue)(struct isp_video *video, struct isp_buffer *buffer);
-+};
-+
-+struct isp_video {
-+	struct video_device video;
-+	enum v4l2_buf_type type;
-+	struct media_pad pad;
-+
-+	struct mutex mutex;
-+	atomic_t active;
-+
-+	struct isp_device *isp;
-+
-+	unsigned int capture_mem;
-+	unsigned int bpl_alignment;	/* alignment value */
-+	unsigned int bpl_zero_padding;	/* whether the alignment is optional */
-+	unsigned int bpl_max;		/* maximum bytes per line value */
-+	unsigned int bpl_value;		/* bytes per line value */
-+	unsigned int bpl_padding;	/* padding at end of line */
-+
-+	/* Entity video node streaming */
-+	unsigned int streaming:1;
-+
-+	/* Pipeline state */
-+	struct isp_pipeline pipe;
-+	struct mutex stream_lock;
-+
-+	/* Video buffers queue */
-+	struct isp_video_queue *queue;
-+	struct list_head dmaqueue;
-+	enum isp_video_dmaqueue_flags dmaqueue_flags;
-+
-+	const struct isp_video_operations *ops;
-+};
-+
-+#define to_isp_video(vdev)	container_of(vdev, struct isp_video, video)
-+
-+struct isp_video_fh {
-+	struct v4l2_fh vfh;
-+	struct isp_video *video;
-+	struct isp_video_queue queue;
-+	struct v4l2_format format;
-+	struct v4l2_fract timeperframe;
-+};
-+
-+#define to_isp_video_fh(fh)	container_of(fh, struct isp_video_fh, vfh)
-+#define isp_video_queue_to_isp_video_fh(q) \
-+				container_of(q, struct isp_video_fh, queue)
-+
-+int omap3isp_video_init(struct isp_video *video, const char *name);
-+int omap3isp_video_register(struct isp_video *video,
-+			    struct v4l2_device *vdev);
-+void omap3isp_video_unregister(struct isp_video *video);
-+struct isp_buffer *omap3isp_video_buffer_next(struct isp_video *video,
-+					      unsigned int error);
-+void omap3isp_video_resume(struct isp_video *video, int continuous);
-+struct media_pad *omap3isp_video_remote_pad(struct isp_video *video);
-+
-+const struct isp_format_info *
-+omap3isp_video_format_info(enum v4l2_mbus_pixelcode code);
-+
-+#endif /* OMAP3_ISP_VIDEO_H */
-diff --git a/drivers/media/video/isp/luma_enhance_table.h b/drivers/media/video/isp/luma_enhance_table.h
-new file mode 100644
-index 0000000..56d93c2
---- /dev/null
-+++ b/drivers/media/video/isp/luma_enhance_table.h
-@@ -0,0 +1,154 @@
-+/*
-+ * luma_enhance_table.h
-+ *
-+ * TI OMAP3 ISP - Luminance enhancement table
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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
-+ */
-+
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1047552,
-+1048575,
-+1047551,
-+1046527,
-+1045503,
-+1044479,
-+1043455,
-+1042431,
-+1041407,
-+1040383,
-+1039359,
-+1038335,
-+1037311,
-+1036287,
-+1035263,
-+1034239,
-+1033215,
-+1032191,
-+1031167,
-+1030143,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028096,
-+1028100,
-+1032196,
-+1036292,
-+1040388,
-+1044484,
-+0,
-+0,
-+0,
-+5,
-+5125,
-+10245,
-+15365,
-+20485,
-+25605,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+30720,
-+31743,
-+30719,
-+29695,
-+28671,
-+27647,
-+26623,
-+25599,
-+24575,
-+23551,
-+22527,
-+21503,
-+20479,
-+19455,
-+18431,
-+17407,
-+16383,
-+15359,
-+14335,
-+13311,
-+12287,
-+11263,
-+10239,
-+9215,
-+8191,
-+7167,
-+6143,
-+5119,
-+4095,
-+3071,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024,
-+1024
-diff --git a/drivers/media/video/isp/noise_filter_table.h b/drivers/media/video/isp/noise_filter_table.h
-new file mode 100644
-index 0000000..4b4c085
---- /dev/null
-+++ b/drivers/media/video/isp/noise_filter_table.h
-@@ -0,0 +1,90 @@
-+/*
-+ * noise_filter_table.h
-+ *
-+ * TI OMAP3 ISP - Noise filter table
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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
-+ */
-+
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+16,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31,
-+31
-diff --git a/include/linux/Kbuild b/include/linux/Kbuild
-index c0db7f4..f65f612 100644
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -272,6 +272,7 @@ header-y += nfsacl.h
- header-y += nl80211.h
- header-y += nubus.h
- header-y += nvram.h
-+header-y += omap3isp.h
- header-y += omapfb.h
- header-y += oom.h
- header-y += param.h
-diff --git a/include/linux/omap3isp.h b/include/linux/omap3isp.h
-new file mode 100644
-index 0000000..ab249b2
---- /dev/null
-+++ b/include/linux/omap3isp.h
-@@ -0,0 +1,631 @@
-+/*
-+ * omap3isp.h
-+ *
-+ * TI OMAP3 ISP - User-space API
-+ *
-+ * Copyright (C) 2010 Nokia Corporation
-+ * Copyright (C) 2009 Texas Instruments, Inc.
-+ *
-+ * Contacts: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
-+ *	     Sakari Ailus <sakari.ailus at maxwell.research.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 OMAP3_ISP_USER_H
-+#define OMAP3_ISP_USER_H
-+
-+#include <linux/types.h>
-+
-+/* Private IOCTLs */
-+
-+#define VIDIOC_OMAP3ISP_CCDC_CFG \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 1, struct omap3isp_ccdc_update_config)
-+#define VIDIOC_OMAP3ISP_PRV_CFG \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 2, struct omap3isp_prev_update_config)
-+#define VIDIOC_OMAP3ISP_AEWB_CFG \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 3, struct omap3isp_h3a_aewb_config)
-+#define VIDIOC_OMAP3ISP_HIST_CFG \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 4, struct omap3isp_hist_config)
-+#define VIDIOC_OMAP3ISP_AF_CFG \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 5, struct omap3isp_h3a_af_config)
-+#define VIDIOC_OMAP3ISP_STAT_REQ \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 6, struct omap3isp_stat_data)
-+#define VIDIOC_OMAP3ISP_STAT_EN \
-+	_IOWR('V', BASE_VIDIOC_PRIVATE + 7, unsigned long)
-+
-+/* Events */
-+
-+#define V4L2_EVENT_OMAP3ISP_CLASS	(V4L2_EVENT_PRIVATE_START | 0x100)
-+#define V4L2_EVENT_OMAP3ISP_AEWB	(V4L2_EVENT_OMAP3ISP_CLASS | 0x1)
-+#define V4L2_EVENT_OMAP3ISP_AF		(V4L2_EVENT_OMAP3ISP_CLASS | 0x2)
-+#define V4L2_EVENT_OMAP3ISP_HIST	(V4L2_EVENT_OMAP3ISP_CLASS | 0x3)
-+#define V4L2_EVENT_OMAP3ISP_HS_VS	(V4L2_EVENT_OMAP3ISP_CLASS | 0x4)
-+
-+struct omap3isp_stat_event_status {
-+	__u32 frame_number;
-+	__u16 config_counter;
-+	__u8 buf_err;
-+};
-+
-+/* AE/AWB related structures and flags*/
-+
-+/* H3A Range Constants */
-+#define OMAP3ISP_AEWB_MAX_SATURATION_LIM	1023
-+#define OMAP3ISP_AEWB_MIN_WIN_H			2
-+#define OMAP3ISP_AEWB_MAX_WIN_H			256
-+#define OMAP3ISP_AEWB_MIN_WIN_W			6
-+#define OMAP3ISP_AEWB_MAX_WIN_W			256
-+#define OMAP3ISP_AEWB_MIN_WINVC			1
-+#define OMAP3ISP_AEWB_MIN_WINHC			1
-+#define OMAP3ISP_AEWB_MAX_WINVC			128
-+#define OMAP3ISP_AEWB_MAX_WINHC			36
-+#define OMAP3ISP_AEWB_MAX_WINSTART		4095
-+#define OMAP3ISP_AEWB_MIN_SUB_INC		2
-+#define OMAP3ISP_AEWB_MAX_SUB_INC		32
-+#define OMAP3ISP_AEWB_MAX_BUF_SIZE		83600
-+
-+#define OMAP3ISP_AF_IIRSH_MIN			0
-+#define OMAP3ISP_AF_IIRSH_MAX			4095
-+#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MIN	1
-+#define OMAP3ISP_AF_PAXEL_HORIZONTAL_COUNT_MAX	36
-+#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MIN	1
-+#define OMAP3ISP_AF_PAXEL_VERTICAL_COUNT_MAX	128
-+#define OMAP3ISP_AF_PAXEL_INCREMENT_MIN		2
-+#define OMAP3ISP_AF_PAXEL_INCREMENT_MAX		32
-+#define OMAP3ISP_AF_PAXEL_HEIGHT_MIN		2
-+#define OMAP3ISP_AF_PAXEL_HEIGHT_MAX		256
-+#define OMAP3ISP_AF_PAXEL_WIDTH_MIN		16
-+#define OMAP3ISP_AF_PAXEL_WIDTH_MAX		256
-+#define OMAP3ISP_AF_PAXEL_HZSTART_MIN		1
-+#define OMAP3ISP_AF_PAXEL_HZSTART_MAX		4095
-+#define OMAP3ISP_AF_PAXEL_VTSTART_MIN		0
-+#define OMAP3ISP_AF_PAXEL_VTSTART_MAX		4095
-+#define OMAP3ISP_AF_THRESHOLD_MAX		255
-+#define OMAP3ISP_AF_COEF_MAX			4095
-+#define OMAP3ISP_AF_PAXEL_SIZE			48
-+#define OMAP3ISP_AF_MAX_BUF_SIZE		221184
-+
-+/**
-+ * struct omap3isp_h3a_aewb_config - AE AWB configuration reset values
-+ * saturation_limit: Saturation limit.
-+ * @win_height: Window Height. Range 2 - 256, even values only.
-+ * @win_width: Window Width. Range 6 - 256, even values only.
-+ * @ver_win_count: Vertical Window Count. Range 1 - 128.
-+ * @hor_win_count: Horizontal Window Count. Range 1 - 36.
-+ * @ver_win_start: Vertical Window Start. Range 0 - 4095.
-+ * @hor_win_start: Horizontal Window Start. Range 0 - 4095.
-+ * @blk_ver_win_start: Black Vertical Windows Start. Range 0 - 4095.
-+ * @blk_win_height: Black Window Height. Range 2 - 256, even values only.
-+ * @subsample_ver_inc: Subsample Vertical points increment Range 2 - 32, even
-+ *                     values only.
-+ * @subsample_hor_inc: Subsample Horizontal points increment Range 2 - 32, even
-+ *                     values only.
-+ * @alaw_enable: AEW ALAW EN flag.
-+ * @aewb_enable: AE AWB stats generation EN flag.
-+ */
-+struct omap3isp_h3a_aewb_config {
-+	/*
-+	 * Common fields.
-+	 * They should be the first ones and must be in the same order as in
-+	 * ispstat_generic_config struct.
-+	 */
-+	__u32 buf_size;
-+	__u16 config_counter;
-+
-+	/* Private fields */
-+	__u16 saturation_limit;
-+	__u16 win_height;
-+	__u16 win_width;
-+	__u16 ver_win_count;
-+	__u16 hor_win_count;
-+	__u16 ver_win_start;
-+	__u16 hor_win_start;
-+	__u16 blk_ver_win_start;
-+	__u16 blk_win_height;
-+	__u16 subsample_ver_inc;
-+	__u16 subsample_hor_inc;
-+	__u8 alaw_enable;
-+};
-+
-+/**
-+ * struct omap3isp_stat_data - Statistic data sent to or received from user
-+ * @buf: Pointer to pass to user.
-+ * @frame_number: Frame number of requested stats.
-+ * @cur_frame: Current frame number being processed.
-+ * @buf_size: Buffer size requested and returned.
-+ * @ts: Timestamp of returned framestats.
-+ */
-+struct omap3isp_stat_data {
-+	struct timeval ts;
-+	void __user *buf;
-+	__u32 buf_size;
-+	__u16 frame_number;
-+	__u16 cur_frame;
-+	__u16 config_counter;
-+	__u16 new_bufs;		/* Deprecated */
-+};
-+
-+
-+/* Histogram related structs */
-+
-+/* Flags for number of bins */
-+#define OMAP3ISP_HIST_BINS_32		0
-+#define OMAP3ISP_HIST_BINS_64		1
-+#define OMAP3ISP_HIST_BINS_128		2
-+#define OMAP3ISP_HIST_BINS_256		3
-+
-+/* Number of bins * 4 colors * 4-bytes word */
-+#define OMAP3ISP_HIST_MEM_SIZE_BINS(n)	((1 << ((n)+5))*4*4)
-+
-+#define OMAP3ISP_HIST_MEM_SIZE		1024
-+#define OMAP3ISP_HIST_MIN_REGIONS	1
-+#define OMAP3ISP_HIST_MAX_REGIONS	4
-+#define OMAP3ISP_HIST_MAX_WB_GAIN	255
-+#define OMAP3ISP_HIST_MIN_WB_GAIN	0
-+#define OMAP3ISP_HIST_MAX_BIT_WIDTH	14
-+#define OMAP3ISP_HIST_MIN_BIT_WIDTH	8
-+#define OMAP3ISP_HIST_MAX_WG		4
-+#define OMAP3ISP_HIST_MAX_BUF_SIZE	4096
-+
-+/* Source */
-+#define OMAP3ISP_HIST_SOURCE_CCDC	0
-+#define OMAP3ISP_HIST_SOURCE_MEM	1
-+
-+/* CFA pattern */
-+#define OMAP3ISP_HIST_CFA_BAYER		0
-+#define OMAP3ISP_HIST_CFA_FOVEONX3	1
-+
-+struct omap3isp_hist_region {
-+	__u16 h_start;
-+	__u16 h_end;
-+	__u16 v_start;
-+	__u16 v_end;
-+};
-+
-+struct omap3isp_hist_config {
-+	/*
-+	 * Common fields.
-+	 * They should be the first ones and must be in the same order as in
-+	 * ispstat_generic_config struct.
-+	 */
-+	__u32 buf_size;
-+	__u16 config_counter;
-+
-+	__u8 num_acc_frames;	/* Num of image frames to be processed and
-+				   accumulated for each histogram frame */
-+	__u16 hist_bins;	/* number of bins: 32, 64, 128, or 256 */
-+	__u8 cfa;		/* BAYER or FOVEON X3 */
-+	__u8 wg[OMAP3ISP_HIST_MAX_WG];	/* White Balance Gain */
-+	__u8 num_regions;	/* number of regions to be configured */
-+	struct omap3isp_hist_region region[OMAP3ISP_HIST_MAX_REGIONS];
-+};
-+
-+/* Auto Focus related structs */
-+
-+#define OMAP3ISP_AF_NUM_COEF		11
-+
-+enum omap3isp_h3a_af_fvmode {
-+	OMAP3ISP_AF_MODE_SUMMED = 0,
-+	OMAP3ISP_AF_MODE_PEAK = 1
-+};
-+
-+/* Red, Green, and blue pixel location in the AF windows */
-+enum omap3isp_h3a_af_rgbpos {
-+	OMAP3ISP_AF_GR_GB_BAYER = 0,	/* GR and GB as Bayer pattern */
-+	OMAP3ISP_AF_RG_GB_BAYER = 1,	/* RG and GB as Bayer pattern */
-+	OMAP3ISP_AF_GR_BG_BAYER = 2,	/* GR and BG as Bayer pattern */
-+	OMAP3ISP_AF_RG_BG_BAYER = 3,	/* RG and BG as Bayer pattern */
-+	OMAP3ISP_AF_GG_RB_CUSTOM = 4,	/* GG and RB as custom pattern */
-+	OMAP3ISP_AF_RB_GG_CUSTOM = 5	/* RB and GG as custom pattern */
-+};
-+
-+/* Contains the information regarding the Horizontal Median Filter */
-+struct omap3isp_h3a_af_hmf {
-+	__u8 enable;	/* Status of Horizontal Median Filter */
-+	__u8 threshold;	/* Threshhold Value for Horizontal Median Filter */
-+};
-+
-+/* Contains the information regarding the IIR Filters */
-+struct omap3isp_h3a_af_iir {
-+	__u16 h_start;			/* IIR horizontal start */
-+	__u16 coeff_set0[OMAP3ISP_AF_NUM_COEF];	/* Filter coefficient, set 0 */
-+	__u16 coeff_set1[OMAP3ISP_AF_NUM_COEF];	/* Filter coefficient, set 1 */
-+};
-+
-+/* Contains the information regarding the Paxels Structure in AF Engine */
-+struct omap3isp_h3a_af_paxel {
-+	__u16 h_start;	/* Horizontal Start Position */
-+	__u16 v_start;	/* Vertical Start Position */
-+	__u8 width;	/* Width of the Paxel */
-+	__u8 height;	/* Height of the Paxel */
-+	__u8 h_cnt;	/* Horizontal Count */
-+	__u8 v_cnt;	/* vertical Count */
-+	__u8 line_inc;	/* Line Increment */
-+};
-+
-+/* Contains the parameters required for hardware set up of AF Engine */
-+struct omap3isp_h3a_af_config {
-+	/*
-+	 * Common fields.
-+	 * They should be the first ones and must be in the same order as in
-+	 * ispstat_generic_config struct.
-+	 */
-+	__u32 buf_size;
-+	__u16 config_counter;
-+
-+	struct omap3isp_h3a_af_hmf hmf;		/* HMF configurations */
-+	struct omap3isp_h3a_af_iir iir;		/* IIR filter configurations */
-+	struct omap3isp_h3a_af_paxel paxel;	/* Paxel parameters */
-+	enum omap3isp_h3a_af_rgbpos rgb_pos;	/* RGB Positions */
-+	enum omap3isp_h3a_af_fvmode fvmode;	/* Accumulator mode */
-+	__u8 alaw_enable;			/* AF ALAW status */
-+};
-+
-+/* ISP CCDC structs */
-+
-+/* Abstraction layer CCDC configurations */
-+#define OMAP3ISP_CCDC_ALAW		(1 << 0)
-+#define OMAP3ISP_CCDC_LPF		(1 << 1)
-+#define OMAP3ISP_CCDC_BLCLAMP		(1 << 2)
-+#define OMAP3ISP_CCDC_BCOMP		(1 << 3)
-+#define OMAP3ISP_CCDC_FPC		(1 << 4)
-+#define OMAP3ISP_CCDC_CULL		(1 << 5)
-+#define OMAP3ISP_CCDC_CONFIG_LSC	(1 << 7)
-+#define OMAP3ISP_CCDC_TBL_LSC		(1 << 8)
-+
-+#define OMAP3ISP_RGB_MAX		3
-+
-+/* Enumeration constants for Alaw input width */
-+enum omap3isp_alaw_ipwidth {
-+	OMAP3ISP_ALAW_BIT12_3 = 0x3,
-+	OMAP3ISP_ALAW_BIT11_2 = 0x4,
-+	OMAP3ISP_ALAW_BIT10_1 = 0x5,
-+	OMAP3ISP_ALAW_BIT9_0 = 0x6
-+};
-+
-+/**
-+ * struct omap3isp_ccdc_lsc_config - LSC configuration
-+ * @offset: Table Offset of the gain table.
-+ * @gain_mode_n: Vertical dimension of a paxel in LSC configuration.
-+ * @gain_mode_m: Horizontal dimension of a paxel in LSC configuration.
-+ * @gain_format: Gain table format.
-+ * @fmtsph: Start pixel horizontal from start of the HS sync pulse.
-+ * @fmtlnh: Number of pixels in horizontal direction to use for the data
-+ *          reformatter.
-+ * @fmtslv: Start line from start of VS sync pulse for the data reformatter.
-+ * @fmtlnv: Number of lines in vertical direction for the data reformatter.
-+ * @initial_x: X position, in pixels, of the first active pixel in reference
-+ *             to the first active paxel. Must be an even number.
-+ * @initial_y: Y position, in pixels, of the first active pixel in reference
-+ *             to the first active paxel. Must be an even number.
-+ * @size: Size of LSC gain table. Filled when loaded from userspace.
-+ */
-+struct omap3isp_ccdc_lsc_config {
-+	__u16 offset;
-+	__u8 gain_mode_n;
-+	__u8 gain_mode_m;
-+	__u8 gain_format;
-+	__u16 fmtsph;
-+	__u16 fmtlnh;
-+	__u16 fmtslv;
-+	__u16 fmtlnv;
-+	__u8 initial_x;
-+	__u8 initial_y;
-+	__u32 size;
-+};
-+
-+/**
-+ * struct omap3isp_ccdc_bclamp - Optical & Digital black clamp subtract
-+ * @obgain: Optical black average gain.
-+ * @obstpixel: Start Pixel w.r.t. HS pulse in Optical black sample.
-+ * @oblines: Optical Black Sample lines.
-+ * @oblen: Optical Black Sample Length.
-+ * @dcsubval: Digital Black Clamp subtract value.
-+ */
-+struct omap3isp_ccdc_bclamp {
-+	__u8 obgain;
-+	__u8 obstpixel;
-+	__u8 oblines;
-+	__u8 oblen;
-+	__u16 dcsubval;
-+};
-+
-+/**
-+ * struct omap3isp_ccdc_fpc - Faulty Pixels Correction
-+ * @fpnum: Number of faulty pixels to be corrected in the frame.
-+ * @fpcaddr: Memory address of the FPC Table
-+ */
-+struct omap3isp_ccdc_fpc {
-+	__u16 fpnum;
-+	__u32 fpcaddr;
-+};
-+
-+/**
-+ * struct omap3isp_ccdc_blcomp - Black Level Compensation parameters
-+ * @b_mg: B/Mg pixels. 2's complement. -128 to +127.
-+ * @gb_g: Gb/G pixels. 2's complement. -128 to +127.
-+ * @gr_cy: Gr/Cy pixels. 2's complement. -128 to +127.
-+ * @r_ye: R/Ye pixels. 2's complement. -128 to +127.
-+ */
-+struct omap3isp_ccdc_blcomp {
-+	__u8 b_mg;
-+	__u8 gb_g;
-+	__u8 gr_cy;
-+	__u8 r_ye;
-+};
-+
-+/**
-+ * omap3isp_ccdc_culling - Culling parameters
-+ * @v_pattern: Vertical culling pattern.
-+ * @h_odd: Horizontal Culling pattern for odd lines.
-+ * @h_even: Horizontal Culling pattern for even lines.
-+ */
-+struct omap3isp_ccdc_culling {
-+	__u8 v_pattern;
-+	__u16 h_odd;
-+	__u16 h_even;
-+};
-+
-+/**
-+ * omap3isp_ccdc_update_config - CCDC configuration
-+ * @update: Specifies which CCDC registers should be updated.
-+ * @flag: Specifies which CCDC functions should be enabled.
-+ * @alawip: Enable/Disable A-Law compression.
-+ * @bclamp: Black clamp control register.
-+ * @blcomp: Black level compensation value for RGrGbB Pixels. 2's complement.
-+ * @fpc: Number of faulty pixels corrected in the frame, address of FPC table.
-+ * @cull: Cull control register.
-+ * @lsc: Pointer to LSC gain table.
-+ */
-+struct omap3isp_ccdc_update_config {
-+	__u16 update;
-+	__u16 flag;
-+	enum omap3isp_alaw_ipwidth alawip;
-+	struct omap3isp_ccdc_bclamp __user *bclamp;
-+	struct omap3isp_ccdc_blcomp __user *blcomp;
-+	struct omap3isp_ccdc_fpc __user *fpc;
-+	struct omap3isp_ccdc_lsc_config __user *lsc_cfg;
-+	struct omap3isp_ccdc_culling __user *cull;
-+	__u8 __user *lsc;
-+};
-+
-+/* Preview configurations */
-+#define OMAP3ISP_PREV_LUMAENH		(1 << 0)
-+#define OMAP3ISP_PREV_INVALAW		(1 << 1)
-+#define OMAP3ISP_PREV_HRZ_MED		(1 << 2)
-+#define OMAP3ISP_PREV_CFA		(1 << 3)
-+#define OMAP3ISP_PREV_CHROMA_SUPP	(1 << 4)
-+#define OMAP3ISP_PREV_WB		(1 << 5)
-+#define OMAP3ISP_PREV_BLKADJ		(1 << 6)
-+#define OMAP3ISP_PREV_RGB2RGB		(1 << 7)
-+#define OMAP3ISP_PREV_COLOR_CONV	(1 << 8)
-+#define OMAP3ISP_PREV_YC_LIMIT		(1 << 9)
-+#define OMAP3ISP_PREV_DEFECT_COR	(1 << 10)
-+#define OMAP3ISP_PREV_GAMMABYPASS	(1 << 11)
-+#define OMAP3ISP_PREV_DRK_FRM_CAPTURE	(1 << 12)
-+#define OMAP3ISP_PREV_DRK_FRM_SUBTRACT	(1 << 13)
-+#define OMAP3ISP_PREV_LENS_SHADING	(1 << 14)
-+#define OMAP3ISP_PREV_NF		(1 << 15)
-+#define OMAP3ISP_PREV_GAMMA		(1 << 16)
-+
-+#define OMAP3ISP_PREV_NF_TBL_SIZE	64
-+#define OMAP3ISP_PREV_CFA_TBL_SIZE	576
-+#define OMAP3ISP_PREV_GAMMA_TBL_SIZE	1024
-+#define OMAP3ISP_PREV_YENH_TBL_SIZE	128
-+
-+#define OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS	4
-+
-+/**
-+ * struct omap3isp_prev_hmed - Horizontal Median Filter
-+ * @odddist: Distance between consecutive pixels of same color in the odd line.
-+ * @evendist: Distance between consecutive pixels of same color in the even
-+ *            line.
-+ * @thres: Horizontal median filter threshold.
-+ */
-+struct omap3isp_prev_hmed {
-+	__u8 odddist;
-+	__u8 evendist;
-+	__u8 thres;
-+};
-+
-+/*
-+ * Enumeration for CFA Formats supported by preview
-+ */
-+enum omap3isp_cfa_fmt {
-+	OMAP3ISP_CFAFMT_BAYER,
-+	OMAP3ISP_CFAFMT_SONYVGA,
-+	OMAP3ISP_CFAFMT_RGBFOVEON,
-+	OMAP3ISP_CFAFMT_DNSPL,
-+	OMAP3ISP_CFAFMT_HONEYCOMB,
-+	OMAP3ISP_CFAFMT_RRGGBBFOVEON
-+};
-+
-+/**
-+ * struct omap3isp_prev_cfa - CFA Interpolation
-+ * @format: CFA Format Enum value supported by preview.
-+ * @gradthrs_vert: CFA Gradient Threshold - Vertical.
-+ * @gradthrs_horz: CFA Gradient Threshold - Horizontal.
-+ * @table: Pointer to the CFA table.
-+ */
-+struct omap3isp_prev_cfa {
-+	enum omap3isp_cfa_fmt format;
-+	__u8 gradthrs_vert;
-+	__u8 gradthrs_horz;
-+	__u32 table[OMAP3ISP_PREV_CFA_TBL_SIZE];
-+};
-+
-+/**
-+ * struct omap3isp_prev_csup - Chrominance Suppression
-+ * @gain: Gain.
-+ * @thres: Threshold.
-+ * @hypf_en: Flag to enable/disable the High Pass Filter.
-+ */
-+struct omap3isp_prev_csup {
-+	__u8 gain;
-+	__u8 thres;
-+	__u8 hypf_en;
-+};
-+
-+/**
-+ * struct omap3isp_prev_wbal - White Balance
-+ * @dgain: Digital gain (U10Q8).
-+ * @coef3: White balance gain - COEF 3 (U8Q5).
-+ * @coef2: White balance gain - COEF 2 (U8Q5).
-+ * @coef1: White balance gain - COEF 1 (U8Q5).
-+ * @coef0: White balance gain - COEF 0 (U8Q5).
-+ */
-+struct omap3isp_prev_wbal {
-+	__u16 dgain;
-+	__u8 coef3;
-+	__u8 coef2;
-+	__u8 coef1;
-+	__u8 coef0;
-+};
-+
-+/**
-+ * struct omap3isp_prev_blkadj - Black Level Adjustment
-+ * @red: Black level offset adjustment for Red in 2's complement format
-+ * @green: Black level offset adjustment for Green in 2's complement format
-+ * @blue: Black level offset adjustment for Blue in 2's complement format
-+ */
-+struct omap3isp_prev_blkadj {
-+	/*Black level offset adjustment for Red in 2's complement format */
-+	__u8 red;
-+	/*Black level offset adjustment for Green in 2's complement format */
-+	__u8 green;
-+	/* Black level offset adjustment for Blue in 2's complement format */
-+	__u8 blue;
-+};
-+
-+/**
-+ * struct omap3isp_prev_rgbtorgb - RGB to RGB Blending
-+ * @matrix: Blending values(S12Q8 format)
-+ *              [RR] [GR] [BR]
-+ *              [RG] [GG] [BG]
-+ *              [RB] [GB] [BB]
-+ * @offset: Blending offset value for R,G,B in 2's complement integer format.
-+ */
-+struct omap3isp_prev_rgbtorgb {
-+	__u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
-+	__u16 offset[OMAP3ISP_RGB_MAX];
-+};
-+
-+/**
-+ * struct omap3isp_prev_csc - Color Space Conversion from RGB-YCbYCr
-+ * @matrix: Color space conversion coefficients(S10Q8)
-+ *              [CSCRY]  [CSCGY]  [CSCBY]
-+ *              [CSCRCB] [CSCGCB] [CSCBCB]
-+ *              [CSCRCR] [CSCGCR] [CSCBCR]
-+ * @offset: CSC offset values for Y offset, CB offset and CR offset respectively
-+ */
-+struct omap3isp_prev_csc {
-+	__u16 matrix[OMAP3ISP_RGB_MAX][OMAP3ISP_RGB_MAX];
-+	__s16 offset[OMAP3ISP_RGB_MAX];
-+};
-+
-+/**
-+ * struct omap3isp_prev_yclimit - Y, C Value Limit
-+ * @minC: Minimum C value
-+ * @maxC: Maximum C value
-+ * @minY: Minimum Y value
-+ * @maxY: Maximum Y value
-+ */
-+struct omap3isp_prev_yclimit {
-+	__u8 minC;
-+	__u8 maxC;
-+	__u8 minY;
-+	__u8 maxY;
-+};
-+
-+/**
-+ * struct omap3isp_prev_dcor - Defect correction
-+ * @couplet_mode_en: Flag to enable or disable the couplet dc Correction in NF
-+ * @detect_correct: Thresholds for correction bit 0:10 detect 16:25 correct
-+ */
-+struct omap3isp_prev_dcor {
-+	__u8 couplet_mode_en;
-+	__u32 detect_correct[OMAP3ISP_PREV_DETECT_CORRECT_CHANNELS];
-+};
-+
-+/**
-+ * struct omap3isp_prev_nf - Noise Filter
-+ * @spread: Spread value to be used in Noise Filter
-+ * @table: Pointer to the Noise Filter table
-+ */
-+struct omap3isp_prev_nf {
-+	__u8 spread;
-+	__u32 table[OMAP3ISP_PREV_NF_TBL_SIZE];
-+};
-+
-+/**
-+ * struct omap3isp_prev_gtables - Gamma correction tables
-+ * @red: Array for red gamma table.
-+ * @green: Array for green gamma table.
-+ * @blue: Array for blue gamma table.
-+ */
-+struct omap3isp_prev_gtables {
-+	__u32 red[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
-+	__u32 green[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
-+	__u32 blue[OMAP3ISP_PREV_GAMMA_TBL_SIZE];
-+};
-+
-+/**
-+ * struct omap3isp_prev_luma - Luma enhancement
-+ * @table: Array for luma enhancement table.
-+ */
-+struct omap3isp_prev_luma {
-+	__u32 table[OMAP3ISP_PREV_YENH_TBL_SIZE];
-+};
-+
-+/**
-+ * struct omap3isp_prev_update_config - Preview engine configuration (user)
-+ * @update: Specifies which ISP Preview registers should be updated.
-+ * @flag: Specifies which ISP Preview functions should be enabled.
-+ * @shading_shift: 3bit value of shift used in shading compensation.
-+ * @luma: Pointer to luma enhancement structure.
-+ * @hmed: Pointer to structure containing the odd and even distance.
-+ *        between the pixels in the image along with the filter threshold.
-+ * @cfa: Pointer to structure containing the CFA interpolation table, CFA.
-+ *       format in the image, vertical and horizontal gradient threshold.
-+ * @csup: Pointer to Structure for Chrominance Suppression coefficients.
-+ * @wbal: Pointer to structure for White Balance.
-+ * @blkadj: Pointer to structure for Black Adjustment.
-+ * @rgb2rgb: Pointer to structure for RGB to RGB Blending.
-+ * @csc: Pointer to structure for Color Space Conversion from RGB-YCbYCr.
-+ * @yclimit: Pointer to structure for Y, C Value Limit.
-+ * @dcor: Pointer to structure for defect correction.
-+ * @nf: Pointer to structure for Noise Filter
-+ * @gamma: Pointer to gamma structure.
-+ */
-+struct omap3isp_prev_update_config {
-+	__u32 update;
-+	__u32 flag;
-+	__u32 shading_shift;
-+	struct omap3isp_prev_luma __user *luma;
-+	struct omap3isp_prev_hmed __user *hmed;
-+	struct omap3isp_prev_cfa __user *cfa;
-+	struct omap3isp_prev_csup __user *csup;
-+	struct omap3isp_prev_wbal __user *wbal;
-+	struct omap3isp_prev_blkadj __user *blkadj;
-+	struct omap3isp_prev_rgbtorgb __user *rgb2rgb;
-+	struct omap3isp_prev_csc __user *csc;
-+	struct omap3isp_prev_yclimit __user *yclimit;
-+	struct omap3isp_prev_dcor __user *dcor;
-+	struct omap3isp_prev_nf __user *nf;
-+	struct omap3isp_prev_gtables __user *gamma;
-+};
-+
-+#endif	/* OMAP3_ISP_USER_H */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/new/0001-OMAP-Enable-Magic-SysRq-on-serial-console-ttyOx.patch b/recipes-kernel/linux/linux-omap/new/0001-OMAP-Enable-Magic-SysRq-on-serial-console-ttyOx.patch
deleted file mode 100644
index e157d36..0000000
--- a/recipes-kernel/linux/linux-omap/new/0001-OMAP-Enable-Magic-SysRq-on-serial-console-ttyOx.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From a43b9359708691eb3aec983da36461720fb4a556 Mon Sep 17 00:00:00 2001
-From: Thomas Weber <weber at corscience.de>
-Date: Wed, 19 Jan 2011 09:41:01 +0100
-Subject: [PATCH] OMAP: Enable Magic SysRq on serial console ttyOx
-
-Magic SysRq key is not working for OMAP on new serial
-console ttyOx because SUPPORT_SYSRQ is not defined
-for omap-serial.
-
-This patch defines SUPPORT_SYSRQ in omap-serial and
-enables handling of Magic SysRq character.
-
-Signed-off-by: Thomas Weber <weber at corscience.de>
----
- drivers/serial/omap-serial.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/serial/omap-serial.c b/drivers/serial/omap-serial.c
-index 1201eff..907be9b 100644
---- a/drivers/serial/omap-serial.c
-+++ b/drivers/serial/omap-serial.c
-@@ -20,6 +20,10 @@
-  * this driver as required for the omap-platform.
-  */
- 
-+#if defined(CONFIG_SERIAL_OMAP_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
-+#define SUPPORT_SYSRQ
-+#endif
-+
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/console.h>
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/omap3-touchbook/defconfig b/recipes-kernel/linux/linux-omap/omap3-touchbook/defconfig
deleted file mode 120000
index 44e34a7..0000000
--- a/recipes-kernel/linux/linux-omap/omap3-touchbook/defconfig
+++ /dev/null
@@ -1 +0,0 @@
-../beagleboard/defconfig
\ No newline at end of file
diff --git a/recipes-kernel/linux/linux-omap/omap3evm/defconfig b/recipes-kernel/linux/linux-omap/omap3evm/defconfig
deleted file mode 120000
index 44e34a7..0000000
--- a/recipes-kernel/linux/linux-omap/omap3evm/defconfig
+++ /dev/null
@@ -1 +0,0 @@
-../beagleboard/defconfig
\ No newline at end of file
diff --git a/recipes-kernel/linux/linux-omap/overo/defconfig b/recipes-kernel/linux/linux-omap/overo/defconfig
deleted file mode 120000
index 44e34a7..0000000
--- a/recipes-kernel/linux/linux-omap/overo/defconfig
+++ /dev/null
@@ -1 +0,0 @@
-../beagleboard/defconfig
\ No newline at end of file
diff --git a/recipes-kernel/linux/linux-omap/usrp-e1xx/defconfig b/recipes-kernel/linux/linux-omap/usrp-e1xx/defconfig
deleted file mode 120000
index 44e34a7..0000000
--- a/recipes-kernel/linux/linux-omap/usrp-e1xx/defconfig
+++ /dev/null
@@ -1 +0,0 @@
-../beagleboard/defconfig
\ No newline at end of file
diff --git a/recipes-kernel/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch b/recipes-kernel/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
deleted file mode 100644
index 9f73f00..0000000
--- a/recipes-kernel/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From cba7c162c77d225afbf53148273019946a73b2c2 Mon Sep 17 00:00:00 2001
-From: Philip Balister <balister at nomad.(none)>
-Date: Wed, 17 Feb 2010 14:51:39 -0800
-Subject: [PATCH 1/3] 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-kernel/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch b/recipes-kernel/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch
deleted file mode 100644
index a7415ff..0000000
--- a/recipes-kernel/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From fa589f1ad83e8795ba0509e7899dd1a6926c5fbd Mon Sep 17 00:00:00 2001
-From: Philip Balister <philip at opensdr.com>
-Date: Thu, 22 Apr 2010 19:41:58 -0700
-Subject: [PATCH 2/3] 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-kernel/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch b/recipes-kernel/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
deleted file mode 100644
index 400807d..0000000
--- a/recipes-kernel/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
+++ /dev/null
@@ -1,1889 +0,0 @@
-From 56a2e5e0ace395e94f176a90a12d3cfcd8b7f68f Mon Sep 17 00:00:00 2001
-From: Philip Balister <balister at moose.(none)>
-Date: Wed, 13 Jan 2010 14:35:39 -0500
-Subject: [PATCH 3/3] 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 at 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 at 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 at 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-kernel/linux/linux-omap/wl1271/0001-wl12xx-Read-MAC-address-from-NVS-file-on-HW-startup.patch b/recipes-kernel/linux/linux-omap/wl1271/0001-wl12xx-Read-MAC-address-from-NVS-file-on-HW-startup.patch
deleted file mode 100644
index a4f0873..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0001-wl12xx-Read-MAC-address-from-NVS-file-on-HW-startup.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 5d302917bbdb377538f6c848243a6265878abcee Mon Sep 17 00:00:00 2001
-From: Arik Nemtsov <arik at wizery.com>
-Date: Sat, 16 Oct 2010 21:49:52 +0200
-Subject: [PATCH 01/15] wl12xx: Read MAC address from NVS file on HW startup
-
-Try to read the MAC address from the on-disk NVS file.
-A non-zero MAC address is required to add an AP interface.
-
-Signed-off-by: Arik Nemtsov <arik at wizery.com>
-Reviewed-by: Luciano Coelho <coelho at ti.com>
-Signed-off-by: Luciano Coelho <coelho at ti.com>
----
- drivers/net/wireless/wl12xx/wl1271_main.c |   12 ++++++++++++
- 1 files changed, 12 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
-index 48a4b99..591de0e 100644
---- a/drivers/net/wireless/wl12xx/wl1271_main.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
-@@ -2391,6 +2391,18 @@ int wl1271_register_hw(struct wl1271 *wl)
- 	if (wl->mac80211_registered)
- 		return 0;
- 
-+	ret = wl1271_fetch_nvs(wl);
-+	if (ret == 0) {
-+		u8 *nvs_ptr = (u8 *)wl->nvs->nvs;
-+
-+		wl->mac_addr[0] = nvs_ptr[11];
-+		wl->mac_addr[1] = nvs_ptr[10];
-+		wl->mac_addr[2] = nvs_ptr[6];
-+		wl->mac_addr[3] = nvs_ptr[5];
-+		wl->mac_addr[4] = nvs_ptr[4];
-+		wl->mac_addr[5] = nvs_ptr[3];
-+	}
-+
- 	SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr);
- 
- 	ret = ieee80211_register_hw(wl->hw);
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0002-wl1271-11n-Support-Add-Definitions.patch b/recipes-kernel/linux/linux-omap/wl1271/0002-wl1271-11n-Support-Add-Definitions.patch
deleted file mode 100644
index 1da7be6..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0002-wl1271-11n-Support-Add-Definitions.patch
+++ /dev/null
@@ -1,165 +0,0 @@
-From 99d1c6c23faa446ec0ebdf056d8aa8f4d983d518 Mon Sep 17 00:00:00 2001
-From: Shahar Levi <shahar_levi at ti.com>
-Date: Wed, 13 Oct 2010 16:09:39 +0200
-Subject: [PATCH 02/15] wl1271: 11n Support, Add Definitions
-
-Two acx commands: ht_capabilities & ht_information, 11n sta capabilities
-macro.
-
-Signed-off-by: Shahar Levi <shahar_levi at ti.com>
-Reviewed-by: Luciano Coelho <luciano.coelho at nokia.com>
-Signed-off-by: Luciano Coelho <luciano.coelho at nokia.com>
----
- drivers/net/wireless/wl12xx/wl1271.h      |   11 ++++-
- drivers/net/wireless/wl12xx/wl1271_acx.h  |   81 +++++++++++++++++++++++++++++
- drivers/net/wireless/wl12xx/wl1271_main.c |   15 +++++
- 3 files changed, 106 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/net/wireless/wl12xx/wl1271.h b/drivers/net/wireless/wl12xx/wl1271.h
-index 8a4cd76..45a2583 100644
---- a/drivers/net/wireless/wl12xx/wl1271.h
-+++ b/drivers/net/wireless/wl12xx/wl1271.h
-@@ -432,7 +432,12 @@ struct wl1271 {
- 	/* Our association ID */
- 	u16 aid;
- 
--	/* currently configured rate set */
-+	/*
-+	 * currently configured rate set:
-+	 *	bits  0-15 - 802.11abg rates
-+	 *	bits 16-23 - 802.11n   MCS index mask
-+	 * support only 1 stream, thus only 8 bits for the MCS rates (0-7).
-+	 */
- 	u32 sta_rate_set;
- 	u32 basic_rate_set;
- 	u32 basic_rate;
-@@ -509,4 +514,8 @@ int wl1271_plt_stop(struct wl1271 *wl);
- #define WL1271_PRE_POWER_ON_SLEEP 20 /* in miliseconds */
- #define WL1271_POWER_ON_SLEEP 200 /* in miliseconds */
- 
-+/* Macros to handle wl1271.sta_rate_set */
-+#define HW_BG_RATES_MASK	0xffff
-+#define HW_HT_RATES_OFFSET	16
-+
- #endif
-diff --git a/drivers/net/wireless/wl12xx/wl1271_acx.h b/drivers/net/wireless/wl12xx/wl1271_acx.h
-index ebb341d..f090a04 100644
---- a/drivers/net/wireless/wl12xx/wl1271_acx.h
-+++ b/drivers/net/wireless/wl12xx/wl1271_acx.h
-@@ -964,6 +964,87 @@ struct wl1271_acx_rssi_snr_avg_weights {
- 	u8 snr_data;
- };
- 
-+/*
-+ * ACX_PEER_HT_CAP
-+ * Configure HT capabilities - declare the capabilities of the peer
-+ * we are connected to.
-+ */
-+struct wl1271_acx_ht_capabilities {
-+	struct acx_header header;
-+
-+	/*
-+	 * bit 0 - Allow HT Operation
-+	 * bit 1 - Allow Greenfield format in TX
-+	 * bit 2 - Allow Short GI in TX
-+	 * bit 3 - Allow L-SIG TXOP Protection in TX
-+	 * bit 4 - Allow HT Control fields in TX.
-+	 *         Note, driver will still leave space for HT control in packets
-+	 *         regardless of the value of this field. FW will be responsible
-+	 *         to drop the HT field from any frame when this Bit set to 0.
-+	 * bit 5 - Allow RD initiation in TXOP. FW is allowed to initate RD.
-+	 *         Exact policy setting for this feature is TBD.
-+	 *         Note, this bit can only be set to 1 if bit 3 is set to 1.
-+	 */
-+	__le32 ht_capabilites;
-+
-+	/*
-+	 * Indicates to which peer these capabilities apply.
-+	 * For infrastructure use ff:ff:ff:ff:ff:ff that indicates relevance
-+	 * for all peers.
-+	 * Only valid for IBSS/DLS operation.
-+	 */
-+	u8 mac_address[ETH_ALEN];
-+
-+	/*
-+	 * This the maximum A-MPDU length supported by the AP. The FW may not
-+	 * exceed this length when sending A-MPDUs
-+	 */
-+	u8 ampdu_max_length;
-+
-+	/* This is the minimal spacing required when sending A-MPDUs to the AP*/
-+	u8 ampdu_min_spacing;
-+} __packed;
-+
-+/* HT Capabilites Fw Bit Mask Mapping */
-+#define WL1271_ACX_FW_CAP_HT_OPERATION                 BIT(0)
-+#define WL1271_ACX_FW_CAP_GREENFIELD_FRAME_FORMAT      BIT(1)
-+#define WL1271_ACX_FW_CAP_SHORT_GI_FOR_20MHZ_PACKETS   BIT(2)
-+#define WL1271_ACX_FW_CAP_LSIG_TXOP_PROTECTION         BIT(3)
-+#define WL1271_ACX_FW_CAP_HT_CONTROL_FIELDS            BIT(4)
-+#define WL1271_ACX_FW_CAP_RD_INITIATION                BIT(5)
-+
-+
-+/*
-+ * ACX_HT_BSS_OPERATION
-+ * Configure HT capabilities - AP rules for behavior in the BSS.
-+ */
-+struct wl1271_acx_ht_information {
-+	struct acx_header header;
-+
-+	/* Values: 0 - RIFS not allowed, 1 - RIFS allowed */
-+	u8 rifs_mode;
-+
-+	/* Values: 0 - 3 like in spec */
-+	u8 ht_protection;
-+
-+	/* Values: 0 - GF protection not required, 1 - GF protection required */
-+	u8 gf_protection;
-+
-+	/*Values: 0 - TX Burst limit not required, 1 - TX Burst Limit required*/
-+	u8 ht_tx_burst_limit;
-+
-+	/*
-+	 * Values: 0 - Dual CTS protection not required,
-+	 *         1 - Dual CTS Protection required
-+	 * Note: When this value is set to 1 FW will protect all TXOP with RTS
-+	 * frame and will not use CTS-to-self regardless of the value of the
-+	 * ACX_CTS_PROTECTION information element
-+	 */
-+	u8 dual_cts_protection;
-+
-+	u8 padding[3];
-+} __packed;
-+
- struct wl1271_acx_fw_tsf_information {
- 	struct acx_header header;
- 
-diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
-index 591de0e..785b73c 100644
---- a/drivers/net/wireless/wl12xx/wl1271_main.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
-@@ -2134,6 +2134,21 @@ static const u8 wl1271_rate_to_idx_2ghz[] = {
- 	0                              /* CONF_HW_RXTX_RATE_1    */
- };
- 
-+/* 11n STA capabilities */
-+#define HW_RX_HIGHEST_RATE	72
-+
-+#define WL1271_HT_CAP { \
-+	.cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
-+	.ht_supported = true, \
-+	.ampdu_factor = IEEE80211_HT_MAX_AMPDU_8K, \
-+	.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
-+	.mcs = { \
-+		.rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, \
-+		.rx_highest = cpu_to_le16(HW_RX_HIGHEST_RATE), \
-+		.tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
-+		}, \
-+}
-+
- /* can't be const, mac80211 writes to this */
- static struct ieee80211_supported_band wl1271_band_2ghz = {
- 	.channels = wl1271_channels,
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0003-wl1271-11n-Support-ACX-Commands.patch b/recipes-kernel/linux/linux-omap/wl1271/0003-wl1271-11n-Support-ACX-Commands.patch
deleted file mode 100644
index 8d2412b..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0003-wl1271-11n-Support-ACX-Commands.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 160169e1e717020b8456278950c30d2b1f15c314 Mon Sep 17 00:00:00 2001
-From: Shahar Levi <shahar_levi at ti.com>
-Date: Wed, 13 Oct 2010 16:09:40 +0200
-Subject: [PATCH 03/15] wl1271: 11n Support, ACX Commands
-
-Added ACX command to the FW for 11n support.
-
-Signed-off-by: Shahar Levi <shahar_levi at ti.com>
-Reviewed-by: Luciano Coelho <luciano.coelho at nokia.com>
-Signed-off-by: Luciano Coelho <luciano.coelho at nokia.com>
----
- drivers/net/wireless/wl12xx/wl1271_acx.c |   83 ++++++++++++++++++++++++++++++
- drivers/net/wireless/wl12xx/wl1271_acx.h |    5 ++
- 2 files changed, 88 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/wireless/wl12xx/wl1271_acx.c b/drivers/net/wireless/wl12xx/wl1271_acx.c
-index 6189934..bd7f95f 100644
---- a/drivers/net/wireless/wl12xx/wl1271_acx.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_acx.c
-@@ -1226,6 +1226,89 @@ out:
- 	return ret;
- }
- 
-+int wl1271_acx_set_ht_capabilities(struct wl1271 *wl,
-+				    struct ieee80211_sta_ht_cap *ht_cap,
-+				    bool allow_ht_operation)
-+{
-+	struct wl1271_acx_ht_capabilities *acx;
-+	u8 mac_address[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-+	int ret = 0;
-+
-+	wl1271_debug(DEBUG_ACX, "acx ht capabilities setting");
-+
-+	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
-+	if (!acx) {
-+		ret = -ENOMEM;
-+		goto out;
-+	}
-+
-+	/* Allow HT Operation ? */
-+	if (allow_ht_operation) {
-+		acx->ht_capabilites =
-+			WL1271_ACX_FW_CAP_HT_OPERATION;
-+		if (ht_cap->cap & IEEE80211_HT_CAP_GRN_FLD)
-+			acx->ht_capabilites |=
-+				WL1271_ACX_FW_CAP_GREENFIELD_FRAME_FORMAT;
-+		if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
-+			acx->ht_capabilites |=
-+				WL1271_ACX_FW_CAP_SHORT_GI_FOR_20MHZ_PACKETS;
-+		if (ht_cap->cap & IEEE80211_HT_CAP_LSIG_TXOP_PROT)
-+			acx->ht_capabilites |=
-+				WL1271_ACX_FW_CAP_LSIG_TXOP_PROTECTION;
-+
-+		/* get data from A-MPDU parameters field */
-+		acx->ampdu_max_length = ht_cap->ampdu_factor;
-+		acx->ampdu_min_spacing = ht_cap->ampdu_density;
-+
-+		memcpy(acx->mac_address, mac_address, ETH_ALEN);
-+	} else { /* HT operations are not allowed */
-+		acx->ht_capabilites = 0;
-+	}
-+
-+	ret = wl1271_cmd_configure(wl, ACX_PEER_HT_CAP, acx, sizeof(*acx));
-+	if (ret < 0) {
-+		wl1271_warning("acx ht capabilities setting failed: %d", ret);
-+		goto out;
-+	}
-+
-+out:
-+	kfree(acx);
-+	return ret;
-+}
-+
-+int wl1271_acx_set_ht_information(struct wl1271 *wl,
-+				   u16 ht_operation_mode)
-+{
-+	struct wl1271_acx_ht_information *acx;
-+	int ret = 0;
-+
-+	wl1271_debug(DEBUG_ACX, "acx ht information setting");
-+
-+	acx = kzalloc(sizeof(*acx), GFP_KERNEL);
-+	if (!acx) {
-+		ret = -ENOMEM;
-+		goto out;
-+	}
-+
-+	acx->ht_protection =
-+		(u8)(ht_operation_mode & IEEE80211_HT_OP_MODE_PROTECTION);
-+	acx->rifs_mode = 0;
-+	acx->gf_protection = 0;
-+	acx->ht_tx_burst_limit = 0;
-+	acx->dual_cts_protection = 0;
-+
-+	ret = wl1271_cmd_configure(wl, ACX_HT_BSS_OPERATION, acx, sizeof(*acx));
-+
-+	if (ret < 0) {
-+		wl1271_warning("acx ht information setting failed: %d", ret);
-+		goto out;
-+	}
-+
-+out:
-+	kfree(acx);
-+	return ret;
-+}
-+
- int wl1271_acx_tsf_info(struct wl1271 *wl, u64 *mactime)
- {
- 	struct wl1271_acx_fw_tsf_information *tsf_info;
-diff --git a/drivers/net/wireless/wl12xx/wl1271_acx.h b/drivers/net/wireless/wl12xx/wl1271_acx.h
-index f090a04..7589167 100644
---- a/drivers/net/wireless/wl12xx/wl1271_acx.h
-+++ b/drivers/net/wireless/wl12xx/wl1271_acx.h
-@@ -1174,6 +1174,11 @@ int wl1271_acx_keep_alive_config(struct wl1271 *wl, u8 index, u8 tpl_valid);
- int wl1271_acx_rssi_snr_trigger(struct wl1271 *wl, bool enable,
- 				s16 thold, u8 hyst);
- int wl1271_acx_rssi_snr_avg_weights(struct wl1271 *wl);
-+int wl1271_acx_set_ht_capabilities(struct wl1271 *wl,
-+				    struct ieee80211_sta_ht_cap *ht_cap,
-+				    bool allow_ht_operation);
-+int wl1271_acx_set_ht_information(struct wl1271 *wl,
-+				   u16 ht_operation_mode);
- int wl1271_acx_tsf_info(struct wl1271 *wl, u64 *mactime);
- 
- #endif /* __WL1271_ACX_H__ */
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0004-wl1271-11n-Support-functionality-and-configuration-a.patch b/recipes-kernel/linux/linux-omap/wl1271/0004-wl1271-11n-Support-functionality-and-configuration-a.patch
deleted file mode 100644
index 17ed6e6..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0004-wl1271-11n-Support-functionality-and-configuration-a.patch
+++ /dev/null
@@ -1,249 +0,0 @@
-From 9685ab91494ae35d2cb7e0033c5ee1bf3cdf0c64 Mon Sep 17 00:00:00 2001
-From: Shahar Levi <shahar_levi at ti.com>
-Date: Wed, 13 Oct 2010 16:09:41 +0200
-Subject: [PATCH 04/15] wl1271: 11n Support, functionality and configuration ability
-
-Add 11n ability in scan, connection and using MCS rates.
-The configuration is temporary due to the code incomplete and
-still in testing process. That plans to be remove in the future.
-
-Signed-off-by: Shahar Levi <shahar_levi at ti.com>
-Reviewed-by: Luciano Coelho <luciano.coelho at nokia.com>
-Signed-off-by: Luciano Coelho <luciano.coelho at nokia.com>
----
- drivers/net/wireless/wl12xx/Kconfig       |   10 +++
- drivers/net/wireless/wl12xx/wl1271_main.c |   96 +++++++++++++++++++++++------
- drivers/net/wireless/wl12xx/wl1271_rx.c   |    6 ++
- drivers/net/wireless/wl12xx/wl1271_tx.c   |   11 +++
- 4 files changed, 105 insertions(+), 18 deletions(-)
-
-diff --git a/drivers/net/wireless/wl12xx/Kconfig b/drivers/net/wireless/wl12xx/Kconfig
-index b447559..1b3b7bd 100644
---- a/drivers/net/wireless/wl12xx/Kconfig
-+++ b/drivers/net/wireless/wl12xx/Kconfig
-@@ -18,6 +18,16 @@ config WL1271
- 	  If you choose to build a module, it'll be called wl1271. Say N if
- 	  unsure.
- 
-+config WL1271_HT
-+        bool "TI wl1271 802.11 HT support (EXPERIMENTAL)"
-+        depends on WL1271 && EXPERIMENTAL
-+        default n
-+        ---help---
-+          This will enable 802.11 HT support for TI wl1271 chipset.
-+
-+	  That configuration is temporary due to the code incomplete and
-+	  still in testing process.
-+
- config WL1271_SPI
- 	tristate "TI wl1271 SPI support"
- 	depends on WL1271 && SPI_MASTER
-diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
-index 785b73c..49ec0ef 100644
---- a/drivers/net/wireless/wl12xx/wl1271_main.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
-@@ -851,12 +851,32 @@ static int wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
- 	struct ieee80211_sta *sta = txinfo->control.sta;
- 	unsigned long flags;
- 
--	/* peek into the rates configured in the STA entry */
-+	/*
-+	 * peek into the rates configured in the STA entry.
-+	 * The rates set after connection stage, The first block only BG sets:
-+	 * the compare is for bit 0-16 of sta_rate_set. The second block add
-+	 * HT rates in case of HT supported.
-+	 */
- 	spin_lock_irqsave(&wl->wl_lock, flags);
--	if (sta && sta->supp_rates[conf->channel->band] != wl->sta_rate_set) {
-+	if (sta &&
-+	    (sta->supp_rates[conf->channel->band] !=
-+	    (wl->sta_rate_set & HW_BG_RATES_MASK))) {
- 		wl->sta_rate_set = sta->supp_rates[conf->channel->band];
- 		set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
- 	}
-+
-+#ifdef CONFIG_WL1271_HT
-+	if (sta &&
-+	    sta->ht_cap.ht_supported &&
-+	    ((wl->sta_rate_set >> HW_HT_RATES_OFFSET) !=
-+	      sta->ht_cap.mcs.rx_mask[0])) {
-+		/* Clean MCS bits before setting them */
-+		wl->sta_rate_set &= HW_BG_RATES_MASK;
-+		wl->sta_rate_set |=
-+			(sta->ht_cap.mcs.rx_mask[0] << HW_HT_RATES_OFFSET);
-+		set_bit(WL1271_FLAG_STA_RATES_CHANGED, &wl->flags);
-+	}
-+#endif
- 	spin_unlock_irqrestore(&wl->wl_lock, flags);
- 
- 	/* queue the packet */
-@@ -1709,6 +1729,7 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
- {
- 	enum wl1271_cmd_ps_mode mode;
- 	struct wl1271 *wl = hw->priv;
-+	struct ieee80211_sta *sta = ieee80211_find_sta(vif, bss_conf->bssid);
- 	bool do_join = false;
- 	bool set_assoc = false;
- 	int ret;
-@@ -1927,6 +1948,37 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
- 		}
- 	}
- 
-+	/*
-+	 * Takes care of: New association with HT enable,
-+	 *                HT information change in beacon.
-+	 */
-+	if (sta &&
-+	    (changed & BSS_CHANGED_HT) &&
-+	    (bss_conf->channel_type != NL80211_CHAN_NO_HT)) {
-+		ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, true);
-+		if (ret < 0) {
-+			wl1271_warning("Set ht cap true failed %d", ret);
-+			goto out_sleep;
-+		}
-+			ret = wl1271_acx_set_ht_information(wl,
-+				bss_conf->ht_operation_mode);
-+		if (ret < 0) {
-+			wl1271_warning("Set ht information failed %d", ret);
-+			goto out_sleep;
-+		}
-+	}
-+	/*
-+	 * Takes care of: New association without HT,
-+	 *                Disassociation.
-+	 */
-+	else if (sta && (changed & BSS_CHANGED_ASSOC)) {
-+		ret = wl1271_acx_set_ht_capabilities(wl, &sta->ht_cap, false);
-+		if (ret < 0) {
-+			wl1271_warning("Set ht cap false failed %d", ret);
-+			goto out_sleep;
-+		}
-+	}
-+
- 	if (changed & BSS_CHANGED_ARP_FILTER) {
- 		__be32 addr = bss_conf->arp_addr_list[0];
- 		WARN_ON(wl->bss_type != BSS_TYPE_STA_BSS);
-@@ -2107,14 +2159,14 @@ static struct ieee80211_channel wl1271_channels[] = {
- /* mapping to indexes for wl1271_rates */
- static const u8 wl1271_rate_to_idx_2ghz[] = {
- 	/* MCS rates are used only with 11n */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
-+	7,                            /* CONF_HW_RXTX_RATE_MCS7 */
-+	6,                            /* CONF_HW_RXTX_RATE_MCS6 */
-+	5,                            /* CONF_HW_RXTX_RATE_MCS5 */
-+	4,                            /* CONF_HW_RXTX_RATE_MCS4 */
-+	3,                            /* CONF_HW_RXTX_RATE_MCS3 */
-+	2,                            /* CONF_HW_RXTX_RATE_MCS2 */
-+	1,                            /* CONF_HW_RXTX_RATE_MCS1 */
-+	0,                            /* CONF_HW_RXTX_RATE_MCS0 */
- 
- 	11,                            /* CONF_HW_RXTX_RATE_54   */
- 	10,                            /* CONF_HW_RXTX_RATE_48   */
-@@ -2137,6 +2189,7 @@ static const u8 wl1271_rate_to_idx_2ghz[] = {
- /* 11n STA capabilities */
- #define HW_RX_HIGHEST_RATE	72
- 
-+#ifdef CONFIG_WL1271_HT
- #define WL1271_HT_CAP { \
- 	.cap = IEEE80211_HT_CAP_GRN_FLD | IEEE80211_HT_CAP_SGI_20, \
- 	.ht_supported = true, \
-@@ -2148,6 +2201,11 @@ static const u8 wl1271_rate_to_idx_2ghz[] = {
- 		.tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
- 		}, \
- }
-+#else
-+#define WL1271_HT_CAP { \
-+	.ht_supported = false, \
-+}
-+#endif
- 
- /* can't be const, mac80211 writes to this */
- static struct ieee80211_supported_band wl1271_band_2ghz = {
-@@ -2155,6 +2213,7 @@ static struct ieee80211_supported_band wl1271_band_2ghz = {
- 	.n_channels = ARRAY_SIZE(wl1271_channels),
- 	.bitrates = wl1271_rates,
- 	.n_bitrates = ARRAY_SIZE(wl1271_rates),
-+	.ht_cap	= WL1271_HT_CAP,
- };
- 
- /* 5 GHz data rates for WL1273 */
-@@ -2237,14 +2296,14 @@ static struct ieee80211_channel wl1271_channels_5ghz[] = {
- /* mapping to indexes for wl1271_rates_5ghz */
- static const u8 wl1271_rate_to_idx_5ghz[] = {
- 	/* MCS rates are used only with 11n */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS7 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS6 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS5 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS4 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS3 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS2 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS1 */
--	CONF_HW_RXTX_RATE_UNSUPPORTED, /* CONF_HW_RXTX_RATE_MCS0 */
-+	7,                            /* CONF_HW_RXTX_RATE_MCS7 */
-+	6,                            /* CONF_HW_RXTX_RATE_MCS6 */
-+	5,                            /* CONF_HW_RXTX_RATE_MCS5 */
-+	4,                            /* CONF_HW_RXTX_RATE_MCS4 */
-+	3,                            /* CONF_HW_RXTX_RATE_MCS3 */
-+	2,                            /* CONF_HW_RXTX_RATE_MCS2 */
-+	1,                            /* CONF_HW_RXTX_RATE_MCS1 */
-+	0,                            /* CONF_HW_RXTX_RATE_MCS0 */
- 
- 	7,                             /* CONF_HW_RXTX_RATE_54   */
- 	6,                             /* CONF_HW_RXTX_RATE_48   */
-@@ -2269,6 +2328,7 @@ static struct ieee80211_supported_band wl1271_band_5ghz = {
- 	.n_channels = ARRAY_SIZE(wl1271_channels_5ghz),
- 	.bitrates = wl1271_rates_5ghz,
- 	.n_bitrates = ARRAY_SIZE(wl1271_rates_5ghz),
-+	.ht_cap	= WL1271_HT_CAP,
- };
- 
- static const u8 *wl1271_band_rate_to_idx[] = {
-diff --git a/drivers/net/wireless/wl12xx/wl1271_rx.c b/drivers/net/wireless/wl12xx/wl1271_rx.c
-index bea133b..ac13f7d 100644
---- a/drivers/net/wireless/wl12xx/wl1271_rx.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_rx.c
-@@ -53,6 +53,12 @@ static void wl1271_rx_status(struct wl1271 *wl,
- 	status->band = wl->band;
- 	status->rate_idx = wl1271_rate_to_idx(wl, desc->rate);
- 
-+#ifdef CONFIG_WL1271_HT
-+	/* 11n support */
-+	if (desc->rate <= CONF_HW_RXTX_RATE_MCS0)
-+		status->flag |= RX_FLAG_HT;
-+#endif
-+
- 	status->signal = desc->rssi;
- 
- 	/*
-diff --git a/drivers/net/wireless/wl12xx/wl1271_tx.c b/drivers/net/wireless/wl12xx/wl1271_tx.c
-index e3dc13c..6a87633 100644
---- a/drivers/net/wireless/wl12xx/wl1271_tx.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_tx.c
-@@ -201,6 +201,17 @@ u32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set)
- 		rate_set >>= 1;
- 	}
- 
-+#ifdef CONFIG_WL1271_HT
-+	/* MCS rates indication are on bits 16 - 23 */
-+	rate_set >>= HW_HT_RATES_OFFSET - band->n_bitrates;
-+
-+	for (bit = 0; bit < 8; bit++) {
-+		if (rate_set & 0x1)
-+			enabled_rates |= (CONF_HW_BIT_RATE_MCS_0 << bit);
-+		rate_set >>= 1;
-+	}
-+#endif
-+
- 	return enabled_rates;
- }
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0005-wl1271-set-wl-vif-only-if-add_interface-succeeded.patch b/recipes-kernel/linux/linux-omap/wl1271/0005-wl1271-set-wl-vif-only-if-add_interface-succeeded.patch
deleted file mode 100644
index 3707b7c..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0005-wl1271-set-wl-vif-only-if-add_interface-succeeded.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From dd812452fb91de492a8fd8d838d16cfc67cbfcf4 Mon Sep 17 00:00:00 2001
-From: Eliad Peller <eliad at wizery.com>
-Date: Thu, 28 Oct 2010 21:46:43 +0200
-Subject: [PATCH 05/15] wl1271: set wl->vif only if add_interface succeeded.
-
-set wl->vif to the newly created interface only after the firmware booted
-successfully. on the way - make the function flow more clear.
-
-Signed-off-by: Eliad Peller <eliad at wizery.com>
-Reviewed-by: Luciano Coelho <luciano.coelho at nokia.com>
-Signed-off-by: Luciano Coelho <luciano.coelho at nokia.com>
----
- drivers/net/wireless/wl12xx/wl1271_main.c |   33 +++++++++++++++++-----------
- 1 files changed, 20 insertions(+), 13 deletions(-)
-
-diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
-index 49ec0ef..78273c9 100644
---- a/drivers/net/wireless/wl12xx/wl1271_main.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
-@@ -939,18 +939,19 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
- 	struct wiphy *wiphy = hw->wiphy;
- 	int retries = WL1271_BOOT_RETRIES;
- 	int ret = 0;
-+	bool booted = false;
- 
- 	wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM",
- 		     vif->type, vif->addr);
- 
- 	mutex_lock(&wl->mutex);
- 	if (wl->vif) {
-+		wl1271_debug(DEBUG_MAC80211,
-+			     "multiple vifs are not supported yet");
- 		ret = -EBUSY;
- 		goto out;
- 	}
- 
--	wl->vif = vif;
--
- 	switch (vif->type) {
- 	case NL80211_IFTYPE_STATION:
- 		wl->bss_type = BSS_TYPE_STA_BSS;
-@@ -988,15 +989,8 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw,
- 		if (ret < 0)
- 			goto irq_disable;
- 
--		wl->state = WL1271_STATE_ON;
--		wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
--
--		/* update hw/fw version info in wiphy struct */
--		wiphy->hw_version = wl->chip.id;
--		strncpy(wiphy->fw_version, wl->chip.fw_ver,
--			sizeof(wiphy->fw_version));
--
--		goto out;
-+		booted = true;
-+		break;
- 
- irq_disable:
- 		wl1271_disable_interrupts(wl);
-@@ -1014,8 +1008,21 @@ power_off:
- 		wl1271_power_off(wl);
- 	}
- 
--	wl1271_error("firmware boot failed despite %d retries",
--		     WL1271_BOOT_RETRIES);
-+	if (!booted) {
-+		wl1271_error("firmware boot failed despite %d retries",
-+			     WL1271_BOOT_RETRIES);
-+		goto out;
-+	}
-+
-+	wl->vif = vif;
-+	wl->state = WL1271_STATE_ON;
-+	wl1271_info("firmware booted (%s)", wl->chip.fw_ver);
-+
-+	/* update hw/fw version info in wiphy struct */
-+	wiphy->hw_version = wl->chip.id;
-+	strncpy(wiphy->fw_version, wl->chip.fw_ver,
-+		sizeof(wiphy->fw_version));
-+
- out:
- 	mutex_unlock(&wl->mutex);
- 
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0006-wl12xx-Unset-bssid-filter-ssid-and-bssid-from-firmwa.patch b/recipes-kernel/linux/linux-omap/wl1271/0006-wl12xx-Unset-bssid-filter-ssid-and-bssid-from-firmwa.patch
deleted file mode 100644
index 5b83bc9..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0006-wl12xx-Unset-bssid-filter-ssid-and-bssid-from-firmwa.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 54b32b60bed66ac4ecf00279466496d9d4e80afa Mon Sep 17 00:00:00 2001
-From: Juuso Oikarinen <juuso.oikarinen at nokia.com>
-Date: Mon, 22 Nov 2010 12:59:08 +0200
-Subject: [PATCH 06/15] wl12xx: Unset bssid filter, ssid and bssid from firmware on disassoc
-
-On the disassociation event from the mac80211, the wl12xx driver does not
-clear the chipset configuration related to the AP - i.e. it does not perform
-a DISCONNECT and then a JOIN with zero SSID and dummy BSSID. Also, it does not
-unset the BSSID filter.
-
-Often this is not a problem, as the above is performed upon entering idle
-state. But if a scenario arises where a new association is attempted without
-cycling through idle state, the new association will fail.
-
-Fix this by resetting the firmware state on disassociation.
-
-Signed-off-by: Juuso Oikarinen <juuso.oikarinen at nokia.com>
-Reviewed-by: Luciano Coelho <luciano.coelho at nokia.com>
-Signed-off-by: Luciano Coelho <luciano.coelho at nokia.com>
----
- drivers/net/wireless/wl12xx/wl1271_main.c |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c
-index 78273c9..db97648 100644
---- a/drivers/net/wireless/wl12xx/wl1271_main.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
-@@ -1919,9 +1919,12 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
- 
- 			/* Disable the keep-alive feature */
- 			ret = wl1271_acx_keep_alive_mode(wl, false);
--
- 			if (ret < 0)
- 				goto out_sleep;
-+
-+			/* restore the bssid filter and go to dummy bssid */
-+			wl1271_unjoin(wl);
-+			wl1271_dummy_join(wl);
- 		}
- 
- 	}
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch b/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch
deleted file mode 100644
index d104a72..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch
+++ /dev/null
@@ -1,268 +0,0 @@
-From f568ec9bb6ccd1e17278dcab3fbc810cf2e071ac Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:21 +0000
-Subject: [PATCH 07/15] drivers:media:radio: wl128x: FM Driver common header file
-
-These are common headers used in FM submodules (FM V4L2,
-FM common, FM Rx,and FM TX).
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/wl128x/fmdrv.h |  244 ++++++++++++++++++++++++++++++++++++
- 1 files changed, 244 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/radio/wl128x/fmdrv.h
-
-diff --git a/drivers/media/radio/wl128x/fmdrv.h b/drivers/media/radio/wl128x/fmdrv.h
-new file mode 100644
-index 0000000..392b62d
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv.h
-@@ -0,0 +1,244 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *
-+ *  Common header for all FM driver sub-modules.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#ifndef _FM_DRV_H
-+#define _FM_DRV_H
-+
-+#include <linux/skbuff.h>
-+#include <linux/interrupt.h>
-+#include <sound/core.h>
-+#include <sound/initval.h>
-+#include <linux/timer.h>
-+#include <linux/version.h>
-+#include <media/v4l2-ioctl.h>
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-ctrls.h>
-+
-+#define FM_DRV_VERSION            "0.09"
-+/* Should match with FM_DRV_VERSION */
-+#define FM_DRV_RADIO_VERSION      KERNEL_VERSION(0, 0, 1)
-+#define FM_DRV_NAME               "ti_fmdrv"
-+#define FM_DRV_CARD_SHORT_NAME    "TI FM Radio"
-+#define FM_DRV_CARD_LONG_NAME     "Texas Instruments FM Radio"
-+
-+/* Flag info */
-+#define FM_INTTASK_RUNNING            0
-+#define FM_INTTASK_SCHEDULE_PENDING   1
-+#define FM_FW_DW_INPROGRESS     2
-+#define FM_CORE_READY                 3
-+#define FM_CORE_TRANSPORT_READY       4
-+#define FM_AF_SWITCH_INPROGRESS	      5
-+#define FM_CORE_TX_XMITING	      6
-+
-+#define FM_TUNE_COMPLETE	      0x1
-+#define FM_BAND_LIMIT		      0x2
-+
-+#define FM_DRV_TX_TIMEOUT      (5*HZ)	/* 5 seconds */
-+#define FM_DRV_RX_SEEK_TIMEOUT (20*HZ)	/* 20 seconds */
-+
-+#define NO_OF_ENTRIES_IN_ARRAY(array) (sizeof(array) / sizeof(array[0]))
-+
-+#define fmerr(format, ...) \
-+	printk(KERN_ERR "fmdrv: " format, ## __VA_ARGS__)
-+#define fmwarn(format, ...) \
-+	printk(KERN_WARNING "fmdrv: " format, ##__VA_ARGS__)
-+#ifdef DEBUG
-+#define fmdbg(format, ...) \
-+	printk(KERN_DEBUG "fmdrv: " format, ## __VA_ARGS__)
-+#else /* DEBUG */
-+#define fmdbg(format, ...)
-+#endif
-+enum {
-+	FM_MODE_OFF,
-+	FM_MODE_TX,
-+	FM_MODE_RX,
-+	FM_MODE_ENTRY_MAX
-+};
-+
-+#define FM_RX_RDS_INFO_FIELD_MAX	8	/* 4 Group * 2 Bytes */
-+
-+/* RX RDS data format */
-+struct fm_rdsdata_format {
-+	union {
-+		struct {
-+			u8 buff[FM_RX_RDS_INFO_FIELD_MAX];
-+		} groupdatabuff;
-+		struct {
-+			u16 pidata;
-+			u8 blk_b[2];
-+			u8 blk_c[2];
-+			u8 blk_d[2];
-+		} groupgeneral;
-+		struct {
-+			u16 pidata;
-+			u8 blk_b[2];
-+			u8 af[2];
-+			u8 ps[2];
-+		} group0A;
-+		struct {
-+			u16 pi[2];
-+			u8 blk_b[2];
-+			u8 ps[2];
-+		} group0B;
-+	} data;
-+};
-+
-+/* FM region (Europe/US, Japan) info */
-+struct region_info {
-+	u32 chanl_space;
-+	u32 bot_freq;
-+	u32 top_freq;
-+	u8 fm_band;
-+};
-+struct fmdev;
-+typedef void (*int_handler_prototype) (struct fmdev *);
-+
-+/* FM Interrupt processing related info */
-+struct fm_irq {
-+	u8 stage;
-+	u16 flag;	/* FM interrupt flag */
-+	u16 mask;	/* FM interrupt mask */
-+	/* Interrupt process timeout handler */
-+	struct timer_list timer;
-+	u8 retry;
-+	int_handler_prototype *handlers;
-+};
-+
-+/* RDS info */
-+struct fm_rds {
-+	u8 flag;	/* RX RDS on/off status */
-+	u8 last_blk_idx;	/* Last received RDS block */
-+
-+	/* RDS buffer */
-+	wait_queue_head_t read_queue;
-+	u32 buf_size;	/* Size is always multiple of 3 */
-+	u32 wr_idx;
-+	u32 rd_idx;
-+	u8 *buff;
-+};
-+
-+#define FM_RDS_MAX_AF_LIST		25
-+
-+/*
-+ * Current RX channel Alternate Frequency cache.
-+ * This info is used to switch to other freq (AF)
-+ * when current channel signal strengh is below RSSI threshold.
-+ */
-+struct tuned_station_info {
-+	u16 picode;
-+	u32 af_cache[FM_RDS_MAX_AF_LIST];
-+	u8 afcache_size;
-+	u8 af_list_max;
-+};
-+
-+/* FM RX mode info */
-+struct fm_rx {
-+	struct region_info region;	/* Current selected band */
-+	u32 freq;	/* Current RX frquency */
-+	u8 mute_mode;	/* Current mute mode */
-+	u8 deemphasis_mode; /* Current deemphasis mode */
-+	/* RF dependent soft mute mode */
-+	u8 rf_depend_mute;
-+	u16 volume;	/* Current volume level */
-+	u16 rssi_threshold;	/* Current RSSI threshold level */
-+	/* Holds the index of the current AF jump */
-+	u8 afjump_idx;
-+	/* Will hold the frequency before the jump */
-+	u32 freq_before_jump;
-+	u8 rds_mode;	/* RDS operation mode (RDS/RDBS) */
-+	u8 af_mode;	/* Alternate frequency on/off */
-+	struct tuned_station_info stat_info;
-+	struct fm_rds rds;
-+};
-+
-+#define FMTX_RDS_TXT_STR_SIZE	25
-+/*
-+ * FM TX RDS data
-+ *
-+ * @ text_type: is the text following PS or RT
-+ * @ text: radio text string which could either be PS or RT
-+ * @ af_freq: alternate frequency for Tx
-+ * TODO: to be declared in application
-+ */
-+struct tx_rds {
-+	u8 text_type;
-+	u8 text[FMTX_RDS_TXT_STR_SIZE];
-+	u8 flag;
-+	u32 af_freq;
-+};
-+/*
-+ * FM TX global data
-+ *
-+ * @ pwr_lvl: Power Level of the Transmission from mixer control
-+ * @ xmit_state: Transmission state = Updated locally upon Start/Stop
-+ * @ audio_io: i2S/Analog
-+ * @ tx_frq: Transmission frequency
-+ */
-+struct fmtx_data {
-+	u8 pwr_lvl;
-+	u8 xmit_state;
-+	u8 audio_io;
-+	u8 region;
-+	u16 aud_mode;
-+	u32 preemph;
-+	u32 tx_frq;
-+	struct tx_rds rds;
-+};
-+
-+/* FM driver operation structure */
-+struct fmdev {
-+	struct video_device *radio_dev;	/* V4L2 video device pointer */
-+	struct snd_card *card;	/* Card which holds FM mixer controls */
-+	u16 asci_id;
-+	spinlock_t rds_buff_lock; /* To protect access to RDS buffer */
-+	spinlock_t resp_skb_lock; /* To protect access to received SKB */
-+
-+	long flag;		/*  FM driver state machine info */
-+	u8 streg_cbdata; /* status of ST registration */
-+
-+	struct sk_buff_head rx_q;	/* RX queue */
-+	struct tasklet_struct rx_task;	/* RX Tasklet */
-+
-+	struct sk_buff_head tx_q;	/* TX queue */
-+	struct tasklet_struct tx_task;	/* TX Tasklet */
-+	unsigned long last_tx_jiffies;	/* Timestamp of last pkt sent */
-+	atomic_t tx_cnt;	/* Number of packets can send at a time */
-+
-+	struct sk_buff *resp_skb;	/* Response from the chip */
-+	/* Main task completion handler */
-+	struct completion maintask_comp;
-+	/* Opcode of last command sent to the chip */
-+	u8 pre_op;
-+	/* Handler used for wakeup when response packet is received */
-+	struct completion *resp_comp;
-+	struct fm_irq irq_info;
-+	u8 curr_fmmode; /* Current FM chip mode (TX, RX, OFF) */
-+	struct fm_rx rx;	/* FM receiver info */
-+	struct fmtx_data tx_data;
-+
-+	/* V4L2 ctrl framwork handler*/
-+	struct v4l2_ctrl_handler ctrl_handler;
-+
-+	/* For core assisted locking */
-+	struct mutex mutex;
-+};
-+#endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0008-drivers-media-radio-wl128x-FM-Driver-V4L2-sources.patch b/recipes-kernel/linux/linux-omap/wl1271/0008-drivers-media-radio-wl128x-FM-Driver-V4L2-sources.patch
deleted file mode 100644
index c3eae97..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0008-drivers-media-radio-wl128x-FM-Driver-V4L2-sources.patch
+++ /dev/null
@@ -1,645 +0,0 @@
-From d532e33a286ec2275b441c05675de52cd5b069d2 Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:22 +0000
-Subject: [PATCH 08/15] drivers:media:radio: wl128x: FM Driver V4L2 sources
-
-This module interfaces V4L2 subsystem and FM common module.
-It registers itself with V4L2 as Radio module.
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/wl128x/fmdrv_v4l2.c |  580 +++++++++++++++++++++++++++++++
- drivers/media/radio/wl128x/fmdrv_v4l2.h |   33 ++
- 2 files changed, 613 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/radio/wl128x/fmdrv_v4l2.c
- create mode 100644 drivers/media/radio/wl128x/fmdrv_v4l2.h
-
-diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.c b/drivers/media/radio/wl128x/fmdrv_v4l2.c
-new file mode 100644
-index 0000000..d50e5ac
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_v4l2.c
-@@ -0,0 +1,580 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *  This file provides interfaces to V4L2 subsystem.
-+ *
-+ *  This module registers with V4L2 subsystem as Radio
-+ *  data system interface (/dev/radio). During the registration,
-+ *  it will expose two set of function pointers.
-+ *
-+ *    1) File operation related API (open, close, read, write, poll...etc).
-+ *    2) Set of V4L2 IOCTL complaint API.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *  Author: Raja Mani <raja_mani at ti.com>
-+ *  Author: Manjunatha Halli <manjunatha_halli at ti.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#include "fmdrv.h"
-+#include "fmdrv_v4l2.h"
-+#include "fmdrv_common.h"
-+#include "fmdrv_rx.h"
-+#include "fmdrv_tx.h"
-+
-+static struct video_device *gradio_dev;
-+static u8 radio_disconnected;
-+
-+/* -- V4L2 RADIO (/dev/radioX) device file operation interfaces --- */
-+
-+/* Read RX RDS data */
-+static ssize_t fm_v4l2_fops_read(struct file *file, char __user * buf,
-+					size_t count, loff_t *ppos)
-+{
-+	u8 rds_mode;
-+	int ret;
-+	struct fmdev *fmdev;
-+
-+	fmdev = video_drvdata(file);
-+
-+	if (!radio_disconnected) {
-+		fmerr("FM device is already disconnected\n");
-+		return -EIO;
-+	}
-+
-+	/* Turn on RDS mode , if it is disabled */
-+	ret = fm_rx_get_rds_mode(fmdev, &rds_mode);
-+	if (ret < 0) {
-+		fmerr("Unable to read current rds mode\n");
-+		return ret;
-+	}
-+
-+	if (rds_mode == FM_RDS_DISABLE) {
-+		ret = fmc_set_rds_mode(fmdev, FM_RDS_ENABLE);
-+		if (ret < 0) {
-+			fmerr("Failed to enable rds mode\n");
-+			return ret;
-+		}
-+	}
-+
-+	/* Copy RDS data from internal buffer to user buffer */
-+	return fmc_transfer_rds_from_internal_buff(fmdev, file, buf, count);
-+}
-+
-+/* Write TX RDS data */
-+static ssize_t fm_v4l2_fops_write(struct file *file, const char __user * buf,
-+		size_t count, loff_t *ppos)
-+{
-+	struct tx_rds rds;
-+	int ret;
-+	struct fmdev *fmdev;
-+
-+	ret = copy_from_user(&rds, buf, sizeof(rds));
-+	fmdbg("(%d)type: %d, text %s, af %d\n",
-+		   ret, rds.text_type, rds.text, rds.af_freq);
-+
-+	fmdev = video_drvdata(file);
-+	fm_tx_set_radio_text(fmdev, rds.text, rds.text_type);
-+	fm_tx_set_af(fmdev, rds.af_freq);
-+
-+	return 0;
-+}
-+
-+static u32 fm_v4l2_fops_poll(struct file *file, struct poll_table_struct *pts)
-+{
-+	int ret;
-+	struct fmdev *fmdev;
-+
-+	fmdev = video_drvdata(file);
-+	ret = fmc_is_rds_data_available(fmdev, file, pts);
-+	if (ret < 0)
-+		return POLLIN | POLLRDNORM;
-+
-+	return 0;
-+}
-+
-+/*
-+ * Handle open request for "/dev/radioX" device.
-+ * Start with FM RX mode as default.
-+ */
-+static int fm_v4l2_fops_open(struct file *file)
-+{
-+	int ret;
-+	struct fmdev *fmdev = NULL;
-+
-+	/* Don't allow multiple open */
-+	if (radio_disconnected) {
-+		fmerr("FM device is already opened\n");
-+		return -EBUSY;
-+	}
-+
-+	fmdev = video_drvdata(file);
-+
-+	ret = fmc_prepare(fmdev);
-+	if (ret < 0) {
-+		fmerr("Unable to prepare FM CORE\n");
-+		return ret;
-+	}
-+
-+	fmdbg("Load FM RX firmware..\n");
-+
-+	ret = fmc_set_mode(fmdev, FM_MODE_RX);
-+	if (ret < 0) {
-+		fmerr("Unable to load FM RX firmware\n");
-+		return ret;
-+	}
-+	radio_disconnected = 1;
-+
-+	return ret;
-+}
-+
-+static int fm_v4l2_fops_release(struct file *file)
-+{
-+	int ret;
-+	struct fmdev *fmdev;
-+
-+	fmdev = video_drvdata(file);
-+	if (!radio_disconnected) {
-+		fmdbg("FM device is already closed\n");
-+		return 0;
-+	}
-+
-+	ret = fmc_set_mode(fmdev, FM_MODE_OFF);
-+	if (ret < 0) {
-+		fmerr("Unable to turn off the chip\n");
-+		return ret;
-+	}
-+
-+	ret = fmc_release(fmdev);
-+	if (ret < 0) {
-+		fmerr("FM CORE release failed\n");
-+		return ret;
-+	}
-+	radio_disconnected = 0;
-+
-+	return ret;
-+}
-+
-+/* V4L2 RADIO (/dev/radioX) device IOCTL interfaces */
-+static int fm_v4l2_vidioc_querycap(struct file *file, void *priv,
-+		struct v4l2_capability *capability)
-+{
-+	strlcpy(capability->driver, FM_DRV_NAME, sizeof(capability->driver));
-+	strlcpy(capability->card, FM_DRV_CARD_SHORT_NAME,
-+			sizeof(capability->card));
-+	sprintf(capability->bus_info, "UART");
-+	capability->version = FM_DRV_RADIO_VERSION;
-+	capability->capabilities = V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
-+		V4L2_CAP_RADIO | V4L2_CAP_MODULATOR |
-+		V4L2_CAP_AUDIO | V4L2_CAP_READWRITE |
-+		V4L2_CAP_RDS_CAPTURE;
-+
-+	return 0;
-+}
-+
-+static int fm_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
-+{
-+	struct fmdev *fmdev = container_of(ctrl->handler,
-+			struct fmdev, ctrl_handler);
-+
-+	switch (ctrl->id) {
-+	case  V4L2_CID_TUNE_ANTENNA_CAPACITOR:
-+		ctrl->val = fm_tx_get_tune_cap_val(fmdev);
-+		break;
-+	default:
-+		fmwarn("%s: Unknown IOCTL: %d\n", __func__, ctrl->id);
-+		break;
-+	}
-+
-+	return 0;
-+}
-+
-+static int fm_v4l2_s_ctrl(struct v4l2_ctrl *ctrl)
-+{
-+	struct fmdev *fmdev = container_of(ctrl->handler,
-+			struct fmdev, ctrl_handler);
-+
-+	switch (ctrl->id) {
-+	case V4L2_CID_AUDIO_VOLUME:	/* set volume */
-+		return fm_rx_set_volume(fmdev, (u16)ctrl->val);
-+
-+	case V4L2_CID_AUDIO_MUTE:	/* set mute */
-+		return fmc_set_mute_mode(fmdev, (u8)ctrl->val);
-+
-+	case V4L2_CID_TUNE_POWER_LEVEL:
-+		/* set TX power level - ext control */
-+		return fm_tx_set_pwr_lvl(fmdev, (u8)ctrl->val);
-+
-+	case V4L2_CID_TUNE_PREEMPHASIS:
-+		return fm_tx_set_preemph_filter(fmdev, (u8) ctrl->val);
-+
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+static int fm_v4l2_vidioc_g_audio(struct file *file, void *priv,
-+		struct v4l2_audio *audio)
-+{
-+	memset(audio, 0, sizeof(*audio));
-+	strcpy(audio->name, "Radio");
-+	audio->capability = V4L2_AUDCAP_STEREO;
-+
-+	return 0;
-+}
-+
-+static int fm_v4l2_vidioc_s_audio(struct file *file, void *priv,
-+		struct v4l2_audio *audio)
-+{
-+	if (audio->index != 0)
-+		return -EINVAL;
-+
-+	return 0;
-+}
-+
-+/* Get tuner attributes. If current mode is NOT RX, return error */
-+static int fm_v4l2_vidioc_g_tuner(struct file *file, void *priv,
-+		struct v4l2_tuner *tuner)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);
-+	u32 bottom_freq;
-+	u32 top_freq;
-+	u16 stereo_mono_mode;
-+	u16 rssilvl;
-+	int ret;
-+
-+	if (tuner->index != 0)
-+		return -EINVAL;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	ret = fm_rx_get_band_freq_range(fmdev, &bottom_freq, &top_freq);
-+	if (ret != 0)
-+		return ret;
-+
-+	ret = fm_rx_get_stereo_mono(fmdev, &stereo_mono_mode);
-+	if (ret != 0)
-+		return ret;
-+
-+	ret = fm_rx_get_rssi_level(fmdev, &rssilvl);
-+	if (ret != 0)
-+		return ret;
-+
-+	strcpy(tuner->name, "FM");
-+	tuner->type = V4L2_TUNER_RADIO;
-+	/* Store rangelow and rangehigh freq in unit of 62.5 Hz */
-+	tuner->rangelow = bottom_freq * 16;
-+	tuner->rangehigh = top_freq * 16;
-+	tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO |
-+	((fmdev->rx.rds.flag == FM_RDS_ENABLE) ? V4L2_TUNER_SUB_RDS : 0);
-+	tuner->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS |
-+			    V4L2_TUNER_CAP_LOW;
-+	tuner->audmode = (stereo_mono_mode ?
-+			  V4L2_TUNER_MODE_MONO : V4L2_TUNER_MODE_STEREO);
-+
-+	/*
-+	 * Actual rssi value lies in between -128 to +127.
-+	 * Convert this range from 0 to 255 by adding +128
-+	 */
-+	rssilvl += 128;
-+
-+	/*
-+	 * Return signal strength value should be within 0 to 65535.
-+	 * Find out correct signal radio by multiplying (65535/255) = 257
-+	 */
-+	tuner->signal = rssilvl * 257;
-+	tuner->afc = 0;
-+
-+	return ret;
-+}
-+
-+/*
-+ * Set tuner attributes. If current mode is NOT RX, set to RX.
-+ * Currently, we set only audio mode (mono/stereo) and RDS state (on/off).
-+ * Should we set other tuner attributes, too?
-+ */
-+static int fm_v4l2_vidioc_s_tuner(struct file *file, void *priv,
-+		struct v4l2_tuner *tuner)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);
-+	u16 aud_mode;
-+	u8 rds_mode;
-+	int ret;
-+
-+	if (tuner->index != 0)
-+		return -EINVAL;
-+
-+	aud_mode = (tuner->audmode == V4L2_TUNER_MODE_STEREO) ?
-+			FM_STEREO_MODE : FM_MONO_MODE;
-+	rds_mode = (tuner->rxsubchans & V4L2_TUNER_SUB_RDS) ?
-+			FM_RDS_ENABLE : FM_RDS_DISABLE;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX) {
-+		ret = fmc_set_mode(fmdev, FM_MODE_RX);
-+		if (ret < 0) {
-+			fmerr("Failed to set RX mode\n");
-+			return ret;
-+		}
-+	}
-+
-+	ret = fmc_set_stereo_mono(fmdev, aud_mode);
-+	if (ret < 0) {
-+		fmerr("Failed to set RX stereo/mono mode\n");
-+		return ret;
-+	}
-+
-+	ret = fmc_set_rds_mode(fmdev, rds_mode);
-+	if (ret < 0)
-+		fmerr("Failed to set RX RDS mode\n");
-+
-+	return ret;
-+}
-+
-+/* Get tuner or modulator radio frequency */
-+static int fm_v4l2_vidioc_g_freq(struct file *file, void *priv,
-+		struct v4l2_frequency *freq)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);
-+	int ret;
-+
-+	ret = fmc_get_freq(fmdev, &freq->frequency);
-+	if (ret < 0) {
-+		fmerr("Failed to get frequency\n");
-+		return ret;
-+	}
-+
-+	/* Frequency unit of 62.5 Hz*/
-+	freq->frequency = (u32) freq->frequency * 16;
-+
-+	return 0;
-+}
-+
-+/* Set tuner or modulator radio frequency */
-+static int fm_v4l2_vidioc_s_freq(struct file *file, void *priv,
-+		struct v4l2_frequency *freq)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);
-+
-+	/*
-+	 * As V4L2_TUNER_CAP_LOW is set 1 user sends the frequency
-+	 * in units of 62.5 Hz.
-+	 */
-+	freq->frequency = (u32)(freq->frequency / 16);
-+
-+	return fmc_set_freq(fmdev, freq->frequency);
-+}
-+
-+/* Set hardware frequency seek. If current mode is NOT RX, set it RX. */
-+static int fm_v4l2_vidioc_s_hw_freq_seek(struct file *file, void *priv,
-+		struct v4l2_hw_freq_seek *seek)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);
-+	int ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX) {
-+		ret = fmc_set_mode(fmdev, FM_MODE_RX);
-+		if (ret != 0) {
-+			fmerr("Failed to set RX mode\n");
-+			return ret;
-+		}
-+	}
-+
-+	ret = fm_rx_seek(fmdev, seek->seek_upward, seek->wrap_around,
-+			seek->spacing);
-+	if (ret < 0)
-+		fmerr("RX seek failed - %d\n", ret);
-+
-+	return ret;
-+}
-+/* Get modulator attributes. If mode is not TX, return no attributes. */
-+static int fm_v4l2_vidioc_g_modulator(struct file *file, void *priv,
-+		struct v4l2_modulator *mod)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);;
-+
-+	if (mod->index != 0)
-+		return -EINVAL;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX)
-+		return -EPERM;
-+
-+	mod->txsubchans = ((fmdev->tx_data.aud_mode == FM_STEREO_MODE) ?
-+				V4L2_TUNER_SUB_STEREO : V4L2_TUNER_SUB_MONO) |
-+				((fmdev->tx_data.rds.flag == FM_RDS_ENABLE) ?
-+				V4L2_TUNER_SUB_RDS : 0);
-+
-+	mod->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS |
-+				V4L2_TUNER_CAP_LOW;
-+
-+	return 0;
-+}
-+
-+/* Set modulator attributes. If mode is not TX, set to TX. */
-+static int fm_v4l2_vidioc_s_modulator(struct file *file, void *priv,
-+		struct v4l2_modulator *mod)
-+{
-+	struct fmdev *fmdev = video_drvdata(file);
-+	u8 rds_mode;
-+	u16 aud_mode;
-+	int ret;
-+
-+	if (mod->index != 0)
-+		return -EINVAL;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX) {
-+		ret = fmc_set_mode(fmdev, FM_MODE_TX);
-+		if (ret != 0) {
-+			fmerr("Failed to set TX mode\n");
-+			return ret;
-+		}
-+	}
-+
-+	aud_mode = (mod->txsubchans & V4L2_TUNER_SUB_STEREO) ?
-+			FM_STEREO_MODE : FM_MONO_MODE;
-+	rds_mode = (mod->txsubchans & V4L2_TUNER_SUB_RDS) ?
-+			FM_RDS_ENABLE : FM_RDS_DISABLE;
-+	ret = fm_tx_set_stereo_mono(fmdev, aud_mode);
-+	if (ret < 0) {
-+		fmerr("Failed to set mono/stereo mode for TX\n");
-+		return ret;
-+	}
-+	ret = fm_tx_set_rds_mode(fmdev, rds_mode);
-+	if (ret < 0)
-+		fmerr("Failed to set rds mode for TX\n");
-+
-+	return ret;
-+}
-+
-+static const struct v4l2_file_operations fm_drv_fops = {
-+	.owner = THIS_MODULE,
-+	.read = fm_v4l2_fops_read,
-+	.write = fm_v4l2_fops_write,
-+	.poll = fm_v4l2_fops_poll,
-+	.unlocked_ioctl = video_ioctl2,
-+	.open = fm_v4l2_fops_open,
-+	.release = fm_v4l2_fops_release,
-+};
-+
-+static const struct v4l2_ctrl_ops fm_ctrl_ops = {
-+	.s_ctrl = fm_v4l2_s_ctrl,
-+	.g_volatile_ctrl = fm_g_volatile_ctrl,
-+};
-+static const struct v4l2_ioctl_ops fm_drv_ioctl_ops = {
-+	.vidioc_querycap = fm_v4l2_vidioc_querycap,
-+	.vidioc_g_audio = fm_v4l2_vidioc_g_audio,
-+	.vidioc_s_audio = fm_v4l2_vidioc_s_audio,
-+	.vidioc_g_tuner = fm_v4l2_vidioc_g_tuner,
-+	.vidioc_s_tuner = fm_v4l2_vidioc_s_tuner,
-+	.vidioc_g_frequency = fm_v4l2_vidioc_g_freq,
-+	.vidioc_s_frequency = fm_v4l2_vidioc_s_freq,
-+	.vidioc_s_hw_freq_seek = fm_v4l2_vidioc_s_hw_freq_seek,
-+	.vidioc_g_modulator = fm_v4l2_vidioc_g_modulator,
-+	.vidioc_s_modulator = fm_v4l2_vidioc_s_modulator
-+};
-+
-+/* V4L2 RADIO device parent structure */
-+static struct video_device fm_viddev_template = {
-+	.fops = &fm_drv_fops,
-+	.ioctl_ops = &fm_drv_ioctl_ops,
-+	.name = FM_DRV_NAME,
-+	.release = video_device_release,
-+};
-+
-+int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)
-+{
-+	struct v4l2_ctrl *ctrl;
-+	int ret;
-+
-+	/* Init mutex for core locking */
-+	mutex_init(&fmdev->mutex);
-+
-+	/* Allocate new video device */
-+	gradio_dev = video_device_alloc();
-+	if (NULL == gradio_dev) {
-+		fmerr("Can't allocate video device\n");
-+		return -ENOMEM;
-+	}
-+
-+	/* Setup FM driver's V4L2 properties */
-+	memcpy(gradio_dev, &fm_viddev_template, sizeof(fm_viddev_template));
-+
-+	video_set_drvdata(gradio_dev, fmdev);
-+
-+	gradio_dev->lock = &fmdev->mutex;
-+
-+	/* Register with V4L2 subsystem as RADIO device */
-+	if (video_register_device(gradio_dev, VFL_TYPE_RADIO, radio_nr)) {
-+		video_device_release(gradio_dev);
-+		fmerr("Could not register video device\n");
-+		return -ENOMEM;
-+	}
-+
-+	fmdev->radio_dev = gradio_dev;
-+
-+	/* Register to v4l2 ctrl handler framework */
-+	fmdev->radio_dev->ctrl_handler = &fmdev->ctrl_handler;
-+
-+	ret = v4l2_ctrl_handler_init(&fmdev->ctrl_handler, 5);
-+	if (ret < 0) {
-+		fmerr("(fmdev): Can't init ctrl handler\n");
-+		v4l2_ctrl_handler_free(&fmdev->ctrl_handler);
-+		return -EBUSY;
-+	}
-+
-+	/*
-+	 * Following controls are handled by V4L2 control framework.
-+	 * Added in ascending ID order.
-+	 */
-+	v4l2_ctrl_new_std(&fmdev->ctrl_handler, &fm_ctrl_ops,
-+			V4L2_CID_AUDIO_VOLUME, FM_RX_VOLUME_MIN,
-+			FM_RX_VOLUME_MAX, 1, FM_RX_VOLUME_MAX);
-+
-+	v4l2_ctrl_new_std(&fmdev->ctrl_handler, &fm_ctrl_ops,
-+			V4L2_CID_AUDIO_MUTE, 0, 1, 1, 1);
-+
-+	v4l2_ctrl_new_std_menu(&fmdev->ctrl_handler, &fm_ctrl_ops,
-+			V4L2_CID_TUNE_PREEMPHASIS, V4L2_PREEMPHASIS_75_uS,
-+			0, V4L2_PREEMPHASIS_75_uS);
-+
-+	v4l2_ctrl_new_std(&fmdev->ctrl_handler, &fm_ctrl_ops,
-+			V4L2_CID_TUNE_POWER_LEVEL, FM_PWR_LVL_LOW,
-+			FM_PWR_LVL_HIGH, 1, FM_PWR_LVL_HIGH);
-+
-+	ctrl = v4l2_ctrl_new_std(&fmdev->ctrl_handler, &fm_ctrl_ops,
-+			V4L2_CID_TUNE_ANTENNA_CAPACITOR, 0,
-+			255, 1, 255);
-+
-+	if (ctrl)
-+		ctrl->is_volatile = 1;
-+
-+	return 0;
-+}
-+
-+void *fm_v4l2_deinit_video_device(void)
-+{
-+	struct fmdev *fmdev;
-+
-+
-+	fmdev = video_get_drvdata(gradio_dev);
-+
-+	/* Unregister to v4l2 ctrl handler framework*/
-+	v4l2_ctrl_handler_free(&fmdev->ctrl_handler);
-+
-+	/* Unregister RADIO device from V4L2 subsystem */
-+	video_unregister_device(gradio_dev);
-+
-+	return fmdev;
-+}
-diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.h b/drivers/media/radio/wl128x/fmdrv_v4l2.h
-new file mode 100644
-index 0000000..0ba79d7
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_v4l2.h
-@@ -0,0 +1,33 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *
-+ *  FM V4L2 module header.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#ifndef _FMDRV_V4L2_H
-+#define _FMDRV_V4L2_H
-+
-+#include <media/v4l2-ioctl.h>
-+#include <media/v4l2-common.h>
-+#include <media/v4l2-ctrls.h>
-+
-+int fm_v4l2_init_video_device(struct fmdev *, int);
-+void *fm_v4l2_deinit_video_device(void);
-+
-+#endif
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0009-drivers-media-radio-wl128x-FM-Driver-Common-sources.patch b/recipes-kernel/linux/linux-omap/wl1271/0009-drivers-media-radio-wl128x-FM-Driver-Common-sources.patch
deleted file mode 100644
index 61dc164..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0009-drivers-media-radio-wl128x-FM-Driver-Common-sources.patch
+++ /dev/null
@@ -1,2114 +0,0 @@
-From 1c32040233847f9c7998e7c557fa80dfd953e236 Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:23 +0000
-Subject: [PATCH 09/15] drivers:media:radio: wl128x: FM Driver Common sources
-
-These are the sources for the common interfaces required by the
-FM V4L2 driver for TI WL127x and WL128x chips.
-
-These implement the FM channel-8 protocol communication with the
-chip. This makes use of the Shared Transport as its transport.
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/wl128x/fmdrv_common.c | 1677 +++++++++++++++++++++++++++++
- drivers/media/radio/wl128x/fmdrv_common.h |  402 +++++++
- 2 files changed, 2079 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/radio/wl128x/fmdrv_common.c
- create mode 100644 drivers/media/radio/wl128x/fmdrv_common.h
-
-diff --git a/drivers/media/radio/wl128x/fmdrv_common.c b/drivers/media/radio/wl128x/fmdrv_common.c
-new file mode 100644
-index 0000000..12f4c65
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_common.c
-@@ -0,0 +1,1677 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *
-+ *  This sub-module of FM driver is common for FM RX and TX
-+ *  functionality. This module is responsible for:
-+ *  1) Forming group of Channel-8 commands to perform particular
-+ *     functionality (eg., frequency set require more than
-+ *     one Channel-8 command to be sent to the chip).
-+ *  2) Sending each Channel-8 command to the chip and reading
-+ *     response back over Shared Transport.
-+ *  3) Managing TX and RX Queues and Tasklets.
-+ *  4) Handling FM Interrupt packet and taking appropriate action.
-+ *  5) Loading FM firmware to the chip (common, FM TX, and FM RX
-+ *     firmware files based on mode selection)
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *  Author: Raja Mani <raja_mani at ti.com>
-+ *  Author: Manjunatha Halli <manjunatha_halli at ti.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/firmware.h>
-+#include <linux/delay.h>
-+#include "fmdrv.h"
-+#include "fmdrv_v4l2.h"
-+#include "fmdrv_common.h"
-+#include <linux/ti_wilink_st.h>
-+#include "fmdrv_rx.h"
-+#include "fmdrv_tx.h"
-+
-+/* Region info */
-+static struct region_info region_configs[] = {
-+	/* Europe/US */
-+	{
-+	 .chanl_space = FM_CHANNEL_SPACING_200KHZ * FM_FREQ_MUL,
-+	 .bot_freq = 87500,	/* 87.5 MHz */
-+	 .top_freq = 108000,	/* 108 MHz */
-+	 .fm_band = 0,
-+	 },
-+	/* Japan */
-+	{
-+	 .chanl_space = FM_CHANNEL_SPACING_200KHZ * FM_FREQ_MUL,
-+	 .bot_freq = 76000,	/* 76 MHz */
-+	 .top_freq = 90000,	/* 90 MHz */
-+	 .fm_band = 1,
-+	 },
-+};
-+
-+/* Band selection */
-+static u8 default_radio_region;	/* Europe/US */
-+module_param(default_radio_region, byte, 0);
-+MODULE_PARM_DESC(default_radio_region, "Region: 0=Europe/US, 1=Japan");
-+
-+/* RDS buffer blocks */
-+static u32 default_rds_buf = 300;
-+module_param(default_rds_buf, uint, 0444);
-+MODULE_PARM_DESC(rds_buf, "RDS buffer entries");
-+
-+/* Radio Nr */
-+static u32 radio_nr = -1;
-+module_param(radio_nr, int, 0444);
-+MODULE_PARM_DESC(radio_nr, "Radio Nr");
-+
-+/* FM irq handlers forward declaration */
-+static void fm_irq_send_flag_getcmd(struct fmdev *);
-+static void fm_irq_handle_flag_getcmd_resp(struct fmdev *);
-+static void fm_irq_handle_hw_malfunction(struct fmdev *);
-+static void fm_irq_handle_rds_start(struct fmdev *);
-+static void fm_irq_send_rdsdata_getcmd(struct fmdev *);
-+static void fm_irq_handle_rdsdata_getcmd_resp(struct fmdev *);
-+static void fm_irq_handle_rds_finish(struct fmdev *);
-+static void fm_irq_handle_tune_op_ended(struct fmdev *);
-+static void fm_irq_handle_power_enb(struct fmdev *);
-+static void fm_irq_handle_low_rssi_start(struct fmdev *);
-+static void fm_irq_afjump_set_pi(struct fmdev *);
-+static void fm_irq_handle_set_pi_resp(struct fmdev *);
-+static void fm_irq_afjump_set_pimask(struct fmdev *);
-+static void fm_irq_handle_set_pimask_resp(struct fmdev *);
-+static void fm_irq_afjump_setfreq(struct fmdev *);
-+static void fm_irq_handle_setfreq_resp(struct fmdev *);
-+static void fm_irq_afjump_enableint(struct fmdev *);
-+static void fm_irq_afjump_enableint_resp(struct fmdev *);
-+static void fm_irq_start_afjump(struct fmdev *);
-+static void fm_irq_handle_start_afjump_resp(struct fmdev *);
-+static void fm_irq_afjump_rd_freq(struct fmdev *);
-+static void fm_irq_afjump_rd_freq_resp(struct fmdev *);
-+static void fm_irq_handle_low_rssi_finish(struct fmdev *);
-+static void fm_irq_send_intmsk_cmd(struct fmdev *);
-+static void fm_irq_handle_intmsk_cmd_resp(struct fmdev *);
-+
-+/*
-+ * When FM common module receives interrupt packet, following handlers
-+ * will be executed one after another to service the interrupt(s)
-+ */
-+enum fmc_irq_handler_index {
-+	FM_SEND_FLAG_GETCMD_IDX,
-+	FM_HANDLE_FLAG_GETCMD_RESP_IDX,
-+
-+	/* HW malfunction irq handler */
-+	FM_HW_MAL_FUNC_IDX,
-+
-+	/* RDS threshold reached irq handler */
-+	FM_RDS_START_IDX,
-+	FM_RDS_SEND_RDS_GETCMD_IDX,
-+	FM_RDS_HANDLE_RDS_GETCMD_RESP_IDX,
-+	FM_RDS_FINISH_IDX,
-+
-+	/* Tune operation ended irq handler */
-+	FM_HW_TUNE_OP_ENDED_IDX,
-+
-+	/* TX power enable irq handler */
-+	FM_HW_POWER_ENB_IDX,
-+
-+	/* Low RSSI irq handler */
-+	FM_LOW_RSSI_START_IDX,
-+	FM_AF_JUMP_SETPI_IDX,
-+	FM_AF_JUMP_HANDLE_SETPI_RESP_IDX,
-+	FM_AF_JUMP_SETPI_MASK_IDX,
-+	FM_AF_JUMP_HANDLE_SETPI_MASK_RESP_IDX,
-+	FM_AF_JUMP_SET_AF_FREQ_IDX,
-+	FM_AF_JUMP_HANDLE_SET_AFFREQ_RESP_IDX,
-+	FM_AF_JUMP_ENABLE_INT_IDX,
-+	FM_AF_JUMP_ENABLE_INT_RESP_IDX,
-+	FM_AF_JUMP_START_AFJUMP_IDX,
-+	FM_AF_JUMP_HANDLE_START_AFJUMP_RESP_IDX,
-+	FM_AF_JUMP_RD_FREQ_IDX,
-+	FM_AF_JUMP_RD_FREQ_RESP_IDX,
-+	FM_LOW_RSSI_FINISH_IDX,
-+
-+	/* Interrupt process post action */
-+	FM_SEND_INTMSK_CMD_IDX,
-+	FM_HANDLE_INTMSK_CMD_RESP_IDX,
-+};
-+
-+/* FM interrupt handler table */
-+static int_handler_prototype int_handler_table[] = {
-+	fm_irq_send_flag_getcmd,
-+	fm_irq_handle_flag_getcmd_resp,
-+	fm_irq_handle_hw_malfunction,
-+	fm_irq_handle_rds_start, /* RDS threshold reached irq handler */
-+	fm_irq_send_rdsdata_getcmd,
-+	fm_irq_handle_rdsdata_getcmd_resp,
-+	fm_irq_handle_rds_finish,
-+	fm_irq_handle_tune_op_ended,
-+	fm_irq_handle_power_enb, /* TX power enable irq handler */
-+	fm_irq_handle_low_rssi_start,
-+	fm_irq_afjump_set_pi,
-+	fm_irq_handle_set_pi_resp,
-+	fm_irq_afjump_set_pimask,
-+	fm_irq_handle_set_pimask_resp,
-+	fm_irq_afjump_setfreq,
-+	fm_irq_handle_setfreq_resp,
-+	fm_irq_afjump_enableint,
-+	fm_irq_afjump_enableint_resp,
-+	fm_irq_start_afjump,
-+	fm_irq_handle_start_afjump_resp,
-+	fm_irq_afjump_rd_freq,
-+	fm_irq_afjump_rd_freq_resp,
-+	fm_irq_handle_low_rssi_finish,
-+	fm_irq_send_intmsk_cmd, /* Interrupt process post action */
-+	fm_irq_handle_intmsk_cmd_resp
-+};
-+
-+long (*g_st_write) (struct sk_buff *skb);
-+static struct completion wait_for_fmdrv_reg_comp;
-+
-+static inline void fm_irq_call(struct fmdev *fmdev)
-+{
-+	fmdev->irq_info.handlers[fmdev->irq_info.stage](fmdev);
-+}
-+
-+/* Continue next function in interrupt handler table */
-+static inline void fm_irq_call_stage(struct fmdev *fmdev, u8 stage)
-+{
-+	fmdev->irq_info.stage = stage;
-+	fm_irq_call(fmdev);
-+}
-+
-+static inline void fm_irq_timeout_stage(struct fmdev *fmdev, u8 stage)
-+{
-+	fmdev->irq_info.stage = stage;
-+	mod_timer(&fmdev->irq_info.timer, jiffies + FM_DRV_TX_TIMEOUT);
-+}
-+
-+#ifdef FM_DUMP_TXRX_PKT
-+ /* To dump outgoing FM Channel-8 packets */
-+inline void dump_tx_skb_data(struct sk_buff *skb)
-+{
-+	int len, len_org;
-+	u8 index;
-+	struct fm_cmd_msg_hdr *cmd_hdr;
-+
-+	cmd_hdr = (struct fm_cmd_msg_hdr *)skb->data;
-+	printk(KERN_INFO "<<%shdr:%02x len:%02x opcode:%02x type:%s dlen:%02x",
-+	       fm_cb(skb)->completion ? " " : "*", cmd_hdr->hdr,
-+	       cmd_hdr->len, cmd_hdr->op,
-+	       cmd_hdr->rd_wr ? "RD" : "WR", cmd_hdr->dlen);
-+
-+	len_org = skb->len - FM_CMD_MSG_HDR_SIZE;
-+	if (len_org > 0) {
-+		printk("\n   data(%d): ", cmd_hdr->dlen);
-+		len = min(len_org, 14);
-+		for (index = 0; index < len; index++)
-+			printk("%x ",
-+			       skb->data[FM_CMD_MSG_HDR_SIZE + index]);
-+		printk("%s", (len_org > 14) ? ".." : "");
-+	}
-+	printk("\n");
-+}
-+
-+ /* To dump incoming FM Channel-8 packets */
-+inline void dump_rx_skb_data(struct sk_buff *skb)
-+{
-+	int len, len_org;
-+	u8 index;
-+	struct fm_event_msg_hdr *evt_hdr;
-+
-+	evt_hdr = (struct fm_event_msg_hdr *)skb->data;
-+	printk(KERN_INFO ">> hdr:%02x len:%02x sts:%02x numhci:%02x "
-+	    "opcode:%02x type:%s dlen:%02x", evt_hdr->hdr, evt_hdr->len,
-+	    evt_hdr->status, evt_hdr->num_fm_hci_cmds, evt_hdr->op,
-+	    (evt_hdr->rd_wr) ? "RD" : "WR", evt_hdr->dlen);
-+
-+	len_org = skb->len - FM_EVT_MSG_HDR_SIZE;
-+	if (len_org > 0) {
-+		printk("\n   data(%d): ", evt_hdr->dlen);
-+		len = min(len_org, 14);
-+		for (index = 0; index < len; index++)
-+			printk("%x ",
-+			       skb->data[FM_EVT_MSG_HDR_SIZE + index]);
-+		printk("%s", (len_org > 14) ? ".." : "");
-+	}
-+	printk("\n");
-+}
-+#endif
-+
-+void fmc_update_region_info(struct fmdev *fmdev, u8 region_to_set)
-+{
-+	fmdev->rx.region = region_configs[region_to_set];
-+}
-+
-+/*
-+ * FM common sub-module will schedule this tasklet whenever it receives
-+ * FM packet from ST driver.
-+ */
-+static void recv_tasklet(unsigned long arg)
-+{
-+	struct fmdev *fmdev;
-+	struct fm_irq *irq_info;
-+	struct fm_event_msg_hdr *evt_hdr;
-+	struct sk_buff *skb;
-+	u8 num_fm_hci_cmds;
-+	unsigned long flags;
-+
-+	fmdev = (struct fmdev *)arg;
-+	irq_info = &fmdev->irq_info;
-+	/* Process all packets in the RX queue */
-+	while ((skb = skb_dequeue(&fmdev->rx_q))) {
-+		if (skb->len < sizeof(struct fm_event_msg_hdr)) {
-+			fmerr("skb(%p) has only %d bytes"
-+				"atleast need %d bytes to decode\n", skb,
-+				skb->len, sizeof(struct fm_event_msg_hdr));
-+			kfree_skb(skb);
-+			continue;
-+		}
-+
-+		evt_hdr = (void *)skb->data;
-+		num_fm_hci_cmds = evt_hdr->num_fm_hci_cmds;
-+
-+		/* FM interrupt packet? */
-+		if (evt_hdr->op == FM_INTERRUPT) {
-+			/* FM interrupt handler started already? */
-+			if (!test_bit(FM_INTTASK_RUNNING, &fmdev->flag)) {
-+				set_bit(FM_INTTASK_RUNNING, &fmdev->flag);
-+				if (irq_info->stage != 0) {
-+					fmerr("Inval stage resetting to zero\n");
-+					irq_info->stage = 0;
-+				}
-+
-+				/*
-+				 * Execute first function in interrupt handler
-+				 * table.
-+				 */
-+				irq_info->handlers[irq_info->stage](fmdev);
-+			} else {
-+				set_bit(FM_INTTASK_SCHEDULE_PENDING, &fmdev->flag);
-+			}
-+			kfree_skb(skb);
-+		}
-+		/* Anyone waiting for this with completion handler? */
-+		else if (evt_hdr->op == fmdev->pre_op && fmdev->resp_comp != NULL) {
-+
-+			spin_lock_irqsave(&fmdev->resp_skb_lock, flags);
-+			fmdev->resp_skb = skb;
-+			spin_unlock_irqrestore(&fmdev->resp_skb_lock, flags);
-+			complete(fmdev->resp_comp);
-+
-+			fmdev->resp_comp = NULL;
-+			atomic_set(&fmdev->tx_cnt, 1);
-+		}
-+		/* Is this for interrupt handler? */
-+		else if (evt_hdr->op == fmdev->pre_op && fmdev->resp_comp == NULL) {
-+			if (fmdev->resp_skb != NULL)
-+				fmerr("Response SKB ptr not NULL\n");
-+
-+			spin_lock_irqsave(&fmdev->resp_skb_lock, flags);
-+			fmdev->resp_skb = skb;
-+			spin_unlock_irqrestore(&fmdev->resp_skb_lock, flags);
-+
-+			/* Execute interrupt handler where state index points */
-+			irq_info->handlers[irq_info->stage](fmdev);
-+
-+			kfree_skb(skb);
-+			atomic_set(&fmdev->tx_cnt, 1);
-+		} else {
-+			fmerr("Nobody claimed SKB(%p),purging\n", skb);
-+		}
-+
-+		/*
-+		 * Check flow control field. If Num_FM_HCI_Commands field is
-+		 * not zero, schedule FM TX tasklet.
-+		 */
-+		if (num_fm_hci_cmds && atomic_read(&fmdev->tx_cnt))
-+			if (!skb_queue_empty(&fmdev->tx_q))
-+				tasklet_schedule(&fmdev->tx_task);
-+	}
-+}
-+
-+/* FM send tasklet: is scheduled when FM packet has to be sent to chip */
-+static void send_tasklet(unsigned long arg)
-+{
-+	struct fmdev *fmdev;
-+	struct sk_buff *skb;
-+	int len;
-+
-+	fmdev = (struct fmdev *)arg;
-+
-+	if (!atomic_read(&fmdev->tx_cnt))
-+		return;
-+
-+	/* Check, is there any timeout happenned to last transmitted packet */
-+	if ((jiffies - fmdev->last_tx_jiffies) > FM_DRV_TX_TIMEOUT) {
-+		fmerr("TX timeout occurred\n");
-+		atomic_set(&fmdev->tx_cnt, 1);
-+	}
-+
-+	/* Send queued FM TX packets */
-+	skb = skb_dequeue(&fmdev->tx_q);
-+	if (!skb)
-+		return;
-+
-+	atomic_dec(&fmdev->tx_cnt);
-+	fmdev->pre_op = fm_cb(skb)->fm_op;
-+
-+	if (fmdev->resp_comp != NULL)
-+		fmerr("Response completion handler is not NULL\n");
-+
-+	fmdev->resp_comp = fm_cb(skb)->completion;
-+
-+	/* Write FM packet to ST driver */
-+	len = g_st_write(skb);
-+	if (len < 0) {
-+		kfree_skb(skb);
-+		fmdev->resp_comp = NULL;
-+		fmerr("TX tasklet failed to send skb(%p)\n", skb);
-+		atomic_set(&fmdev->tx_cnt, 1);
-+	} else {
-+		fmdev->last_tx_jiffies = jiffies;
-+	}
-+}
-+
-+/*
-+ * Queues FM Channel-8 packet to FM TX queue and schedules FM TX tasklet for
-+ * transmission
-+ */
-+static u32 fm_send_cmd(struct fmdev *fmdev, u8 fm_op, u16 type,	void *payload,
-+		int payload_len, struct completion *wait_completion)
-+{
-+	struct sk_buff *skb;
-+	struct fm_cmd_msg_hdr *hdr;
-+	int size;
-+
-+	if (fm_op >= FM_INTERRUPT) {
-+		fmerr("Invalid fm opcode - %d\n", fm_op);
-+		return -EINVAL;
-+	}
-+	if (test_bit(FM_FW_DW_INPROGRESS, &fmdev->flag) && payload == NULL) {
-+		fmerr("Payload data is NULL during fw download\n");
-+		return -EINVAL;
-+	}
-+	if (!test_bit(FM_FW_DW_INPROGRESS, &fmdev->flag))
-+		size =
-+		    FM_CMD_MSG_HDR_SIZE + ((payload == NULL) ? 0 : payload_len);
-+	else
-+		size = payload_len;
-+
-+	skb = alloc_skb(size, GFP_ATOMIC);
-+	if (!skb) {
-+		fmerr("No memory to create new SKB\n");
-+		return -ENOMEM;
-+	}
-+	/*
-+	 * Don't fill FM header info for the commands which come from
-+	 * FM firmware file.
-+	 */
-+	if (!test_bit(FM_FW_DW_INPROGRESS, &fmdev->flag) ||
-+			test_bit(FM_INTTASK_RUNNING, &fmdev->flag)) {
-+		/* Fill command header info */
-+		hdr = (struct fm_cmd_msg_hdr *)skb_put(skb, FM_CMD_MSG_HDR_SIZE);
-+		hdr->hdr = FM_PKT_LOGICAL_CHAN_NUMBER;	/* 0x08 */
-+
-+		/* 3 (fm_opcode,rd_wr,dlen) + payload len) */
-+		hdr->len = ((payload == NULL) ? 0 : payload_len) + 3;
-+
-+		/* FM opcode */
-+		hdr->op = fm_op;
-+
-+		/* read/write type */
-+		hdr->rd_wr = type;
-+		hdr->dlen = payload_len;
-+		fm_cb(skb)->fm_op = fm_op;
-+
-+		/*
-+		 * If firmware download has finished and the command is
-+		 * not a read command then payload is != NULL - a write
-+		 * command with u16 payload - convert to be16
-+		 */
-+		if (payload != NULL)
-+			*(u16 *)payload = cpu_to_be16(*(u16 *)payload);
-+
-+	} else if (payload != NULL) {
-+		fm_cb(skb)->fm_op = *((u8 *)payload + 2);
-+	}
-+	if (payload != NULL)
-+		memcpy(skb_put(skb, payload_len), payload, payload_len);
-+
-+	fm_cb(skb)->completion = wait_completion;
-+	skb_queue_tail(&fmdev->tx_q, skb);
-+	tasklet_schedule(&fmdev->tx_task);
-+
-+	return 0;
-+}
-+
-+/* Sends FM Channel-8 command to the chip and waits for the response */
-+u32 fmc_send_cmd(struct fmdev *fmdev, u8 fm_op, u16 type, void *payload,
-+		unsigned int payload_len, void *response, int *response_len)
-+{
-+	struct sk_buff *skb;
-+	struct fm_event_msg_hdr *evt_hdr;
-+	unsigned long flags;
-+	u32 ret;
-+
-+	init_completion(&fmdev->maintask_comp);
-+	ret = fm_send_cmd(fmdev, fm_op, type, payload, payload_len,
-+			    &fmdev->maintask_comp);
-+	if (ret)
-+		return ret;
-+
-+	ret = wait_for_completion_timeout(&fmdev->maintask_comp, FM_DRV_TX_TIMEOUT);
-+	if (!ret) {
-+		fmerr("Timeout(%d sec),didn't get reg"
-+			   "completion signal from RX tasklet\n",
-+			   jiffies_to_msecs(FM_DRV_TX_TIMEOUT) / 1000);
-+		return -ETIMEDOUT;
-+	}
-+	if (!fmdev->resp_skb) {
-+		fmerr("Reponse SKB is missing\n");
-+		return -EFAULT;
-+	}
-+	spin_lock_irqsave(&fmdev->resp_skb_lock, flags);
-+	skb = fmdev->resp_skb;
-+	fmdev->resp_skb = NULL;
-+	spin_unlock_irqrestore(&fmdev->resp_skb_lock, flags);
-+
-+	evt_hdr = (void *)skb->data;
-+	if (evt_hdr->status != 0) {
-+		fmerr("Received event pkt status(%d) is not zero\n",
-+			   evt_hdr->status);
-+		kfree_skb(skb);
-+		return -EIO;
-+	}
-+	/* Send response data to caller */
-+	if (response != NULL && response_len != NULL && evt_hdr->dlen) {
-+		/* Skip header info and copy only response data */
-+		skb_pull(skb, sizeof(struct fm_event_msg_hdr));
-+		memcpy(response, skb->data, evt_hdr->dlen);
-+		*response_len = evt_hdr->dlen;
-+	} else if (response_len != NULL && evt_hdr->dlen == 0) {
-+		*response_len = 0;
-+	}
-+	kfree_skb(skb);
-+
-+	return 0;
-+}
-+
-+/* --- Helper functions used in FM interrupt handlers ---*/
-+static inline u32 check_cmdresp_status(struct fmdev *fmdev,
-+		struct sk_buff **skb)
-+{
-+	struct fm_event_msg_hdr *fm_evt_hdr;
-+	unsigned long flags;
-+
-+	del_timer(&fmdev->irq_info.timer);
-+
-+	spin_lock_irqsave(&fmdev->resp_skb_lock, flags);
-+	*skb = fmdev->resp_skb;
-+	fmdev->resp_skb = NULL;
-+	spin_unlock_irqrestore(&fmdev->resp_skb_lock, flags);
-+
-+	fm_evt_hdr = (void *)(*skb)->data;
-+	if (fm_evt_hdr->status != 0) {
-+		fmerr("irq: opcode %x response status is not zero "
-+				"Initiating irq recovery process\n",
-+				fm_evt_hdr->op);
-+
-+		mod_timer(&fmdev->irq_info.timer, jiffies + FM_DRV_TX_TIMEOUT);
-+		return -1;
-+	}
-+
-+	return 0;
-+}
-+
-+static inline void fm_irq_common_cmd_resp_helper(struct fmdev *fmdev, u8 stage)
-+{
-+	struct sk_buff *skb;
-+
-+	if (!check_cmdresp_status(fmdev, &skb))
-+		fm_irq_call_stage(fmdev, stage);
-+}
-+
-+/*
-+ * Interrupt process timeout handler.
-+ * One of the irq handler did not get proper response from the chip. So take
-+ * recovery action here. FM interrupts are disabled in the beginning of
-+ * interrupt process. Therefore reset stage index to re-enable default
-+ * interrupts. So that next interrupt will be processed as usual.
-+ */
-+static void int_timeout_handler(unsigned long data)
-+{
-+	struct fmdev *fmdev;
-+	struct fm_irq *fmirq;
-+
-+	fmdbg("irq: timeout,trying to re-enable fm interrupts\n");
-+	fmdev = (struct fmdev *)data;
-+	fmirq = &fmdev->irq_info;
-+	fmirq->retry++;
-+
-+	if (fmirq->retry > FM_IRQ_TIMEOUT_RETRY_MAX) {
-+		/* Stop recovery action (interrupt reenable process) and
-+		 * reset stage index & retry count values */
-+		fmirq->stage = 0;
-+		fmirq->retry = 0;
-+		fmerr("Recovery action failed during"
-+				"irq processing, max retry reached\n");
-+		return;
-+	}
-+	fm_irq_call_stage(fmdev, FM_SEND_INTMSK_CMD_IDX);
-+}
-+
-+/* --------- FM interrupt handlers ------------*/
-+static void fm_irq_send_flag_getcmd(struct fmdev *fmdev)
-+{
-+	u16 flag;
-+
-+	/* Send FLAG_GET command , to know the source of interrupt */
-+	if (!fm_send_cmd(fmdev, FLAG_GET, REG_RD, NULL, sizeof(flag), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_HANDLE_FLAG_GETCMD_RESP_IDX);
-+}
-+
-+static void fm_irq_handle_flag_getcmd_resp(struct fmdev *fmdev)
-+{
-+	struct sk_buff *skb;
-+	struct fm_event_msg_hdr *fm_evt_hdr;
-+
-+	if (check_cmdresp_status(fmdev, &skb))
-+		return;
-+
-+	fm_evt_hdr = (void *)skb->data;
-+
-+	/* Skip header info and copy only response data */
-+	skb_pull(skb, sizeof(struct fm_event_msg_hdr));
-+	memcpy(&fmdev->irq_info.flag, skb->data, fm_evt_hdr->dlen);
-+
-+	fmdev->irq_info.flag = be16_to_cpu(fmdev->irq_info.flag);
-+	fmdbg("irq: flag register(0x%x)\n", fmdev->irq_info.flag);
-+
-+	/* Continue next function in interrupt handler table */
-+	fm_irq_call_stage(fmdev, FM_HW_MAL_FUNC_IDX);
-+}
-+
-+static void fm_irq_handle_hw_malfunction(struct fmdev *fmdev)
-+{
-+	if (fmdev->irq_info.flag & FM_MAL_EVENT & fmdev->irq_info.mask)
-+		fmerr("irq: HW MAL int received - do nothing\n");
-+
-+	/* Continue next function in interrupt handler table */
-+	fm_irq_call_stage(fmdev, FM_RDS_START_IDX);
-+}
-+
-+static void fm_irq_handle_rds_start(struct fmdev *fmdev)
-+{
-+	if (fmdev->irq_info.flag & FM_RDS_EVENT & fmdev->irq_info.mask) {
-+		fmdbg("irq: rds threshold reached\n");
-+		fmdev->irq_info.stage = FM_RDS_SEND_RDS_GETCMD_IDX;
-+	} else {
-+		/* Continue next function in interrupt handler table */
-+		fmdev->irq_info.stage = FM_HW_TUNE_OP_ENDED_IDX;
-+	}
-+
-+	fm_irq_call(fmdev);
-+}
-+
-+static void fm_irq_send_rdsdata_getcmd(struct fmdev *fmdev)
-+{
-+	/* Send the command to read RDS data from the chip */
-+	if (!fm_send_cmd(fmdev, RDS_DATA_GET, REG_RD, NULL,
-+			    (FM_RX_RDS_FIFO_THRESHOLD * 3), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_RDS_HANDLE_RDS_GETCMD_RESP_IDX);
-+}
-+
-+/* Keeps track of current RX channel AF (Alternate Frequency) */
-+static void fm_rx_update_af_cache(struct fmdev *fmdev, u8 af)
-+{
-+	struct tuned_station_info *stat_info = &fmdev->rx.stat_info;
-+	u8 reg_idx = fmdev->rx.region.fm_band;
-+	u8 index;
-+	u32 freq;
-+
-+	/* First AF indicates the number of AF follows. Reset the list */
-+	if ((af >= FM_RDS_1_AF_FOLLOWS) && (af <= FM_RDS_25_AF_FOLLOWS)) {
-+		fmdev->rx.stat_info.af_list_max = (af - FM_RDS_1_AF_FOLLOWS + 1);
-+		fmdev->rx.stat_info.afcache_size = 0;
-+		fmdbg("No of expected AF : %d\n", fmdev->rx.stat_info.af_list_max);
-+		return;
-+	}
-+
-+	if (af < FM_RDS_MIN_AF)
-+		return;
-+	if (reg_idx == FM_BAND_EUROPE_US && af > FM_RDS_MAX_AF)
-+		return;
-+	if (reg_idx == FM_BAND_JAPAN && af > FM_RDS_MAX_AF_JAPAN)
-+		return;
-+
-+	freq = fmdev->rx.region.bot_freq + (af * 100);
-+	if (freq == fmdev->rx.freq) {
-+		fmdbg("Current freq(%d) is matching with received AF(%d)\n",
-+				fmdev->rx.freq, freq);
-+		return;
-+	}
-+	/* Do check in AF cache */
-+	for (index = 0; index < stat_info->afcache_size; index++) {
-+		if (stat_info->af_cache[index] == freq)
-+			break;
-+	}
-+	/* Reached the limit of the list - ignore the next AF */
-+	if (index == stat_info->af_list_max) {
-+		fmdbg("AF cache is full\n");
-+		return;
-+	}
-+	/*
-+	 * If we reached the end of the list then this AF is not
-+	 * in the list - add it.
-+	 */
-+	if (index == stat_info->afcache_size) {
-+		fmdbg("Storing AF %d to cache index %d\n", freq, index);
-+		stat_info->af_cache[index] = freq;
-+		stat_info->afcache_size++;
-+	}
-+}
-+
-+/*
-+ * Converts RDS buffer data from big endian format
-+ * to little endian format.
-+ */
-+static void fm_rdsparse_swapbytes(struct fmdev *fmdev,
-+		struct fm_rdsdata_format *rds_format)
-+{
-+	u8 byte1;
-+	u8 index = 0;
-+	u8 *rds_buff;
-+
-+	/*
-+	 * Since in Orca the 2 RDS Data bytes are in little endian and
-+	 * in Dolphin they are in big endian, the parsing of the RDS data
-+	 * is chip dependent
-+	 */
-+	if (fmdev->asci_id != 0x6350) {
-+		rds_buff = &rds_format->data.groupdatabuff.buff[0];
-+		while (index + 1 < FM_RX_RDS_INFO_FIELD_MAX) {
-+			byte1 = rds_buff[index];
-+			rds_buff[index] = rds_buff[index + 1];
-+			rds_buff[index + 1] = byte1;
-+			index += 2;
-+		}
-+	}
-+}
-+
-+static void fm_irq_handle_rdsdata_getcmd_resp(struct fmdev *fmdev)
-+{
-+	struct sk_buff *skb;
-+	struct fm_rdsdata_format rds_fmt;
-+	struct fm_rds *rds = &fmdev->rx.rds;
-+	unsigned long group_idx, flags;
-+	u8 *rds_data, meta_data, tmpbuf[3];
-+	u8 type, blk_idx;
-+	u16 cur_picode;
-+	u32 rds_len;
-+
-+	if (check_cmdresp_status(fmdev, &skb))
-+		return;
-+
-+	/* Skip header info */
-+	skb_pull(skb, sizeof(struct fm_event_msg_hdr));
-+	rds_data = skb->data;
-+	rds_len = skb->len;
-+
-+	/* Parse the RDS data */
-+	while (rds_len >= FM_RDS_BLK_SIZE) {
-+		meta_data = rds_data[2];
-+		/* Get the type: 0=A, 1=B, 2=C, 3=C', 4=D, 5=E */
-+		type = (meta_data & 0x07);
-+
-+		/* Transform the blk type into index sequence (0, 1, 2, 3, 4) */
-+		blk_idx = (type <= FM_RDS_BLOCK_C ? type : (type - 1));
-+		fmdbg("Block index:%d(%s)\n", blk_idx,
-+			   (meta_data & FM_RDS_STATUS_ERR_MASK) ? "Bad" : "Ok");
-+
-+		if ((meta_data & FM_RDS_STATUS_ERR_MASK) != 0)
-+			break;
-+
-+		if (blk_idx < FM_RDS_BLK_IDX_A || blk_idx > FM_RDS_BLK_IDX_D) {
-+			fmdbg("Block sequence mismatch\n");
-+			rds->last_blk_idx = -1;
-+			break;
-+		}
-+
-+		/* Skip checkword (control) byte and copy only data byte */
-+		memcpy(&rds_fmt.data.groupdatabuff.
-+				buff[blk_idx * (FM_RDS_BLK_SIZE - 1)],
-+				rds_data, (FM_RDS_BLK_SIZE - 1));
-+
-+		rds->last_blk_idx = blk_idx;
-+
-+		/* If completed a whole group then handle it */
-+		if (blk_idx == FM_RDS_BLK_IDX_D) {
-+			fmdbg("Good block received\n");
-+			fm_rdsparse_swapbytes(fmdev, &rds_fmt);
-+
-+			/*
-+			 * Extract PI code and store in local cache.
-+			 * We need this during AF switch processing.
-+			 */
-+			cur_picode = be16_to_cpu(rds_fmt.data.groupgeneral.pidata);
-+			if (fmdev->rx.stat_info.picode != cur_picode)
-+				fmdev->rx.stat_info.picode = cur_picode;
-+
-+			fmdbg("picode:%d\n", cur_picode);
-+
-+			group_idx = (rds_fmt.data.groupgeneral.blk_b[0] >> 3);
-+			fmdbg("(fmdrv):Group:%ld%s\n", group_idx/2,
-+					(group_idx % 2) ? "B" : "A");
-+
-+			group_idx = 1 << (rds_fmt.data.groupgeneral.blk_b[0] >> 3);
-+			if (group_idx == FM_RDS_GROUP_TYPE_MASK_0A) {
-+				fm_rx_update_af_cache(fmdev, rds_fmt.data.group0A.af[0]);
-+				fm_rx_update_af_cache(fmdev, rds_fmt.data.group0A.af[1]);
-+			}
-+		}
-+		rds_len -= FM_RDS_BLK_SIZE;
-+		rds_data += FM_RDS_BLK_SIZE;
-+	}
-+
-+	/* Copy raw rds data to internal rds buffer */
-+	rds_data = skb->data;
-+	rds_len = skb->len;
-+
-+	spin_lock_irqsave(&fmdev->rds_buff_lock, flags);
-+	while (rds_len > 0) {
-+		/*
-+		 * Fill RDS buffer as per V4L2 specification.
-+		 * Store control byte
-+		 */
-+		type = (rds_data[2] & 0x07);
-+		blk_idx = (type <= FM_RDS_BLOCK_C ? type : (type - 1));
-+		tmpbuf[2] = blk_idx;	/* Offset name */
-+		tmpbuf[2] |= blk_idx << 3;	/* Received offset */
-+
-+		/* Store data byte */
-+		tmpbuf[0] = rds_data[0];
-+		tmpbuf[1] = rds_data[1];
-+
-+		memcpy(&rds->buff[rds->wr_idx], &tmpbuf, FM_RDS_BLK_SIZE);
-+		rds->wr_idx = (rds->wr_idx + FM_RDS_BLK_SIZE) % rds->buf_size;
-+
-+		/* Check for overflow & start over */
-+		if (rds->wr_idx == rds->rd_idx) {
-+			fmdbg("RDS buffer overflow\n");
-+			rds->wr_idx = 0;
-+			rds->rd_idx = 0;
-+			break;
-+		}
-+		rds_len -= FM_RDS_BLK_SIZE;
-+		rds_data += FM_RDS_BLK_SIZE;
-+	}
-+	spin_unlock_irqrestore(&fmdev->rds_buff_lock, flags);
-+
-+	/* Wakeup read queue */
-+	if (rds->wr_idx != rds->rd_idx)
-+		wake_up_interruptible(&rds->read_queue);
-+
-+	fm_irq_call_stage(fmdev, FM_RDS_FINISH_IDX);
-+}
-+
-+static void fm_irq_handle_rds_finish(struct fmdev *fmdev)
-+{
-+	fm_irq_call_stage(fmdev, FM_HW_TUNE_OP_ENDED_IDX);
-+}
-+
-+static void fm_irq_handle_tune_op_ended(struct fmdev *fmdev)
-+{
-+	if (fmdev->irq_info.flag & (FM_FR_EVENT | FM_BL_EVENT) & fmdev->
-+	    irq_info.mask) {
-+		fmdbg("irq: tune ended/bandlimit reached\n");
-+		if (test_and_clear_bit(FM_AF_SWITCH_INPROGRESS, &fmdev->flag)) {
-+			fmdev->irq_info.stage = FM_AF_JUMP_RD_FREQ_IDX;
-+		} else {
-+			complete(&fmdev->maintask_comp);
-+			fmdev->irq_info.stage = FM_HW_POWER_ENB_IDX;
-+		}
-+	} else
-+		fmdev->irq_info.stage = FM_HW_POWER_ENB_IDX;
-+
-+	fm_irq_call(fmdev);
-+}
-+
-+static void fm_irq_handle_power_enb(struct fmdev *fmdev)
-+{
-+	if (fmdev->irq_info.flag & FM_POW_ENB_EVENT) {
-+		fmdbg("irq: Power Enabled/Disabled\n");
-+		complete(&fmdev->maintask_comp);
-+	}
-+
-+	fm_irq_call_stage(fmdev, FM_LOW_RSSI_START_IDX);
-+}
-+
-+static void fm_irq_handle_low_rssi_start(struct fmdev *fmdev)
-+{
-+	if ((fmdev->rx.af_mode == FM_RX_RDS_AF_SWITCH_MODE_ON) &&
-+	    (fmdev->irq_info.flag & FM_LEV_EVENT & fmdev->irq_info.mask) &&
-+	    (fmdev->rx.freq != FM_UNDEFINED_FREQ) &&
-+	    (fmdev->rx.stat_info.afcache_size != 0)) {
-+		fmdbg("irq: rssi level has fallen below threshold level\n");
-+
-+		/* Disable further low RSSI interrupts */
-+		fmdev->irq_info.mask &= ~FM_LEV_EVENT;
-+
-+		fmdev->rx.afjump_idx = 0;
-+		fmdev->rx.freq_before_jump = fmdev->rx.freq;
-+		fmdev->irq_info.stage = FM_AF_JUMP_SETPI_IDX;
-+	} else {
-+		/* Continue next function in interrupt handler table */
-+		fmdev->irq_info.stage = FM_SEND_INTMSK_CMD_IDX;
-+	}
-+
-+	fm_irq_call(fmdev);
-+}
-+
-+static void fm_irq_afjump_set_pi(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+
-+	/* Set PI code - must be updated if the AF list is not empty */
-+	payload = fmdev->rx.stat_info.picode;
-+	if (!fm_send_cmd(fmdev, RDS_PI_SET, REG_WR, &payload, sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_AF_JUMP_HANDLE_SETPI_RESP_IDX);
-+}
-+
-+static void fm_irq_handle_set_pi_resp(struct fmdev *fmdev)
-+{
-+	fm_irq_common_cmd_resp_helper(fmdev, FM_AF_JUMP_SETPI_MASK_IDX);
-+}
-+
-+/*
-+ * Set PI mask.
-+ * 0xFFFF = Enable PI code matching
-+ * 0x0000 = Disable PI code matching
-+ */
-+static void fm_irq_afjump_set_pimask(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+
-+	payload = 0x0000;
-+	if (!fm_send_cmd(fmdev, RDS_PI_MASK_SET, REG_WR, &payload, sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_AF_JUMP_HANDLE_SETPI_MASK_RESP_IDX);
-+}
-+
-+static void fm_irq_handle_set_pimask_resp(struct fmdev *fmdev)
-+{
-+	fm_irq_common_cmd_resp_helper(fmdev, FM_AF_JUMP_SET_AF_FREQ_IDX);
-+}
-+
-+static void fm_irq_afjump_setfreq(struct fmdev *fmdev)
-+{
-+	u16 frq_index;
-+	u16 payload;
-+
-+	fmdbg("Swtich to %d KHz\n", fmdev->rx.stat_info.af_cache[fmdev->rx.afjump_idx]);
-+	frq_index = (fmdev->rx.stat_info.af_cache[fmdev->rx.afjump_idx] -
-+	     fmdev->rx.region.bot_freq) / FM_FREQ_MUL;
-+
-+	payload = frq_index;
-+	if (!fm_send_cmd(fmdev, AF_FREQ_SET, REG_WR, &payload, sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_AF_JUMP_HANDLE_SET_AFFREQ_RESP_IDX);
-+}
-+
-+static void fm_irq_handle_setfreq_resp(struct fmdev *fmdev)
-+{
-+	fm_irq_common_cmd_resp_helper(fmdev, FM_AF_JUMP_ENABLE_INT_IDX);
-+}
-+
-+static void fm_irq_afjump_enableint(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+
-+	/* Enable FR (tuning operation ended) interrupt */
-+	payload = FM_FR_EVENT;
-+	if (!fm_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload, sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_AF_JUMP_ENABLE_INT_RESP_IDX);
-+}
-+
-+static void fm_irq_afjump_enableint_resp(struct fmdev *fmdev)
-+{
-+	fm_irq_common_cmd_resp_helper(fmdev, FM_AF_JUMP_START_AFJUMP_IDX);
-+}
-+
-+static void fm_irq_start_afjump(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+
-+	payload = FM_TUNER_AF_JUMP_MODE;
-+	if (!fm_send_cmd(fmdev, TUNER_MODE_SET, REG_WR, &payload,
-+			sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_AF_JUMP_HANDLE_START_AFJUMP_RESP_IDX);
-+}
-+
-+static void fm_irq_handle_start_afjump_resp(struct fmdev *fmdev)
-+{
-+	struct sk_buff *skb;
-+
-+	if (check_cmdresp_status(fmdev, &skb))
-+		return;
-+
-+	fmdev->irq_info.stage = FM_SEND_FLAG_GETCMD_IDX;
-+	set_bit(FM_AF_SWITCH_INPROGRESS, &fmdev->flag);
-+	clear_bit(FM_INTTASK_RUNNING, &fmdev->flag);
-+}
-+
-+static void fm_irq_afjump_rd_freq(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+
-+	if (!fm_send_cmd(fmdev, FREQ_SET, REG_RD, NULL, sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_AF_JUMP_RD_FREQ_RESP_IDX);
-+}
-+
-+static void fm_irq_afjump_rd_freq_resp(struct fmdev *fmdev)
-+{
-+	struct sk_buff *skb;
-+	u16 read_freq;
-+	u32 curr_freq, jumped_freq;
-+
-+	if (check_cmdresp_status(fmdev, &skb))
-+		return;
-+
-+	/* Skip header info and copy only response data */
-+	skb_pull(skb, sizeof(struct fm_event_msg_hdr));
-+	memcpy(&read_freq, skb->data, sizeof(read_freq));
-+	read_freq = be16_to_cpu(read_freq);
-+	curr_freq = fmdev->rx.region.bot_freq + ((u32)read_freq * FM_FREQ_MUL);
-+
-+	jumped_freq = fmdev->rx.stat_info.af_cache[fmdev->rx.afjump_idx];
-+
-+	/* If the frequency was changed the jump succeeded */
-+	if ((curr_freq != fmdev->rx.freq_before_jump) && (curr_freq == jumped_freq)) {
-+		fmdbg("Successfully switched to alternate freq %d\n", curr_freq);
-+		fmdev->rx.freq = curr_freq;
-+		fm_rx_reset_rds_cache(fmdev);
-+
-+		/* AF feature is on, enable low level RSSI interrupt */
-+		if (fmdev->rx.af_mode == FM_RX_RDS_AF_SWITCH_MODE_ON)
-+			fmdev->irq_info.mask |= FM_LEV_EVENT;
-+
-+		fmdev->irq_info.stage = FM_LOW_RSSI_FINISH_IDX;
-+	} else {		/* jump to the next freq in the AF list */
-+		fmdev->rx.afjump_idx++;
-+
-+		/* If we reached the end of the list - stop searching */
-+		if (fmdev->rx.afjump_idx >= fmdev->rx.stat_info.afcache_size) {
-+			fmdbg("AF switch processing failed\n");
-+			fmdev->irq_info.stage = FM_LOW_RSSI_FINISH_IDX;
-+		} else {	/* AF List is not over - try next one */
-+
-+			fmdbg("Trying next freq in AF cache\n");
-+			fmdev->irq_info.stage = FM_AF_JUMP_SETPI_IDX;
-+		}
-+	}
-+	fm_irq_call(fmdev);
-+}
-+
-+static void fm_irq_handle_low_rssi_finish(struct fmdev *fmdev)
-+{
-+	fm_irq_call_stage(fmdev, FM_SEND_INTMSK_CMD_IDX);
-+}
-+
-+static void fm_irq_send_intmsk_cmd(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+
-+	/* Re-enable FM interrupts */
-+	payload = fmdev->irq_info.mask;
-+
-+	if (!fm_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL))
-+		fm_irq_timeout_stage(fmdev, FM_HANDLE_INTMSK_CMD_RESP_IDX);
-+}
-+
-+static void fm_irq_handle_intmsk_cmd_resp(struct fmdev *fmdev)
-+{
-+	struct sk_buff *skb;
-+
-+	if (check_cmdresp_status(fmdev, &skb))
-+		return;
-+	/*
-+	 * This is last function in interrupt table to be executed.
-+	 * So, reset stage index to 0.
-+	 */
-+	fmdev->irq_info.stage = FM_SEND_FLAG_GETCMD_IDX;
-+
-+	/* Start processing any pending interrupt */
-+	if (test_and_clear_bit(FM_INTTASK_SCHEDULE_PENDING, &fmdev->flag))
-+		fmdev->irq_info.handlers[fmdev->irq_info.stage](fmdev);
-+	else
-+		clear_bit(FM_INTTASK_RUNNING, &fmdev->flag);
-+}
-+
-+/* Returns availability of RDS data in internel buffer */
-+u32 fmc_is_rds_data_available(struct fmdev *fmdev, struct file *file,
-+				struct poll_table_struct *pts)
-+{
-+	poll_wait(file, &fmdev->rx.rds.read_queue, pts);
-+	if (fmdev->rx.rds.rd_idx != fmdev->rx.rds.wr_idx)
-+		return 0;
-+
-+	return -EAGAIN;
-+}
-+
-+/* Copies RDS data from internal buffer to user buffer */
-+u32 fmc_transfer_rds_from_internal_buff(struct fmdev *fmdev, struct file *file,
-+		u8 __user *buf, size_t count)
-+{
-+	u32 block_count;
-+	unsigned long flags;
-+	int ret;
-+
-+	if (fmdev->rx.rds.wr_idx == fmdev->rx.rds.rd_idx) {
-+		if (file->f_flags & O_NONBLOCK)
-+			return -EWOULDBLOCK;
-+
-+		ret = wait_event_interruptible(fmdev->rx.rds.read_queue,
-+				(fmdev->rx.rds.wr_idx != fmdev->rx.rds.rd_idx));
-+		if (ret)
-+			return -EINTR;
-+	}
-+
-+	/* Calculate block count from byte count */
-+	count /= 3;
-+	block_count = 0;
-+	ret = 0;
-+
-+	spin_lock_irqsave(&fmdev->rds_buff_lock, flags);
-+
-+	while (block_count < count) {
-+		if (fmdev->rx.rds.wr_idx == fmdev->rx.rds.rd_idx)
-+			break;
-+
-+		if (copy_to_user(buf, &fmdev->rx.rds.buff[fmdev->rx.rds.rd_idx],
-+					FM_RDS_BLK_SIZE))
-+			break;
-+
-+		fmdev->rx.rds.rd_idx += FM_RDS_BLK_SIZE;
-+		if (fmdev->rx.rds.rd_idx >= fmdev->rx.rds.buf_size)
-+			fmdev->rx.rds.rd_idx = 0;
-+
-+		block_count++;
-+		buf += FM_RDS_BLK_SIZE;
-+		ret += FM_RDS_BLK_SIZE;
-+	}
-+	spin_unlock_irqrestore(&fmdev->rds_buff_lock, flags);
-+	return ret;
-+}
-+
-+u32 fmc_set_freq(struct fmdev *fmdev, u32 freq_to_set)
-+{
-+	switch (fmdev->curr_fmmode) {
-+	case FM_MODE_RX:
-+		return fm_rx_set_freq(fmdev, freq_to_set);
-+
-+	case FM_MODE_TX:
-+		return fm_tx_set_freq(fmdev, freq_to_set);
-+
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+u32 fmc_get_freq(struct fmdev *fmdev, u32 *cur_tuned_frq)
-+{
-+	if (fmdev->rx.freq == FM_UNDEFINED_FREQ) {
-+		fmerr("RX frequency is not set\n");
-+		return -EPERM;
-+	}
-+	if (cur_tuned_frq == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	switch (fmdev->curr_fmmode) {
-+	case FM_MODE_RX:
-+		*cur_tuned_frq = fmdev->rx.freq;
-+		return 0;
-+
-+	case FM_MODE_TX:
-+		*cur_tuned_frq = 0;	/* TODO : Change this later */
-+		return 0;
-+
-+	default:
-+		return -EINVAL;
-+	}
-+
-+}
-+
-+u32 fmc_set_region(struct fmdev *fmdev, u8 region_to_set)
-+{
-+	switch (fmdev->curr_fmmode) {
-+	case FM_MODE_RX:
-+		return fm_rx_set_region(fmdev, region_to_set);
-+
-+	case FM_MODE_TX:
-+		return fm_tx_set_region(fmdev, region_to_set);
-+
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+u32 fmc_set_mute_mode(struct fmdev *fmdev, u8 mute_mode_toset)
-+{
-+	switch (fmdev->curr_fmmode) {
-+	case FM_MODE_RX:
-+		return fm_rx_set_mute_mode(fmdev, mute_mode_toset);
-+
-+	case FM_MODE_TX:
-+		return fm_tx_set_mute_mode(fmdev, mute_mode_toset);
-+
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+u32 fmc_set_stereo_mono(struct fmdev *fmdev, u16 mode)
-+{
-+	switch (fmdev->curr_fmmode) {
-+	case FM_MODE_RX:
-+		return fm_rx_set_stereo_mono(fmdev, mode);
-+
-+	case FM_MODE_TX:
-+		return fm_tx_set_stereo_mono(fmdev, mode);
-+
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+u32 fmc_set_rds_mode(struct fmdev *fmdev, u8 rds_en_dis)
-+{
-+	switch (fmdev->curr_fmmode) {
-+	case FM_MODE_RX:
-+		return fm_rx_set_rds_mode(fmdev, rds_en_dis);
-+
-+	case FM_MODE_TX:
-+		return fm_tx_set_rds_mode(fmdev, rds_en_dis);
-+
-+	default:
-+		return -EINVAL;
-+	}
-+}
-+
-+/* Sends power off command to the chip */
-+static u32 fm_power_down(struct fmdev *fmdev)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (!test_bit(FM_CORE_READY, &fmdev->flag)) {
-+		fmerr("FM core is not ready\n");
-+		return -EPERM;
-+	}
-+	if (fmdev->curr_fmmode == FM_MODE_OFF) {
-+		fmdbg("FM chip is already in OFF state\n");
-+		return 0;
-+	}
-+
-+	payload = 0x0;
-+	ret = fmc_send_cmd(fmdev, FM_POWER_MODE, REG_WR, &payload,
-+		sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return fmc_release(fmdev);
-+}
-+
-+/* Reads init command from FM firmware file and loads to the chip */
-+static u32 fm_download_firmware(struct fmdev *fmdev, const u8 *fw_name)
-+{
-+	const struct firmware *fw_entry;
-+	struct bts_header *fw_header;
-+	struct bts_action *action;
-+	struct bts_action_delay *delay;
-+	u8 *fw_data;
-+	int ret, fw_len, cmd_cnt;
-+
-+	cmd_cnt = 0;
-+	set_bit(FM_FW_DW_INPROGRESS, &fmdev->flag);
-+
-+	ret = request_firmware(&fw_entry, fw_name,
-+				&fmdev->radio_dev->dev);
-+	if (ret < 0) {
-+		fmerr("Unable to read firmware(%s) content\n", fw_name);
-+		return ret;
-+	}
-+	fmdbg("Firmware(%s) length : %d bytes\n", fw_name, fw_entry->size);
-+
-+	fw_data = (void *)fw_entry->data;
-+	fw_len = fw_entry->size;
-+
-+	fw_header = (struct bts_header *)fw_data;
-+	if (fw_header->magic != FM_FW_FILE_HEADER_MAGIC) {
-+		fmerr("%s not a legal TI firmware file\n", fw_name);
-+		ret = -EINVAL;
-+		goto rel_fw;
-+	}
-+	fmdbg("FW(%s) magic number : 0x%x\n", fw_name, fw_header->magic);
-+
-+	/* Skip file header info , we already verified it */
-+	fw_data += sizeof(struct bts_header);
-+	fw_len -= sizeof(struct bts_header);
-+
-+	while (fw_data && fw_len > 0) {
-+		action = (struct bts_action *)fw_data;
-+
-+		switch (action->type) {
-+		case ACTION_SEND_COMMAND:	/* Send */
-+			if (fmc_send_cmd(fmdev, 0, 0, action->data,
-+						action->size, NULL, NULL))
-+				goto rel_fw;
-+
-+			cmd_cnt++;
-+			break;
-+
-+		case ACTION_DELAY:	/* Delay */
-+			delay = (struct bts_action_delay *)action->data;
-+			mdelay(delay->msec);
-+			break;
-+		}
-+
-+		fw_data += (sizeof(struct bts_action) + (action->size));
-+		fw_len -= (sizeof(struct bts_action) + (action->size));
-+	}
-+	fmdbg("Firmware commands(%d) loaded to chip\n", cmd_cnt);
-+rel_fw:
-+	release_firmware(fw_entry);
-+	clear_bit(FM_FW_DW_INPROGRESS, &fmdev->flag);
-+
-+	return ret;
-+}
-+
-+/* Loads default RX configuration to the chip */
-+static u32 load_default_rx_configuration(struct fmdev *fmdev)
-+{
-+	int ret;
-+
-+	ret = fm_rx_set_volume(fmdev, FM_DEFAULT_RX_VOLUME);
-+	if (ret < 0)
-+		return ret;
-+
-+	return fm_rx_set_rssi_threshold(fmdev, FM_DEFAULT_RSSI_THRESHOLD);
-+}
-+
-+/* Does FM power on sequence */
-+static u32 fm_power_up(struct fmdev *fmdev, u8 mode)
-+{
-+	u16 payload, asic_id, asic_ver;
-+	int resp_len, ret;
-+	u8 fw_name[50];
-+
-+	if (mode >= FM_MODE_ENTRY_MAX) {
-+		fmerr("Invalid firmware download option\n");
-+		return -EINVAL;
-+	}
-+
-+	/*
-+	 * Initialize FM common module. FM GPIO toggling is
-+	 * taken care in Shared Transport driver.
-+	 */
-+	ret = fmc_prepare(fmdev);
-+	if (ret < 0) {
-+		fmerr("Unable to prepare FM Common\n");
-+		return ret;
-+	}
-+
-+	payload = FM_ENABLE;
-+	if (fmc_send_cmd(fmdev, FM_POWER_MODE, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL))
-+		goto rel;
-+
-+	/* Allow the chip to settle down in Channel-8 mode */
-+	msleep(20);
-+
-+	if (fmc_send_cmd(fmdev, ASIC_ID_GET, REG_RD, NULL,
-+			sizeof(asic_id), &asic_id, &resp_len))
-+		goto rel;
-+
-+	if (fmc_send_cmd(fmdev, ASIC_VER_GET, REG_RD, NULL,
-+			sizeof(asic_ver), &asic_ver, &resp_len))
-+		goto rel;
-+
-+	fmdbg("ASIC ID: 0x%x , ASIC Version: %d\n",
-+		be16_to_cpu(asic_id), be16_to_cpu(asic_ver));
-+
-+	sprintf(fw_name, "%s_%x.%d.bts", FM_FMC_FW_FILE_START,
-+		be16_to_cpu(asic_id), be16_to_cpu(asic_ver));
-+
-+	ret = fm_download_firmware(fmdev, fw_name);
-+	if (ret < 0) {
-+		fmdbg("Failed to download firmware file %s\n", fw_name);
-+		goto rel;
-+	}
-+	sprintf(fw_name, "%s_%x.%d.bts", (mode == FM_MODE_RX) ?
-+			FM_RX_FW_FILE_START : FM_TX_FW_FILE_START,
-+			be16_to_cpu(asic_id), be16_to_cpu(asic_ver));
-+
-+	ret = fm_download_firmware(fmdev, fw_name);
-+	if (ret < 0) {
-+		fmdbg("Failed to download firmware file %s\n", fw_name);
-+		goto rel;
-+	} else
-+		return ret;
-+rel:
-+	return fmc_release(fmdev);
-+}
-+
-+/* Set FM Modes(TX, RX, OFF) */
-+u32 fmc_set_mode(struct fmdev *fmdev, u8 fm_mode)
-+{
-+	int ret = 0;
-+
-+	if (fm_mode >= FM_MODE_ENTRY_MAX) {
-+		fmerr("Invalid FM mode\n");
-+		return -EINVAL;
-+	}
-+	if (fmdev->curr_fmmode == fm_mode) {
-+		fmdbg("Already fm is in mode(%d)\n", fm_mode);
-+		return ret;
-+	}
-+
-+	switch (fm_mode) {
-+	case FM_MODE_OFF:	/* OFF Mode */
-+		ret = fm_power_down(fmdev);
-+		if (ret < 0) {
-+			fmerr("Failed to set OFF mode\n");
-+			return ret;
-+		}
-+		break;
-+
-+	case FM_MODE_TX:	/* TX Mode */
-+	case FM_MODE_RX:	/* RX Mode */
-+		/* Power down before switching to TX or RX mode */
-+		if (fmdev->curr_fmmode != FM_MODE_OFF) {
-+			ret = fm_power_down(fmdev);
-+			if (ret < 0) {
-+				fmerr("Failed to set OFF mode\n");
-+				return ret;
-+			}
-+			msleep(30);
-+		}
-+		ret = fm_power_up(fmdev, fm_mode);
-+		if (ret < 0) {
-+			fmerr("Failed to load firmware\n");
-+			return ret;
-+		}
-+	}
-+	fmdev->curr_fmmode = fm_mode;
-+
-+	/* Set default configuration */
-+	if (fmdev->curr_fmmode == FM_MODE_RX) {
-+		fmdbg("Loading default rx configuration..\n");
-+		ret = load_default_rx_configuration(fmdev);
-+		if (ret < 0)
-+			fmerr("Failed to load default values\n");
-+	}
-+
-+	return ret;
-+}
-+
-+/* Returns current FM mode (TX, RX, OFF) */
-+u32 fmc_get_mode(struct fmdev *fmdev, u8 *fmmode)
-+{
-+	if (!test_bit(FM_CORE_READY, &fmdev->flag)) {
-+		fmerr("FM core is not ready\n");
-+		return -EPERM;
-+	}
-+	if (fmmode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*fmmode = fmdev->curr_fmmode;
-+	return 0;
-+}
-+
-+/* Called by ST layer when FM packet is available */
-+static long fm_st_receive(void *arg, struct sk_buff *skb)
-+{
-+	struct fmdev *fmdev;
-+
-+	fmdev = (struct fmdev *)arg;
-+
-+	if (skb == NULL) {
-+		fmerr("Invalid SKB received from ST\n");
-+		return -EFAULT;
-+	}
-+
-+	if (skb->cb[0] != FM_PKT_LOGICAL_CHAN_NUMBER) {
-+		fmerr("Received SKB (%p) is not FM Channel 8 pkt\n", skb);
-+		return -EINVAL;
-+	}
-+
-+	memcpy(skb_push(skb, 1), &skb->cb[0], 1);
-+	skb_queue_tail(&fmdev->rx_q, skb);
-+	tasklet_schedule(&fmdev->rx_task);
-+
-+	return 0;
-+}
-+
-+/*
-+ * Called by ST layer to indicate protocol registration completion
-+ * status.
-+ */
-+static void fm_st_reg_comp_cb(void *arg, char data)
-+{
-+	struct fmdev *fmdev;
-+
-+	fmdev = (struct fmdev *)arg;
-+	fmdev->streg_cbdata = data;
-+	complete(&wait_for_fmdrv_reg_comp);
-+}
-+
-+/*
-+ * This function will be called from FM V4L2 open function.
-+ * Register with ST driver and initialize driver data.
-+ */
-+u32 fmc_prepare(struct fmdev *fmdev)
-+{
-+	static struct st_proto_s fm_st_proto;
-+	u32 ret;
-+
-+	if (test_bit(FM_CORE_READY, &fmdev->flag)) {
-+		fmdbg("FM Core is already up\n");
-+		return 0;
-+	}
-+
-+	memset(&fm_st_proto, 0, sizeof(fm_st_proto));
-+	fm_st_proto.type = ST_FM;
-+	fm_st_proto.recv = fm_st_receive;
-+	fm_st_proto.match_packet = NULL;
-+	fm_st_proto.reg_complete_cb = fm_st_reg_comp_cb;
-+	fm_st_proto.write = NULL; /* TI ST driver will fill write pointer */
-+	fm_st_proto.priv_data = fmdev;
-+
-+	ret = st_register(&fm_st_proto);
-+	if (ret == -EINPROGRESS) {
-+		init_completion(&wait_for_fmdrv_reg_comp);
-+		fmdev->streg_cbdata = -EINPROGRESS;
-+		fmdbg("%s waiting for ST reg completion signal\n", __func__);
-+
-+		ret = wait_for_completion_timeout(&wait_for_fmdrv_reg_comp,
-+				FM_ST_REG_TIMEOUT);
-+
-+		if (!ret) {
-+			fmerr("Timeout(%d sec), didn't get reg "
-+					"completion signal from ST\n",
-+					jiffies_to_msecs(FM_ST_REG_TIMEOUT) / 1000);
-+			return -ETIMEDOUT;
-+		}
-+		if (fmdev->streg_cbdata != 0) {
-+			fmerr("ST reg comp CB called with error "
-+					"status %d\n", fmdev->streg_cbdata);
-+			return -EAGAIN;
-+		}
-+
-+		ret = 0;
-+	} else if (ret == -1) {
-+		fmerr("st_register failed %d\n", ret);
-+		return -EAGAIN;
-+	}
-+
-+	if (fm_st_proto.write != NULL) {
-+		g_st_write = fm_st_proto.write;
-+	} else {
-+		fmerr("Failed to get ST write func pointer\n");
-+		ret = st_unregister(ST_FM);
-+		if (ret < 0)
-+			fmerr("st_unregister failed %d\n", ret);
-+		return -EAGAIN;
-+	}
-+
-+	spin_lock_init(&fmdev->rds_buff_lock);
-+	spin_lock_init(&fmdev->resp_skb_lock);
-+
-+	/* Initialize TX queue and TX tasklet */
-+	skb_queue_head_init(&fmdev->tx_q);
-+	tasklet_init(&fmdev->tx_task, send_tasklet, (unsigned long)fmdev);
-+
-+	/* Initialize RX Queue and RX tasklet */
-+	skb_queue_head_init(&fmdev->rx_q);
-+	tasklet_init(&fmdev->rx_task, recv_tasklet, (unsigned long)fmdev);
-+
-+	fmdev->irq_info.stage = 0;
-+	atomic_set(&fmdev->tx_cnt, 1);
-+	fmdev->resp_comp = NULL;
-+
-+	init_timer(&fmdev->irq_info.timer);
-+	fmdev->irq_info.timer.function = &int_timeout_handler;
-+	fmdev->irq_info.timer.data = (unsigned long)fmdev;
-+	/*TODO: add FM_STIC_EVENT later */
-+	fmdev->irq_info.mask = FM_MAL_EVENT;
-+
-+	/* Region info */
-+	memcpy(&fmdev->rx.region, &region_configs[default_radio_region],
-+			sizeof(struct region_info));
-+
-+	fmdev->rx.mute_mode = FM_MUTE_OFF;
-+	fmdev->rx.rf_depend_mute = FM_RX_RF_DEPENDENT_MUTE_OFF;
-+	fmdev->rx.rds.flag = FM_RDS_DISABLE;
-+	fmdev->rx.freq = FM_UNDEFINED_FREQ;
-+	fmdev->rx.rds_mode = FM_RDS_SYSTEM_RDS;
-+	fmdev->rx.af_mode = FM_RX_RDS_AF_SWITCH_MODE_OFF;
-+	fmdev->irq_info.retry = 0;
-+
-+	fm_rx_reset_rds_cache(fmdev);
-+	init_waitqueue_head(&fmdev->rx.rds.read_queue);
-+
-+	fm_rx_reset_station_info(fmdev);
-+	set_bit(FM_CORE_READY, &fmdev->flag);
-+
-+	return ret;
-+}
-+
-+/*
-+ * This function will be called from FM V4L2 release function.
-+ * Unregister from ST driver.
-+ */
-+u32 fmc_release(struct fmdev *fmdev)
-+{
-+	u32 ret;
-+
-+	if (!test_bit(FM_CORE_READY, &fmdev->flag)) {
-+		fmdbg("FM Core is already down\n");
-+		return 0;
-+	}
-+	/* Sevice pending read */
-+	wake_up_interruptible(&fmdev->rx.rds.read_queue);
-+
-+	tasklet_kill(&fmdev->tx_task);
-+	tasklet_kill(&fmdev->rx_task);
-+
-+	skb_queue_purge(&fmdev->tx_q);
-+	skb_queue_purge(&fmdev->rx_q);
-+
-+	fmdev->resp_comp = NULL;
-+	fmdev->rx.freq = 0;
-+
-+	ret = st_unregister(ST_FM);
-+	if (ret < 0)
-+		fmerr("Failed to de-register FM from ST %d\n", ret);
-+	else
-+		fmdbg("Successfully unregistered from ST\n");
-+
-+	clear_bit(FM_CORE_READY, &fmdev->flag);
-+	return ret;
-+}
-+
-+/*
-+ * Module init function. Ask FM V4L module to register video device.
-+ * Allocate memory for FM driver context and RX RDS buffer.
-+ */
-+static int __init fm_drv_init(void)
-+{
-+	struct fmdev *fmdev = NULL;
-+	u32 ret = -ENOMEM;
-+
-+	fmdbg("FM driver version %s\n", FM_DRV_VERSION);
-+
-+	fmdev = kzalloc(sizeof(struct fmdev), GFP_KERNEL);
-+	if (NULL == fmdev) {
-+		fmerr("Can't allocate operation structure memory\n");
-+		return ret;
-+	}
-+	fmdev->rx.rds.buf_size = default_rds_buf * FM_RDS_BLK_SIZE;
-+	fmdev->rx.rds.buff = kzalloc(fmdev->rx.rds.buf_size, GFP_KERNEL);
-+	if (NULL == fmdev->rx.rds.buff) {
-+		fmerr("Can't allocate rds ring buffer\n");
-+		goto rel_dev;
-+	}
-+
-+	ret = fm_v4l2_init_video_device(fmdev, radio_nr);
-+	if (ret < 0)
-+		goto rel_rdsbuf;
-+
-+	fmdev->irq_info.handlers = int_handler_table;
-+	fmdev->curr_fmmode = FM_MODE_OFF;
-+	fmdev->tx_data.pwr_lvl = FM_PWR_LVL_DEF;
-+	fmdev->tx_data.preemph = FM_TX_PREEMPH_50US;
-+	return ret;
-+
-+rel_rdsbuf:
-+	kfree(fmdev->rx.rds.buff);
-+rel_dev:
-+	kfree(fmdev);
-+
-+	return ret;
-+}
-+
-+/* Module exit function. Ask FM V4L module to unregister video device */
-+static void __exit fm_drv_exit(void)
-+{
-+	struct fmdev *fmdev = NULL;
-+
-+	fmdev = fm_v4l2_deinit_video_device();
-+	if (fmdev != NULL) {
-+		kfree(fmdev->rx.rds.buff);
-+		kfree(fmdev);
-+	}
-+}
-+
-+module_init(fm_drv_init);
-+module_exit(fm_drv_exit);
-+
-+/* ------------- Module Info ------------- */
-+MODULE_AUTHOR("Manjunatha Halli <manjunatha_halli at ti.com>");
-+MODULE_DESCRIPTION("FM Driver for TI's Connectivity chip. " FM_DRV_VERSION);
-+MODULE_VERSION(FM_DRV_VERSION);
-+MODULE_LICENSE("GPL");
-diff --git a/drivers/media/radio/wl128x/fmdrv_common.h b/drivers/media/radio/wl128x/fmdrv_common.h
-new file mode 100644
-index 0000000..e5091f4
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_common.h
-@@ -0,0 +1,402 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *  FM Common module header file
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#ifndef _FMDRV_COMMON_H
-+#define _FMDRV_COMMON_H
-+
-+#define FM_ST_REG_TIMEOUT   msecs_to_jiffies(6000)	/* 6 sec */
-+#define FM_PKT_LOGICAL_CHAN_NUMBER  0x08   /* Logical channel 8 */
-+
-+#define REG_RD       0x1
-+#define REG_WR      0x0
-+
-+struct fm_reg_table {
-+	u8 opcode;
-+	u8 type;
-+	u8 *name;
-+};
-+
-+#define STEREO_GET               0
-+#define RSSI_LVL_GET             1
-+#define IF_COUNT_GET             2
-+#define FLAG_GET                 3
-+#define RDS_SYNC_GET             4
-+#define RDS_DATA_GET             5
-+#define FREQ_SET                 10
-+#define AF_FREQ_SET              11
-+#define MOST_MODE_SET            12
-+#define MOST_BLEND_SET           13
-+#define DEMPH_MODE_SET           14
-+#define SEARCH_LVL_SET           15
-+#define BAND_SET                 16
-+#define MUTE_STATUS_SET          17
-+#define RDS_PAUSE_LVL_SET        18
-+#define RDS_PAUSE_DUR_SET        19
-+#define RDS_MEM_SET              20
-+#define RDS_BLK_B_SET            21
-+#define RDS_MSK_B_SET            22
-+#define RDS_PI_MASK_SET          23
-+#define RDS_PI_SET               24
-+#define RDS_SYSTEM_SET           25
-+#define INT_MASK_SET             26
-+#define SEARCH_DIR_SET           27
-+#define VOLUME_SET               28
-+#define AUDIO_ENABLE_SET         29
-+#define PCM_MODE_SET             30
-+#define I2S_MODE_CONFIG_SET      31
-+#define POWER_SET                32
-+#define INTX_CONFIG_SET          33
-+#define PULL_EN_SET              34
-+#define HILO_SET                 35
-+#define SWITCH2FREF              36
-+#define FREQ_DRIFT_REPORT        37
-+
-+#define PCE_GET                  40
-+#define FIRM_VER_GET             41
-+#define ASIC_VER_GET             42
-+#define ASIC_ID_GET              43
-+#define MAN_ID_GET               44
-+#define TUNER_MODE_SET           45
-+#define STOP_SEARCH              46
-+#define RDS_CNTRL_SET            47
-+
-+#define WRITE_HARDWARE_REG       100
-+#define CODE_DOWNLOAD            101
-+#define RESET                    102
-+
-+#define FM_POWER_MODE            254
-+#define FM_INTERRUPT             255
-+
-+/* Transmitter API */
-+
-+#define CHANL_SET                55
-+#define CHANL_BW_SET		56
-+#define REF_SET                  57
-+#define POWER_ENB_SET            90
-+#define POWER_ATT_SET            58
-+#define POWER_LEV_SET            59
-+#define AUDIO_DEV_SET            60
-+#define PILOT_DEV_SET            61
-+#define RDS_DEV_SET              62
-+#define TX_BAND_SET              65
-+#define PUPD_SET                 91
-+#define AUDIO_IO_SET             63
-+#define PREMPH_SET               64
-+#define MONO_SET                 66
-+#define MUTE                     92
-+#define MPX_LMT_ENABLE           67
-+#define PI_SET                   93
-+#define ECC_SET                  69
-+#define PTY                      70
-+#define AF                       71
-+#define DISPLAY_MODE             74
-+#define RDS_REP_SET              77
-+#define RDS_CONFIG_DATA_SET      98
-+#define RDS_DATA_SET             99
-+#define RDS_DATA_ENB             94
-+#define TA_SET                   78
-+#define TP_SET                   79
-+#define DI_SET                   80
-+#define MS_SET                   81
-+#define PS_SCROLL_SPEED          82
-+#define TX_AUDIO_LEVEL_TEST      96
-+#define TX_AUDIO_LEVEL_TEST_THRESHOLD    73
-+#define TX_AUDIO_INPUT_LEVEL_RANGE_SET   54
-+#define RX_ANTENNA_SELECT        87
-+#define I2C_DEV_ADDR_SET         86
-+#define REF_ERR_CALIB_PARAM_SET          88
-+#define REF_ERR_CALIB_PERIODICITY_SET    89
-+#define SOC_INT_TRIGGER                  52
-+#define SOC_AUDIO_PATH_SET               83
-+#define SOC_PCMI_OVERRIDE                84
-+#define SOC_I2S_OVERRIDE         85
-+#define RSSI_BLOCK_SCAN_FREQ_SET 95
-+#define RSSI_BLOCK_SCAN_START    97
-+#define RSSI_BLOCK_SCAN_DATA_GET  5
-+#define READ_FMANT_TUNE_VALUE            104
-+
-+/* SKB helpers */
-+struct fm_skb_cb {
-+	__u8 fm_op;
-+	struct completion *completion;
-+};
-+
-+#define fm_cb(skb) ((struct fm_skb_cb *)(skb->cb))
-+
-+/* FM Channel-8 command message format */
-+struct fm_cmd_msg_hdr {
-+	__u8 hdr;		/* Logical Channel-8 */
-+	__u8 len;		/* Number of bytes follows */
-+	__u8 op;		/* FM Opcode */
-+	__u8 rd_wr;		/* Read/Write command */
-+	__u8 dlen;		/* Length of payload */
-+} __attribute__ ((packed));
-+
-+#define FM_CMD_MSG_HDR_SIZE    5	/* sizeof(struct fm_cmd_msg_hdr) */
-+
-+/* FM Channel-8 event messgage format */
-+struct fm_event_msg_hdr {
-+	__u8 header;		/* Logical Channel-8 */
-+	__u8 len;		/* Number of bytes follows */
-+	__u8 status;		/* Event status */
-+	__u8 num_fm_hci_cmds;	/* Number of pkts the host allowed to send */
-+	__u8 op;		/* FM Opcode */
-+	__u8 rd_wr;		/* Read/Write command */
-+	__u8 dlen;		/* Length of payload */
-+} __attribute__ ((packed));
-+
-+#define FM_EVT_MSG_HDR_SIZE     7	/* sizeof(struct fm_event_msg_hdr) */
-+
-+/* TI's magic number in firmware file */
-+#define FM_FW_FILE_HEADER_MAGIC	     0x42535442
-+
-+#define FM_ENABLE   1
-+#define FM_DISABLE  0
-+
-+/* FLAG_GET register bits */
-+#define FM_FR_EVENT		(1 << 0)
-+#define FM_BL_EVENT		(1 << 1)
-+#define FM_RDS_EVENT		(1 << 2)
-+#define FM_BBLK_EVENT		(1 << 3)
-+#define FM_LSYNC_EVENT		(1 << 4)
-+#define FM_LEV_EVENT		(1 << 5)
-+#define FM_IFFR_EVENT		(1 << 6)
-+#define FM_PI_EVENT		(1 << 7)
-+#define FM_PD_EVENT		(1 << 8)
-+#define FM_STIC_EVENT		(1 << 9)
-+#define FM_MAL_EVENT		(1 << 10)
-+#define FM_POW_ENB_EVENT	(1 << 11)
-+
-+/*
-+ * Firmware files of FM. ASIC ID and ASIC version will be appened to this,
-+ * later.
-+ */
-+#define FM_FMC_FW_FILE_START      ("fmc_ch8")
-+#define FM_RX_FW_FILE_START       ("fm_rx_ch8")
-+#define FM_TX_FW_FILE_START       ("fm_tx_ch8")
-+
-+#define FM_UNDEFINED_FREQ		   0xFFFFFFFF
-+
-+/* Band types */
-+#define FM_BAND_EUROPE_US	0
-+#define FM_BAND_JAPAN		1
-+
-+/* Seek directions */
-+#define FM_SEARCH_DIRECTION_DOWN	0
-+#define FM_SEARCH_DIRECTION_UP		1
-+
-+/* Tunner modes */
-+#define FM_TUNER_STOP_SEARCH_MODE	0
-+#define FM_TUNER_PRESET_MODE		1
-+#define FM_TUNER_AUTONOMOUS_SEARCH_MODE	2
-+#define FM_TUNER_AF_JUMP_MODE		3
-+
-+/* Min and Max volume */
-+#define FM_RX_VOLUME_MIN	0
-+#define FM_RX_VOLUME_MAX	70
-+
-+/* Volume gain step */
-+#define FM_RX_VOLUME_GAIN_STEP	0x370
-+
-+/* Mute modes */
-+#define FM_MUTE_OFF		0
-+#define	FM_MUTE_ON		1
-+#define	FM_MUTE_ATTENUATE	2
-+
-+#define FM_RX_UNMUTE_MODE		0x00
-+#define FM_RX_RF_DEP_MODE		0x01
-+#define FM_RX_AC_MUTE_MODE		0x02
-+#define FM_RX_HARD_MUTE_LEFT_MODE	0x04
-+#define FM_RX_HARD_MUTE_RIGHT_MODE	0x08
-+#define FM_RX_SOFT_MUTE_FORCE_MODE	0x10
-+
-+/* RF dependent mute mode */
-+#define FM_RX_RF_DEPENDENT_MUTE_ON	1
-+#define FM_RX_RF_DEPENDENT_MUTE_OFF	0
-+
-+/* RSSI threshold min and max */
-+#define FM_RX_RSSI_THRESHOLD_MIN	-128
-+#define FM_RX_RSSI_THRESHOLD_MAX	127
-+
-+/* Stereo/Mono mode */
-+#define FM_STEREO_MODE		0
-+#define FM_MONO_MODE		1
-+#define FM_STEREO_SOFT_BLEND	1
-+
-+/* FM RX De-emphasis filter modes */
-+#define FM_RX_EMPHASIS_FILTER_50_USEC	0
-+#define FM_RX_EMPHASIS_FILTER_75_USEC	1
-+
-+/* FM RDS modes */
-+#define FM_RDS_DISABLE	0
-+#define FM_RDS_ENABLE	1
-+
-+#define FM_NO_PI_CODE	0
-+
-+/* FM and RX RDS block enable/disable  */
-+#define FM_RX_PWR_SET_FM_ON_RDS_OFF		0x1
-+#define FM_RX_PWR_SET_FM_AND_RDS_BLK_ON		0x3
-+#define FM_RX_PWR_SET_FM_AND_RDS_BLK_OFF	0x0
-+
-+/* RX RDS */
-+#define FM_RX_RDS_FLUSH_FIFO		0x1
-+#define FM_RX_RDS_FIFO_THRESHOLD	64	/* tuples */
-+#define FM_RDS_BLK_SIZE		3	/* 3 bytes */
-+
-+/* RDS block types */
-+#define FM_RDS_BLOCK_A		0
-+#define FM_RDS_BLOCK_B		1
-+#define FM_RDS_BLOCK_C		2
-+#define FM_RDS_BLOCK_Ctag	3
-+#define FM_RDS_BLOCK_D		4
-+#define FM_RDS_BLOCK_E		5
-+
-+#define FM_RDS_BLK_IDX_A		0
-+#define FM_RDS_BLK_IDX_B		1
-+#define FM_RDS_BLK_IDX_C		2
-+#define FM_RDS_BLK_IDX_D		3
-+#define FM_RDS_BLK_IDX_UNKNOWN	0xF0
-+
-+#define FM_RDS_STATUS_ERR_MASK	0x18
-+
-+/*
-+ * Represents an RDS group type & version.
-+ * There are 15 groups, each group has 2 versions: A and B.
-+ */
-+#define FM_RDS_GROUP_TYPE_MASK_0A	    ((unsigned long)1<<0)
-+#define FM_RDS_GROUP_TYPE_MASK_0B	    ((unsigned long)1<<1)
-+#define FM_RDS_GROUP_TYPE_MASK_1A	    ((unsigned long)1<<2)
-+#define FM_RDS_GROUP_TYPE_MASK_1B	    ((unsigned long)1<<3)
-+#define FM_RDS_GROUP_TYPE_MASK_2A	    ((unsigned long)1<<4)
-+#define FM_RDS_GROUP_TYPE_MASK_2B	    ((unsigned long)1<<5)
-+#define FM_RDS_GROUP_TYPE_MASK_3A	    ((unsigned long)1<<6)
-+#define FM_RDS_GROUP_TYPE_MASK_3B           ((unsigned long)1<<7)
-+#define FM_RDS_GROUP_TYPE_MASK_4A	    ((unsigned long)1<<8)
-+#define FM_RDS_GROUP_TYPE_MASK_4B	    ((unsigned long)1<<9)
-+#define FM_RDS_GROUP_TYPE_MASK_5A	    ((unsigned long)1<<10)
-+#define FM_RDS_GROUP_TYPE_MASK_5B	    ((unsigned long)1<<11)
-+#define FM_RDS_GROUP_TYPE_MASK_6A	    ((unsigned long)1<<12)
-+#define FM_RDS_GROUP_TYPE_MASK_6B	    ((unsigned long)1<<13)
-+#define FM_RDS_GROUP_TYPE_MASK_7A	    ((unsigned long)1<<14)
-+#define FM_RDS_GROUP_TYPE_MASK_7B	    ((unsigned long)1<<15)
-+#define FM_RDS_GROUP_TYPE_MASK_8A           ((unsigned long)1<<16)
-+#define FM_RDS_GROUP_TYPE_MASK_8B	    ((unsigned long)1<<17)
-+#define FM_RDS_GROUP_TYPE_MASK_9A	    ((unsigned long)1<<18)
-+#define FM_RDS_GROUP_TYPE_MASK_9B	    ((unsigned long)1<<19)
-+#define FM_RDS_GROUP_TYPE_MASK_10A	    ((unsigned long)1<<20)
-+#define FM_RDS_GROUP_TYPE_MASK_10B	    ((unsigned long)1<<21)
-+#define FM_RDS_GROUP_TYPE_MASK_11A	    ((unsigned long)1<<22)
-+#define FM_RDS_GROUP_TYPE_MASK_11B	    ((unsigned long)1<<23)
-+#define FM_RDS_GROUP_TYPE_MASK_12A	    ((unsigned long)1<<24)
-+#define FM_RDS_GROUP_TYPE_MASK_12B	    ((unsigned long)1<<25)
-+#define FM_RDS_GROUP_TYPE_MASK_13A	    ((unsigned long)1<<26)
-+#define FM_RDS_GROUP_TYPE_MASK_13B	    ((unsigned long)1<<27)
-+#define FM_RDS_GROUP_TYPE_MASK_14A	    ((unsigned long)1<<28)
-+#define FM_RDS_GROUP_TYPE_MASK_14B	    ((unsigned long)1<<29)
-+#define FM_RDS_GROUP_TYPE_MASK_15A	    ((unsigned long)1<<30)
-+#define FM_RDS_GROUP_TYPE_MASK_15B	    ((unsigned long)1<<31)
-+
-+/* RX Alternate Frequency info */
-+#define FM_RDS_MIN_AF		          1
-+#define FM_RDS_MAX_AF		        204
-+#define FM_RDS_MAX_AF_JAPAN	        140
-+#define FM_RDS_1_AF_FOLLOWS	        225
-+#define FM_RDS_25_AF_FOLLOWS	        249
-+
-+/* RDS system type (RDS/RBDS) */
-+#define FM_RDS_SYSTEM_RDS		0
-+#define FM_RDS_SYSTEM_RBDS		1
-+
-+/* AF on/off */
-+#define FM_RX_RDS_AF_SWITCH_MODE_ON	1
-+#define FM_RX_RDS_AF_SWITCH_MODE_OFF	0
-+
-+/* Retry count when interrupt process goes wrong */
-+#define FM_IRQ_TIMEOUT_RETRY_MAX	5	/* 5 times */
-+
-+/* Audio IO set values */
-+#define FM_RX_AUDIO_ENABLE_I2S	0x01
-+#define FM_RX_AUDIO_ENABLE_ANALOG	0x02
-+#define FM_RX_AUDIO_ENABLE_I2S_AND_ANALOG	0x03
-+#define FM_RX_AUDIO_ENABLE_DISABLE	0x00
-+
-+/* HI/LO set values */
-+#define FM_RX_IFFREQ_TO_HI_SIDE		0x0
-+#define FM_RX_IFFREQ_TO_LO_SIDE		0x1
-+#define FM_RX_IFFREQ_HILO_AUTOMATIC	0x2
-+
-+/*
-+ * Default RX mode configuration. Chip will be configured
-+ * with this default values after loading RX firmware.
-+ */
-+#define FM_DEFAULT_RX_VOLUME		10
-+#define FM_DEFAULT_RSSI_THRESHOLD	3
-+
-+/* Range for TX power level in units for dB/uV */
-+#define FM_PWR_LVL_LOW			91
-+#define FM_PWR_LVL_HIGH			122
-+
-+/* Chip specific default TX power level value */
-+#define FM_PWR_LVL_DEF			4
-+
-+/* FM TX Pre-emphasis filter values */
-+#define FM_TX_PREEMPH_OFF		1
-+#define FM_TX_PREEMPH_50US		0
-+#define FM_TX_PREEMPH_75US		2
-+
-+/* FM TX antenna impedence values */
-+#define FM_TX_ANT_IMP_50		0
-+#define FM_TX_ANT_IMP_200		1
-+#define FM_TX_ANT_IMP_500		2
-+
-+/* Functions exported by FM common sub-module */
-+u32 fmc_prepare(struct fmdev *);
-+u32 fmc_release(struct fmdev *);
-+
-+void fmc_update_region_info(struct fmdev *, u8);
-+u32 fmc_send_cmd(struct fmdev *, u8, u16,
-+				void *, unsigned int, void *, int *);
-+u32 fmc_is_rds_data_available(struct fmdev *, struct file *,
-+				struct poll_table_struct *);
-+u32 fmc_transfer_rds_from_internal_buff(struct fmdev *, struct file *,
-+					u8 __user *, size_t);
-+
-+u32 fmc_set_freq(struct fmdev *, u32);
-+u32 fmc_set_mode(struct fmdev *, u8);
-+u32 fmc_set_region(struct fmdev *, u8);
-+u32 fmc_set_mute_mode(struct fmdev *, u8);
-+u32 fmc_set_stereo_mono(struct fmdev *, u16);
-+u32 fmc_set_rds_mode(struct fmdev *, u8);
-+
-+u32 fmc_get_freq(struct fmdev *, u32 *);
-+u32 fmc_get_region(struct fmdev *, u8 *);
-+u32 fmc_get_mode(struct fmdev *, u8 *);
-+
-+/*
-+ * channel spacing
-+ */
-+#define FM_CHANNEL_SPACING_50KHZ 1
-+#define FM_CHANNEL_SPACING_100KHZ 2
-+#define FM_CHANNEL_SPACING_200KHZ 4
-+#define FM_FREQ_MUL 50
-+
-+#endif
-+
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0010-drivers-media-radio-wl128x-FM-driver-RX-sources.patch b/recipes-kernel/linux/linux-omap/wl1271/0010-drivers-media-radio-wl128x-FM-driver-RX-sources.patch
deleted file mode 100644
index 8899a31..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0010-drivers-media-radio-wl128x-FM-driver-RX-sources.patch
+++ /dev/null
@@ -1,938 +0,0 @@
-From ba32e1ae2a43f33dcfd459c1456d4e612da885db Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:24 +0000
-Subject: [PATCH 10/15] drivers:media:radio: wl128x: FM driver RX sources
-
-This has implementation for FM RX functionality.
-It communicates with FM V4l2 module and FM common module
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/wl128x/fmdrv_rx.c |  847 +++++++++++++++++++++++++++++++++
- drivers/media/radio/wl128x/fmdrv_rx.h |   59 +++
- 2 files changed, 906 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/radio/wl128x/fmdrv_rx.c
- create mode 100644 drivers/media/radio/wl128x/fmdrv_rx.h
-
-diff --git a/drivers/media/radio/wl128x/fmdrv_rx.c b/drivers/media/radio/wl128x/fmdrv_rx.c
-new file mode 100644
-index 0000000..ec529b5
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_rx.c
-@@ -0,0 +1,847 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *  This sub-module of FM driver implements FM RX functionality.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *  Author: Raja Mani <raja_mani at ti.com>
-+ *  Author: Manjunatha Halli <manjunatha_halli at ti.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#include "fmdrv.h"
-+#include "fmdrv_common.h"
-+#include "fmdrv_rx.h"
-+
-+void fm_rx_reset_rds_cache(struct fmdev *fmdev)
-+{
-+	fmdev->rx.rds.flag = FM_RDS_DISABLE;
-+	fmdev->rx.rds.last_blk_idx = 0;
-+	fmdev->rx.rds.wr_idx = 0;
-+	fmdev->rx.rds.rd_idx = 0;
-+
-+	if (fmdev->rx.af_mode == FM_RX_RDS_AF_SWITCH_MODE_ON)
-+		fmdev->irq_info.mask |= FM_LEV_EVENT;
-+}
-+
-+void fm_rx_reset_station_info(struct fmdev *fmdev)
-+{
-+	fmdev->rx.stat_info.picode = FM_NO_PI_CODE;
-+	fmdev->rx.stat_info.afcache_size = 0;
-+	fmdev->rx.stat_info.af_list_max = 0;
-+}
-+
-+u32 fm_rx_set_freq(struct fmdev *fmdev, u32 freq)
-+{
-+	unsigned long timeleft;
-+	u16 payload, curr_frq, intr_flag;
-+	u32 curr_frq_in_khz;
-+	u32 ret, resp_len;
-+
-+	if (freq < fmdev->rx.region.bot_freq || freq > fmdev->rx.region.top_freq) {
-+		fmerr("Invalid frequency %d\n", freq);
-+		return -EINVAL;
-+	}
-+
-+	/* Set audio enable */
-+	payload = FM_RX_AUDIO_ENABLE_I2S_AND_ANALOG;
-+
-+	ret = fmc_send_cmd(fmdev, AUDIO_ENABLE_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Set hilo to automatic selection */
-+	payload = FM_RX_IFFREQ_HILO_AUTOMATIC;
-+	ret = fmc_send_cmd(fmdev, HILO_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Calculate frequency index and set*/
-+	payload = (freq - fmdev->rx.region.bot_freq) / FM_FREQ_MUL;
-+
-+	ret = fmc_send_cmd(fmdev, FREQ_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Read flags - just to clear any pending interrupts if we had */
-+	ret = fmc_send_cmd(fmdev, FLAG_GET, REG_RD, NULL, 2, NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Enable FR, BL interrupts */
-+	intr_flag = fmdev->irq_info.mask;
-+	fmdev->irq_info.mask = (FM_FR_EVENT | FM_BL_EVENT);
-+	payload = fmdev->irq_info.mask;
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Start tune */
-+	payload = FM_TUNER_PRESET_MODE;
-+	ret = fmc_send_cmd(fmdev, TUNER_MODE_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		goto exit;
-+
-+	/* Wait for tune ended interrupt */
-+	init_completion(&fmdev->maintask_comp);
-+	timeleft = wait_for_completion_timeout(&fmdev->maintask_comp,
-+			FM_DRV_TX_TIMEOUT);
-+	if (!timeleft) {
-+		fmerr("Timeout(%d sec),didn't get tune ended int\n",
-+			   jiffies_to_msecs(FM_DRV_TX_TIMEOUT) / 1000);
-+		ret = -ETIMEDOUT;
-+		goto exit;
-+	}
-+
-+	/* Read freq back to confirm */
-+	ret = fmc_send_cmd(fmdev, FREQ_SET, REG_RD, NULL, 2, &curr_frq, &resp_len);
-+	if (ret < 0)
-+		goto exit;
-+
-+	curr_frq = be16_to_cpu(curr_frq);
-+	curr_frq_in_khz = (fmdev->rx.region.bot_freq + ((u32)curr_frq * FM_FREQ_MUL));
-+
-+	if (curr_frq_in_khz != freq) {
-+		pr_info("Frequency is set to (%d) but "
-+			   "requested freq is (%d)\n", curr_frq_in_khz, freq);
-+	}
-+
-+	/* Update local cache  */
-+	fmdev->rx.freq = curr_frq_in_khz;
-+exit:
-+	/* Re-enable default FM interrupts */
-+	fmdev->irq_info.mask = intr_flag;
-+	payload = fmdev->irq_info.mask;
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Reset RDS cache and current station pointers */
-+	fm_rx_reset_rds_cache(fmdev);
-+	fm_rx_reset_station_info(fmdev);
-+
-+	return ret;
-+}
-+
-+static u32 fm_rx_set_channel_spacing(struct fmdev *fmdev, u32 spacing)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (spacing > 0 && spacing <= 50000)
-+		spacing = FM_CHANNEL_SPACING_50KHZ;
-+	else if (spacing > 50000 && spacing <= 100000)
-+		spacing = FM_CHANNEL_SPACING_100KHZ;
-+	else
-+		spacing = FM_CHANNEL_SPACING_200KHZ;
-+
-+	/* set channel spacing */
-+	payload = spacing;
-+	ret = fmc_send_cmd(fmdev, CHANL_BW_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->rx.region.chanl_space = spacing * FM_FREQ_MUL;
-+
-+	return ret;
-+}
-+
-+u32 fm_rx_seek(struct fmdev *fmdev, u32 seek_upward,
-+		u32 wrap_around, u32 spacing)
-+{
-+	u32 resp_len;
-+	u16 curr_frq, next_frq, last_frq;
-+	u16 payload, int_reason, intr_flag;
-+	u16 offset, space_idx;
-+	unsigned long timeleft;
-+	u32 ret;
-+
-+	/* Set channel spacing */
-+	ret = fm_rx_set_channel_spacing(fmdev, spacing);
-+	if (ret < 0) {
-+		fmerr("Failed to set channel spacing\n");
-+		return ret;
-+	}
-+
-+	/* Read the current frequency from chip */
-+	ret = fmc_send_cmd(fmdev, FREQ_SET, REG_RD, NULL,
-+			sizeof(curr_frq), &curr_frq, &resp_len);
-+	if (ret < 0)
-+		return ret;
-+
-+	curr_frq = be16_to_cpu(curr_frq);
-+	last_frq = (fmdev->rx.region.top_freq - fmdev->rx.region.bot_freq) / FM_FREQ_MUL;
-+
-+	/* Check the offset in order to be aligned to the channel spacing*/
-+	space_idx = fmdev->rx.region.chanl_space / FM_FREQ_MUL;
-+	offset = curr_frq % space_idx;
-+
-+	next_frq = seek_upward ? curr_frq + space_idx /* Seek Up */ :
-+				curr_frq - space_idx /* Seek Down */ ;
-+
-+	/*
-+	 * Add or subtract offset in order to stay aligned to the channel
-+	 * spacing.
-+	 */
-+	if ((short)next_frq < 0)
-+		next_frq = last_frq - offset;
-+	else if (next_frq > last_frq)
-+		next_frq = 0 + offset;
-+
-+again:
-+	/* Set calculated next frequency to perform seek */
-+	payload = next_frq;
-+	ret = fmc_send_cmd(fmdev, FREQ_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Set search direction (0:Seek Down, 1:Seek Up) */
-+	payload = (seek_upward ? FM_SEARCH_DIRECTION_UP : FM_SEARCH_DIRECTION_DOWN);
-+	ret = fmc_send_cmd(fmdev, SEARCH_DIR_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Read flags - just to clear any pending interrupts if we had */
-+	ret = fmc_send_cmd(fmdev, FLAG_GET, REG_RD, NULL, 2, NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Enable FR, BL interrupts */
-+	intr_flag = fmdev->irq_info.mask;
-+	fmdev->irq_info.mask = (FM_FR_EVENT | FM_BL_EVENT);
-+	payload = fmdev->irq_info.mask;
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Start seek */
-+	payload = FM_TUNER_AUTONOMOUS_SEARCH_MODE;
-+	ret = fmc_send_cmd(fmdev, TUNER_MODE_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Wait for tune ended/band limit reached interrupt */
-+	init_completion(&fmdev->maintask_comp);
-+	timeleft = wait_for_completion_timeout(&fmdev->maintask_comp,
-+			FM_DRV_RX_SEEK_TIMEOUT);
-+	if (!timeleft) {
-+		fmerr("Timeout(%d sec),didn't get tune ended int\n",
-+			   jiffies_to_msecs(FM_DRV_RX_SEEK_TIMEOUT) / 1000);
-+		return -ETIMEDOUT;
-+	}
-+
-+	int_reason = fmdev->irq_info.flag & (FM_TUNE_COMPLETE | FM_BAND_LIMIT);
-+
-+	/* Re-enable default FM interrupts */
-+	fmdev->irq_info.mask = intr_flag;
-+	payload = fmdev->irq_info.mask;
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	if (int_reason & FM_BL_EVENT) {
-+		if (wrap_around == 0) {
-+			fmdev->rx.freq = seek_upward ?
-+				fmdev->rx.region.top_freq :
-+				fmdev->rx.region.bot_freq;
-+		} else {
-+			fmdev->rx.freq = seek_upward ?
-+				fmdev->rx.region.bot_freq :
-+				fmdev->rx.region.top_freq;
-+			/* Calculate frequency index to write */
-+			next_frq = (fmdev->rx.freq -
-+					fmdev->rx.region.bot_freq) / FM_FREQ_MUL;
-+			goto again;
-+		}
-+	} else {
-+		/* Read freq to know where operation tune operation stopped */
-+		ret = fmc_send_cmd(fmdev, FREQ_SET, REG_RD, NULL, 2,
-+				&curr_frq, &resp_len);
-+		if (ret < 0)
-+			return ret;
-+
-+		curr_frq = be16_to_cpu(curr_frq);
-+		fmdev->rx.freq = (fmdev->rx.region.bot_freq +
-+				((u32)curr_frq * FM_FREQ_MUL));
-+
-+	}
-+	/* Reset RDS cache and current station pointers */
-+	fm_rx_reset_rds_cache(fmdev);
-+	fm_rx_reset_station_info(fmdev);
-+
-+	return ret;
-+}
-+
-+u32 fm_rx_set_volume(struct fmdev *fmdev, u16 vol_to_set)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (vol_to_set < FM_RX_VOLUME_MIN || vol_to_set > FM_RX_VOLUME_MAX) {
-+		fmerr("Volume is not within(%d-%d) range\n",
-+			   FM_RX_VOLUME_MIN, FM_RX_VOLUME_MAX);
-+		return -EINVAL;
-+	}
-+	vol_to_set *= FM_RX_VOLUME_GAIN_STEP;
-+
-+	payload = vol_to_set;
-+	ret = fmc_send_cmd(fmdev, VOLUME_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->rx.volume = vol_to_set;
-+	return ret;
-+}
-+
-+/* Get volume */
-+u32 fm_rx_get_volume(struct fmdev *fmdev, u16 *curr_vol)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (curr_vol == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*curr_vol = fmdev->rx.volume / FM_RX_VOLUME_GAIN_STEP;
-+
-+	return 0;
-+}
-+
-+/* To get current band's bottom and top frequency */
-+u32 fm_rx_get_band_freq_range(struct fmdev *fmdev, u32 *bot_freq, u32 *top_freq)
-+{
-+	if (bot_freq != NULL)
-+		*bot_freq = fmdev->rx.region.bot_freq;
-+
-+	if (top_freq != NULL)
-+		*top_freq = fmdev->rx.region.top_freq;
-+
-+	return 0;
-+}
-+
-+/* Returns current band index (0-Europe/US; 1-Japan) */
-+void fm_rx_get_region(struct fmdev *fmdev, u8 *region)
-+{
-+	*region = fmdev->rx.region.fm_band;
-+}
-+
-+/* Sets band (0-Europe/US; 1-Japan) */
-+u32 fm_rx_set_region(struct fmdev *fmdev, u8 region_to_set)
-+{
-+	u16 payload;
-+	u32 new_frq = 0;
-+	u32 ret;
-+
-+	if (region_to_set != FM_BAND_EUROPE_US &&
-+	    region_to_set != FM_BAND_JAPAN) {
-+		fmerr("Invalid band\n");
-+		return -EINVAL;
-+	}
-+
-+	if (fmdev->rx.region.fm_band == region_to_set) {
-+		fmerr("Requested band is already configured\n");
-+		return 0;
-+	}
-+
-+	/* Send cmd to set the band  */
-+	payload = (u16)region_to_set;
-+	ret = fmc_send_cmd(fmdev, BAND_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmc_update_region_info(fmdev, region_to_set);
-+
-+	/* Check whether current RX frequency is within band boundary */
-+	if (fmdev->rx.freq < fmdev->rx.region.bot_freq)
-+		new_frq = fmdev->rx.region.bot_freq;
-+	else if (fmdev->rx.freq > fmdev->rx.region.top_freq)
-+		new_frq = fmdev->rx.region.top_freq;
-+
-+	if (new_frq) {
-+		fmdbg("Current freq is not within band limit boundary,"
-+				"switching to %d KHz\n", new_frq);
-+		 /* Current RX frequency is not in range. So, update it */
-+		ret = fm_rx_set_freq(fmdev, new_frq);
-+	}
-+
-+	return ret;
-+}
-+
-+/* Reads current mute mode (Mute Off/On/Attenuate)*/
-+u32 fm_rx_get_mute_mode(struct fmdev *fmdev, u8 *curr_mute_mode)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (curr_mute_mode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*curr_mute_mode = fmdev->rx.mute_mode;
-+
-+	return 0;
-+}
-+
-+static u32 fm_config_rx_mute_reg(struct fmdev *fmdev)
-+{
-+	u16 payload, muteval;
-+	u32 ret;
-+
-+	muteval = 0;
-+	switch (fmdev->rx.mute_mode) {
-+	case FM_MUTE_ON:
-+		muteval = FM_RX_AC_MUTE_MODE;
-+		break;
-+
-+	case FM_MUTE_OFF:
-+		muteval = FM_RX_UNMUTE_MODE;
-+		break;
-+
-+	case FM_MUTE_ATTENUATE:
-+		muteval = FM_RX_SOFT_MUTE_FORCE_MODE;
-+		break;
-+	}
-+	if (fmdev->rx.rf_depend_mute == FM_RX_RF_DEPENDENT_MUTE_ON)
-+		muteval |= FM_RX_RF_DEP_MODE;
-+	else
-+		muteval &= ~FM_RX_RF_DEP_MODE;
-+
-+	payload = muteval;
-+	ret = fmc_send_cmd(fmdev, MUTE_STATUS_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+/* Configures mute mode (Mute Off/On/Attenuate) */
-+u32 fm_rx_set_mute_mode(struct fmdev *fmdev, u8 mute_mode_toset)
-+{
-+	u8 org_state;
-+	u32 ret;
-+
-+	if (fmdev->rx.mute_mode == mute_mode_toset)
-+		return 0;
-+
-+	org_state = fmdev->rx.mute_mode;
-+	fmdev->rx.mute_mode = mute_mode_toset;
-+
-+	ret = fm_config_rx_mute_reg(fmdev);
-+	if (ret < 0) {
-+		fmdev->rx.mute_mode = org_state;
-+		return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+/* Gets RF dependent soft mute mode enable/disable status */
-+u32 fm_rx_get_rfdepend_softmute(struct fmdev *fmdev, u8 *curr_mute_mode)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (curr_mute_mode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*curr_mute_mode = fmdev->rx.rf_depend_mute;
-+
-+	return 0;
-+}
-+
-+/* Sets RF dependent soft mute mode */
-+u32 fm_rx_set_rfdepend_softmute(struct fmdev *fmdev, u8 rfdepend_mute)
-+{
-+	u8 org_state;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (rfdepend_mute != FM_RX_RF_DEPENDENT_MUTE_ON &&
-+	    rfdepend_mute != FM_RX_RF_DEPENDENT_MUTE_OFF) {
-+		fmerr("Invalid RF dependent soft mute\n");
-+		return -EINVAL;
-+	}
-+	if (fmdev->rx.rf_depend_mute == rfdepend_mute)
-+		return 0;
-+
-+	org_state = fmdev->rx.rf_depend_mute;
-+	fmdev->rx.rf_depend_mute = rfdepend_mute;
-+
-+	ret = fm_config_rx_mute_reg(fmdev);
-+	if (ret < 0) {
-+		fmdev->rx.rf_depend_mute = org_state;
-+		return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+/* Returns the signal strength level of current channel */
-+u32 fm_rx_get_rssi_level(struct fmdev *fmdev, u16 *rssilvl)
-+{
-+	u16 curr_rssi_lel;
-+	u32 resp_len;
-+	u32 ret;
-+
-+	if (rssilvl == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+	/* Read current RSSI level */
-+	ret = fmc_send_cmd(fmdev, RSSI_LVL_GET, REG_RD, NULL, 2,
-+			&curr_rssi_lel, &resp_len);
-+	if (ret < 0)
-+		return ret;
-+
-+	*rssilvl = be16_to_cpu(curr_rssi_lel);
-+
-+	return 0;
-+}
-+
-+/*
-+ * Sets the signal strength level that once reached
-+ * will stop the auto search process
-+ */
-+u32 fm_rx_set_rssi_threshold(struct fmdev *fmdev, short rssi_lvl_toset)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (rssi_lvl_toset < FM_RX_RSSI_THRESHOLD_MIN ||
-+			rssi_lvl_toset > FM_RX_RSSI_THRESHOLD_MAX) {
-+		fmerr("Invalid RSSI threshold level\n");
-+		return -EINVAL;
-+	}
-+	payload = (u16)rssi_lvl_toset;
-+	ret = fmc_send_cmd(fmdev, SEARCH_LVL_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->rx.rssi_threshold = rssi_lvl_toset;
-+
-+	return 0;
-+}
-+
-+/* Returns current RX RSSI threshold value */
-+u32 fm_rx_get_rssi_threshold(struct fmdev *fmdev, short *curr_rssi_lvl)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (curr_rssi_lvl == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*curr_rssi_lvl = fmdev->rx.rssi_threshold;
-+
-+	return 0;
-+}
-+
-+/* Sets RX stereo/mono modes */
-+u32 fm_rx_set_stereo_mono(struct fmdev *fmdev, u16 mode)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (mode != FM_STEREO_MODE && mode != FM_MONO_MODE) {
-+		fmerr("Invalid mode\n");
-+		return -EINVAL;
-+	}
-+
-+	/* Set stereo/mono mode */
-+	payload = (u16)mode;
-+	ret = fmc_send_cmd(fmdev, MOST_MODE_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Set stereo blending mode */
-+	payload = FM_STEREO_SOFT_BLEND;
-+	ret = fmc_send_cmd(fmdev, MOST_BLEND_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+/* Gets current RX stereo/mono mode */
-+u32 fm_rx_get_stereo_mono(struct fmdev *fmdev, u16 *mode)
-+{
-+	u16 curr_mode;
-+	u32 ret, resp_len;
-+
-+	if (mode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	ret = fmc_send_cmd(fmdev, MOST_MODE_SET, REG_RD, NULL, 2,
-+			&curr_mode, &resp_len);
-+	if (ret < 0)
-+		return ret;
-+
-+	*mode = be16_to_cpu(curr_mode);
-+
-+	return 0;
-+}
-+
-+/* Choose RX de-emphasis filter mode (50us/75us) */
-+u32 fm_rx_set_deemphasis_mode(struct fmdev *fmdev, u16 mode)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (mode != FM_RX_EMPHASIS_FILTER_50_USEC &&
-+			mode != FM_RX_EMPHASIS_FILTER_75_USEC) {
-+		fmerr("Invalid rx de-emphasis mode (%d)\n", mode);
-+		return -EINVAL;
-+	}
-+
-+	payload = mode;
-+	ret = fmc_send_cmd(fmdev, DEMPH_MODE_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->rx.deemphasis_mode = mode;
-+
-+	return 0;
-+}
-+
-+/* Gets current RX de-emphasis filter mode */
-+u32 fm_rx_get_deemph_mode(struct fmdev *fmdev, u16 *curr_deemphasis_mode)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (curr_deemphasis_mode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*curr_deemphasis_mode = fmdev->rx.deemphasis_mode;
-+
-+	return 0;
-+}
-+
-+/* Enable/Disable RX RDS */
-+u32 fm_rx_set_rds_mode(struct fmdev *fmdev, u8 rds_en_dis)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (rds_en_dis != FM_RDS_ENABLE && rds_en_dis != FM_RDS_DISABLE) {
-+		fmerr("Invalid rds option\n");
-+		return -EINVAL;
-+	}
-+
-+	if (rds_en_dis == FM_RDS_ENABLE
-+	    && fmdev->rx.rds.flag == FM_RDS_DISABLE) {
-+		/* Turn on RX RDS and RDS circuit */
-+		payload = FM_RX_PWR_SET_FM_AND_RDS_BLK_ON;
-+		ret = fmc_send_cmd(fmdev, POWER_SET, REG_WR, &payload,
-+				sizeof(payload), NULL, NULL);
-+		if (ret < 0)
-+			return ret;
-+
-+		/* Clear and reset RDS FIFO */
-+		payload = FM_RX_RDS_FLUSH_FIFO;
-+		ret = fmc_send_cmd(fmdev, RDS_CNTRL_SET, REG_WR, &payload,
-+		sizeof(payload), NULL, NULL);
-+		if (ret < 0)
-+			return ret;
-+
-+		/* Read flags - just to clear any pending interrupts. */
-+		ret = fmc_send_cmd(fmdev, FLAG_GET, REG_RD, NULL, 2,
-+				NULL, NULL);
-+		if (ret < 0)
-+			return ret;
-+
-+		/* Set RDS FIFO threshold value */
-+		payload = FM_RX_RDS_FIFO_THRESHOLD;
-+		ret = fmc_send_cmd(fmdev, RDS_MEM_SET, REG_WR, &payload,
-+		sizeof(payload), NULL, NULL);
-+		if (ret < 0)
-+			return ret;
-+
-+		/* Enable RDS interrupt */
-+		fmdev->irq_info.mask |= FM_RDS_EVENT;
-+		payload = fmdev->irq_info.mask;
-+		ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+				sizeof(payload), NULL, NULL);
-+		if (ret < 0) {
-+			fmdev->irq_info.mask &= ~FM_RDS_EVENT;
-+			return ret;
-+		}
-+
-+		/* Update our local flag */
-+		fmdev->rx.rds.flag = FM_RDS_ENABLE;
-+	} else if (rds_en_dis == FM_RDS_DISABLE
-+		   && fmdev->rx.rds.flag == FM_RDS_ENABLE) {
-+		/* Turn off RX RDS */
-+		payload = FM_RX_PWR_SET_FM_ON_RDS_OFF;
-+		ret = fmc_send_cmd(fmdev, POWER_SET, REG_WR, &payload,
-+				sizeof(payload), NULL, NULL);
-+		if (ret < 0)
-+			return ret;
-+
-+		/* Reset RDS pointers */
-+		fmdev->rx.rds.last_blk_idx = 0;
-+		fmdev->rx.rds.wr_idx = 0;
-+		fmdev->rx.rds.rd_idx = 0;
-+		fm_rx_reset_station_info(fmdev);
-+
-+		/* Update RDS local cache */
-+		fmdev->irq_info.mask &= ~(FM_RDS_EVENT);
-+		fmdev->rx.rds.flag = FM_RDS_DISABLE;
-+	}
-+
-+	return 0;
-+}
-+
-+/* Returns current RX RDS enable/disable status */
-+u32 fm_rx_get_rds_mode(struct fmdev *fmdev, u8 *curr_rds_en_dis)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (curr_rds_en_dis == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*curr_rds_en_dis = fmdev->rx.rds.flag;
-+
-+	return 0;
-+}
-+
-+/* Sets RDS operation mode (RDS/RDBS) */
-+u32 fm_rx_set_rds_system(struct fmdev *fmdev, u8 rds_mode)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (rds_mode != FM_RDS_SYSTEM_RDS && rds_mode != FM_RDS_SYSTEM_RBDS) {
-+		fmerr("Invalid rds mode\n");
-+		return -EINVAL;
-+	}
-+	/* Set RDS operation mode */
-+	payload = (u16)rds_mode;
-+	ret = fmc_send_cmd(fmdev, RDS_SYSTEM_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->rx.rds_mode = rds_mode;
-+
-+	return 0;
-+}
-+
-+/* Returns current RDS operation mode */
-+u32 fm_rx_get_rds_system(struct fmdev *fmdev, u8 *rds_mode)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (rds_mode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*rds_mode = fmdev->rx.rds_mode;
-+
-+	return 0;
-+}
-+
-+/* Configures Alternate Frequency switch mode */
-+u32 fm_rx_set_af_switch(struct fmdev *fmdev, u8 af_mode)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (af_mode != FM_RX_RDS_AF_SWITCH_MODE_ON &&
-+	    af_mode != FM_RX_RDS_AF_SWITCH_MODE_OFF) {
-+		fmerr("Invalid af mode\n");
-+		return -EINVAL;
-+	}
-+	/* Enable/disable low RSSI interrupt based on af_mode */
-+	if (af_mode == FM_RX_RDS_AF_SWITCH_MODE_ON)
-+		fmdev->irq_info.mask |= FM_LEV_EVENT;
-+	else
-+		fmdev->irq_info.mask &= ~FM_LEV_EVENT;
-+
-+	payload = fmdev->irq_info.mask;
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->rx.af_mode = af_mode;
-+
-+	return 0;
-+}
-+
-+/* Returns Alternate Frequency switch status */
-+u32 fm_rx_get_af_switch(struct fmdev *fmdev, u8 *af_mode)
-+{
-+	if (fmdev->curr_fmmode != FM_MODE_RX)
-+		return -EPERM;
-+
-+	if (af_mode == NULL) {
-+		fmerr("Invalid memory\n");
-+		return -ENOMEM;
-+	}
-+
-+	*af_mode = fmdev->rx.af_mode;
-+
-+	return 0;
-+}
-diff --git a/drivers/media/radio/wl128x/fmdrv_rx.h b/drivers/media/radio/wl128x/fmdrv_rx.h
-new file mode 100644
-index 0000000..329e62f
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_rx.h
-@@ -0,0 +1,59 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *  FM RX module header.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#ifndef _FMDRV_RX_H
-+#define _FMDRV_RX_H
-+
-+u32 fm_rx_set_freq(struct fmdev *, u32);
-+u32 fm_rx_set_mute_mode(struct fmdev *, u8);
-+u32 fm_rx_set_stereo_mono(struct fmdev *, u16);
-+u32 fm_rx_set_rds_mode(struct fmdev *, u8);
-+u32 fm_rx_set_rds_system(struct fmdev *, u8);
-+u32 fm_rx_set_volume(struct fmdev *, u16);
-+u32 fm_rx_set_rssi_threshold(struct fmdev *, short);
-+u32 fm_rx_set_region(struct fmdev *, u8);
-+u32 fm_rx_set_rfdepend_softmute(struct fmdev *, u8);
-+u32 fm_rx_set_deemphasis_mode(struct fmdev *, u16);
-+u32 fm_rx_set_af_switch(struct fmdev *, u8);
-+
-+void fm_rx_reset_rds_cache(struct fmdev *);
-+void fm_rx_reset_station_info(struct fmdev *);
-+
-+u32 fm_rx_seek(struct fmdev *, u32, u32, u32);
-+
-+u32 fm_rx_get_rds_mode(struct fmdev *, u8 *);
-+u32 fm_rx_get_rds_system(struct fmdev *, u8 *);
-+u32 fm_rx_get_mute_mode(struct fmdev *, u8 *);
-+u32 fm_rx_get_volume(struct fmdev *, u16 *);
-+u32 fm_rx_get_band_freq_range(struct fmdev *,
-+					u32 *, u32 *);
-+u32 fm_rx_get_stereo_mono(struct fmdev *, u16 *);
-+u32 fm_rx_get_rssi_level(struct fmdev *, u16 *);
-+u32 fm_rx_get_rssi_threshold(struct fmdev *, short *);
-+u32 fm_rx_get_rfdepend_softmute(struct fmdev *, u8 *);
-+u32 fm_rx_get_deemph_mode(struct fmdev *, u16 *);
-+u32 fm_rx_get_af_switch(struct fmdev *, u8 *);
-+void fm_rx_get_region(struct fmdev *, u8 *);
-+
-+u32 fm_rx_set_chanl_spacing(struct fmdev *, u8);
-+u32 fm_rx_get_chanl_spacing(struct fmdev *, u8 *);
-+#endif
-+
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch b/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch
deleted file mode 100644
index 52b409f..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch
+++ /dev/null
@@ -1,494 +0,0 @@
-From 87d399bad67bdff67c1601fbb8e54deb5e0cf7e0 Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:25 +0000
-Subject: [PATCH 11/15] drivers:media:radio: wl128x: FM driver TX sources
-
-This has implementation for FM TX functionality.
-It communicates with FM V4l2 module and FM common module.
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/wl128x/fmdrv_tx.c |  425 +++++++++++++++++++++++++++++++++
- drivers/media/radio/wl128x/fmdrv_tx.h |   37 +++
- 2 files changed, 462 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/radio/wl128x/fmdrv_tx.c
- create mode 100644 drivers/media/radio/wl128x/fmdrv_tx.h
-
-diff --git a/drivers/media/radio/wl128x/fmdrv_tx.c b/drivers/media/radio/wl128x/fmdrv_tx.c
-new file mode 100644
-index 0000000..be54068
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_tx.c
-@@ -0,0 +1,425 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *  This sub-module of FM driver implements FM TX functionality.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#include <linux/delay.h>
-+#include "fmdrv.h"
-+#include "fmdrv_common.h"
-+#include "fmdrv_tx.h"
-+
-+u32 fm_tx_set_stereo_mono(struct fmdev *fmdev, u16 mode)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->tx_data.aud_mode == mode)
-+		return 0;
-+
-+	fmdbg("stereo mode: %d\n", mode);
-+
-+	/* Set Stereo/Mono mode */
-+	payload = (1 - mode);
-+	ret = fmc_send_cmd(fmdev, MONO_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fmdev->tx_data.aud_mode = mode;
-+
-+	return ret;
-+}
-+
-+static u32 set_rds_text(struct fmdev *fmdev, u8 *rds_text)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	ret = fmc_send_cmd(fmdev, RDS_DATA_SET, REG_WR, rds_text,
-+			strlen(rds_text), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Scroll mode */
-+	payload = (u16)0x1;
-+	ret = fmc_send_cmd(fmdev, DISPLAY_MODE, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+static u32 set_rds_data_mode(struct fmdev *fmdev, u8 mode)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	/* Setting unique PI TODO: how unique? */
-+	payload = (u16)0xcafe;
-+	ret = fmc_send_cmd(fmdev, PI_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Set decoder id */
-+	payload = (u16)0xa;
-+	ret = fmc_send_cmd(fmdev, DI_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* TODO: RDS_MODE_GET? */
-+	return 0;
-+}
-+
-+static u32 set_rds_len(struct fmdev *fmdev, u8 type, u16 len)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	len |= type << 8;
-+	payload = len;
-+	ret = fmc_send_cmd(fmdev, RDS_CONFIG_DATA_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* TODO: LENGTH_GET? */
-+	return 0;
-+}
-+
-+u32 fm_tx_set_rds_mode(struct fmdev *fmdev, u8 rds_en_dis)
-+{
-+	u16 payload;
-+	u32 ret;
-+	u8 rds_text[] = "Zoom2\n";
-+
-+	fmdbg("rds_en_dis:%d(E:%d, D:%d)\n", rds_en_dis,
-+		   FM_RDS_ENABLE, FM_RDS_DISABLE);
-+
-+	if (rds_en_dis == FM_RDS_ENABLE) {
-+		/* Set RDS length */
-+		set_rds_len(fmdev, 0, strlen(rds_text));
-+
-+		/* Set RDS text */
-+		set_rds_text(fmdev, rds_text);
-+
-+		/* Set RDS mode */
-+		set_rds_data_mode(fmdev, 0x0);
-+	}
-+
-+	/* Send command to enable RDS */
-+	if (rds_en_dis == FM_RDS_ENABLE)
-+		payload = 0x01;
-+	else
-+		payload = 0x00;
-+
-+	ret = fmc_send_cmd(fmdev, RDS_DATA_ENB, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	if (rds_en_dis == FM_RDS_ENABLE) {
-+		/* Set RDS length */
-+		set_rds_len(fmdev, 0, strlen(rds_text));
-+
-+		/* Set RDS text */
-+		set_rds_text(fmdev, rds_text);
-+	}
-+	fmdev->tx_data.rds.flag = rds_en_dis;
-+
-+	return 0;
-+}
-+
-+u32 fm_tx_set_radio_text(struct fmdev *fmdev, u8 *rds_text, u8 rds_type)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX)
-+		return -EPERM;
-+
-+	fm_tx_set_rds_mode(fmdev, 0);
-+
-+	/* Set RDS length */
-+	set_rds_len(fmdev, rds_type, strlen(rds_text));
-+
-+	/* Set RDS text */
-+	set_rds_text(fmdev, rds_text);
-+
-+	/* Set RDS mode */
-+	set_rds_data_mode(fmdev, 0x0);
-+
-+	payload = 1;
-+	ret = fmc_send_cmd(fmdev, RDS_DATA_ENB, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+u32 fm_tx_set_af(struct fmdev *fmdev, u32 af)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX)
-+		return -EPERM;
-+
-+	fmdbg("AF: %d\n", af);
-+
-+	af = (af - 87500) / 100;
-+	payload = (u16)af;
-+	ret = fmc_send_cmd(fmdev, TA_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+u32 fm_tx_set_region(struct fmdev *fmdev, u8 region)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	if (region != FM_BAND_EUROPE_US && region != FM_BAND_JAPAN) {
-+		fmerr("Invalid band\n");
-+		return -EINVAL;
-+	}
-+
-+	/* Send command to set the band */
-+	payload = (u16)region;
-+	ret = fmc_send_cmd(fmdev, TX_BAND_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+u32 fm_tx_set_mute_mode(struct fmdev *fmdev, u8 mute_mode_toset)
-+{
-+	u16 payload;
-+	u32 ret;
-+
-+	fmdbg("tx: mute mode %d\n", mute_mode_toset);
-+
-+	payload = mute_mode_toset;
-+	ret = fmc_send_cmd(fmdev, MUTE, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+/* Set TX Audio I/O */
-+static u32 set_audio_io(struct fmdev *fmdev)
-+{
-+	struct fmtx_data *tx = &fmdev->tx_data;
-+	u16 payload;
-+	u32 ret;
-+
-+	/* Set Audio I/O Enable */
-+	payload = tx->audio_io;
-+	ret = fmc_send_cmd(fmdev, AUDIO_IO_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* TODO: is audio set? */
-+	return 0;
-+}
-+
-+/* Start TX Transmission */
-+static u32 enable_xmit(struct fmdev *fmdev, u8 new_xmit_state)
-+{
-+	struct fmtx_data *tx = &fmdev->tx_data;
-+	unsigned long timeleft;
-+	u16 payload;
-+	u32 ret;
-+
-+	/* Enable POWER_ENB interrupts */
-+	payload = FM_POW_ENB_EVENT;
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Set Power Enable */
-+	payload = new_xmit_state;
-+	ret = fmc_send_cmd(fmdev, POWER_ENB_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* Wait for Power Enabled */
-+	init_completion(&fmdev->maintask_comp);
-+	timeleft = wait_for_completion_timeout(&fmdev->maintask_comp,
-+			FM_DRV_TX_TIMEOUT);
-+	if (!timeleft) {
-+		fmerr("Timeout(%d sec),didn't get tune ended interrupt\n",
-+			   jiffies_to_msecs(FM_DRV_TX_TIMEOUT) / 1000);
-+		return -ETIMEDOUT;
-+	}
-+
-+	set_bit(FM_CORE_TX_XMITING, &fmdev->flag);
-+	tx->xmit_state = new_xmit_state;
-+
-+	return 0;
-+}
-+
-+/* Set TX power level */
-+u32 fm_tx_set_pwr_lvl(struct fmdev *fmdev, u8 new_pwr_lvl)
-+{
-+	u16 payload;
-+	struct fmtx_data *tx = &fmdev->tx_data;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX)
-+		return -EPERM;
-+	fmdbg("tx: pwr_level_to_set %ld\n", (long int)new_pwr_lvl);
-+
-+	/* If the core isn't ready update global variable */
-+	if (!test_bit(FM_CORE_READY, &fmdev->flag)) {
-+		tx->pwr_lvl = new_pwr_lvl;
-+		return 0;
-+	}
-+
-+	/* Set power level: Application will specify power level value in
-+	 * units of dB/uV, whereas range and step are specific to FM chip.
-+	 * For TI's WL chips, convert application specified power level value
-+	 * to chip specific value by subtracting 122 from it. Refer to TI FM
-+	 * data sheet for details.
-+	 * */
-+
-+	payload = (FM_PWR_LVL_HIGH - new_pwr_lvl);
-+	ret = fmc_send_cmd(fmdev, POWER_LEV_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	/* TODO: is the power level set? */
-+	tx->pwr_lvl = new_pwr_lvl;
-+
-+	return 0;
-+}
-+
-+/*
-+ * Sets FM TX pre-emphasis filter value (OFF, 50us, or 75us)
-+ * Convert V4L2 specified filter values to chip specific filter values.
-+ */
-+u32 fm_tx_set_preemph_filter(struct fmdev *fmdev, u32 preemphasis)
-+{
-+	struct fmtx_data *tx = &fmdev->tx_data;
-+	u16 payload;
-+	u32 ret;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX)
-+		return -EPERM;
-+
-+	switch (preemphasis) {
-+	case V4L2_PREEMPHASIS_DISABLED:
-+		payload = FM_TX_PREEMPH_OFF;
-+		break;
-+	case V4L2_PREEMPHASIS_50_uS:
-+		payload = FM_TX_PREEMPH_50US;
-+		break;
-+	case V4L2_PREEMPHASIS_75_uS:
-+		payload = FM_TX_PREEMPH_75US;
-+		break;
-+	}
-+
-+	ret = fmc_send_cmd(fmdev, PREMPH_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	tx->preemph = payload;
-+
-+	return ret;
-+}
-+
-+/* Get the TX tuning capacitor value.*/
-+u32 fm_tx_get_tune_cap_val(struct fmdev *fmdev)
-+{
-+	u16 curr_val;
-+	u32 ret, resp_len;
-+
-+	if (fmdev->curr_fmmode != FM_MODE_TX)
-+		return -EPERM;
-+
-+	ret = fmc_send_cmd(fmdev, READ_FMANT_TUNE_VALUE, REG_RD,
-+			NULL, sizeof(curr_val), &curr_val, &resp_len);
-+	if (ret < 0)
-+		return ret;
-+
-+	curr_val = be16_to_cpu(curr_val);
-+
-+	return curr_val;
-+}
-+
-+/* Set TX Frequency */
-+u32 fm_tx_set_freq(struct fmdev *fmdev, u32 freq_to_set)
-+{
-+	struct fmtx_data *tx = &fmdev->tx_data;
-+	u16 payload, chanl_index;
-+	u32 ret;
-+
-+	if (test_bit(FM_CORE_TX_XMITING, &fmdev->flag)) {
-+		enable_xmit(fmdev, 0);
-+		clear_bit(FM_CORE_TX_XMITING, &fmdev->flag);
-+	}
-+
-+	/* Enable FR, BL interrupts */
-+	payload = (FM_FR_EVENT | FM_BL_EVENT);
-+	ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	tx->tx_frq = (unsigned long)freq_to_set;
-+	fmdbg("tx: freq_to_set %ld\n", (long int)tx->tx_frq);
-+
-+	chanl_index = freq_to_set / 10;
-+
-+	/* Set current tuner channel */
-+	payload = chanl_index;
-+	ret = fmc_send_cmd(fmdev, CHANL_SET, REG_WR, &payload,
-+			sizeof(payload), NULL, NULL);
-+	if (ret < 0)
-+		return ret;
-+
-+	fm_tx_set_pwr_lvl(fmdev, tx->pwr_lvl);
-+	fm_tx_set_preemph_filter(fmdev, tx->preemph);
-+
-+	tx->audio_io = 0x01;	/* I2S */
-+	set_audio_io(fmdev);
-+
-+	enable_xmit(fmdev, 0x01);	/* Enable transmission */
-+
-+	tx->aud_mode = FM_STEREO_MODE;
-+	tx->rds.flag = FM_RDS_DISABLE;
-+
-+	return 0;
-+}
-+
-diff --git a/drivers/media/radio/wl128x/fmdrv_tx.h b/drivers/media/radio/wl128x/fmdrv_tx.h
-new file mode 100644
-index 0000000..e393a2b
---- /dev/null
-+++ b/drivers/media/radio/wl128x/fmdrv_tx.h
-@@ -0,0 +1,37 @@
-+/*
-+ *  FM Driver for Connectivity chip of Texas Instruments.
-+ *  FM TX module header.
-+ *
-+ *  Copyright (C) 2011 Texas Instruments
-+ *
-+ *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#ifndef _FMDRV_TX_H
-+#define _FMDRV_TX_H
-+
-+u32 fm_tx_set_freq(struct fmdev *, u32);
-+u32 fm_tx_set_pwr_lvl(struct fmdev *, u8);
-+u32 fm_tx_set_region(struct fmdev *, u8);
-+u32 fm_tx_set_mute_mode(struct fmdev *, u8);
-+u32 fm_tx_set_stereo_mono(struct fmdev *, u16);
-+u32 fm_tx_set_rds_mode(struct fmdev *, u8);
-+u32 fm_tx_set_radio_text(struct fmdev *, u8 *, u8);
-+u32 fm_tx_set_af(struct fmdev *, u32);
-+u32 fm_tx_set_preemph_filter(struct fmdev *, u32);
-+u32 fm_tx_get_tune_cap_val(struct fmdev *);
-+
-+#endif
-+
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0012-drivers-media-radio-wl128x-Kconfig-Makefile-for-wl12.patch b/recipes-kernel/linux/linux-omap/wl1271/0012-drivers-media-radio-wl128x-Kconfig-Makefile-for-wl12.patch
deleted file mode 100644
index 2e5fda8..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0012-drivers-media-radio-wl128x-Kconfig-Makefile-for-wl12.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 949d2c98bb76cc321e5ef5a96a632d831e5953bf Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:26 +0000
-Subject: [PATCH 12/15] drivers:media:radio: wl128x: Kconfig & Makefile for wl128x driver
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/wl128x/Kconfig  |   17 +++++++++++++++++
- drivers/media/radio/wl128x/Makefile |    6 ++++++
- 2 files changed, 23 insertions(+), 0 deletions(-)
- create mode 100644 drivers/media/radio/wl128x/Kconfig
- create mode 100644 drivers/media/radio/wl128x/Makefile
-
-diff --git a/drivers/media/radio/wl128x/Kconfig b/drivers/media/radio/wl128x/Kconfig
-new file mode 100644
-index 0000000..749f67b
---- /dev/null
-+++ b/drivers/media/radio/wl128x/Kconfig
-@@ -0,0 +1,17 @@
-+#
-+# TI's wl128x FM driver based on TI's ST driver.
-+#
-+menu "Texas Instruments WL128x FM driver (ST based)"
-+config RADIO_WL128X
-+	tristate "Texas Instruments WL128x FM Radio"
-+	depends on VIDEO_V4L2 && RFKILL
-+	select TI_ST
-+	help
-+	Choose Y here if you have this FM radio chip.
-+
-+	In order to control your radio card, you will need to use programs
-+	that are compatible with the Video For Linux 2 API.  Information on
-+	this API and pointers to "v4l2" programs may be found at
-+	<file:Documentation/video4linux/API.html>.
-+
-+endmenu
-diff --git a/drivers/media/radio/wl128x/Makefile b/drivers/media/radio/wl128x/Makefile
-new file mode 100644
-index 0000000..32a0ead
---- /dev/null
-+++ b/drivers/media/radio/wl128x/Makefile
-@@ -0,0 +1,6 @@
-+#
-+# Makefile for TI's shared transport driver based wl128x
-+# FM radio.
-+#
-+obj-$(CONFIG_RADIO_WL128X)	+= fm_drv.o
-+fm_drv-objs		:= fmdrv_common.o fmdrv_rx.o fmdrv_tx.o fmdrv_v4l2.o
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0013-drivers-media-radio-Update-Kconfig-and-Makefile-for-.patch b/recipes-kernel/linux/linux-omap/wl1271/0013-drivers-media-radio-Update-Kconfig-and-Makefile-for-.patch
deleted file mode 100644
index ea257a4..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0013-drivers-media-radio-Update-Kconfig-and-Makefile-for-.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 340d2fa4ff21c43309e70cc6b4a88f9ee6c23d95 Mon Sep 17 00:00:00 2001
-From: Manjunatha Halli <manjunatha_halli at ti.com>
-Date: Tue, 11 Jan 2011 11:31:27 +0000
-Subject: [PATCH 13/15] drivers:media:radio: Update Kconfig and Makefile for wl128x FM driver.
-
-Signed-off-by: Manjunatha Halli <manjunatha_halli at ti.com>
-Reviewed-by: Hans Verkuil <hverkuil at xs4all.nl>
----
- drivers/media/radio/Kconfig  |    3 +++
- drivers/media/radio/Makefile |    1 +
- 2 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig
-index 83567b8..4529bc7 100644
---- a/drivers/media/radio/Kconfig
-+++ b/drivers/media/radio/Kconfig
-@@ -452,4 +452,7 @@ config RADIO_TIMBERDALE
- 	  found behind the Timberdale FPGA on the Russellville board.
- 	  Enabling this driver will automatically select the DSP and tuner.
- 
-+# TI's ST based wl128x FM radio
-+source "drivers/media/radio/wl128x/Kconfig"
-+
- endif # RADIO_ADAPTERS
-diff --git a/drivers/media/radio/Makefile b/drivers/media/radio/Makefile
-index f615583..b71f448 100644
---- a/drivers/media/radio/Makefile
-+++ b/drivers/media/radio/Makefile
-@@ -26,5 +26,6 @@ obj-$(CONFIG_RADIO_TEA5764) += radio-tea5764.o
- obj-$(CONFIG_RADIO_SAA7706H) += saa7706h.o
- obj-$(CONFIG_RADIO_TEF6862) += tef6862.o
- obj-$(CONFIG_RADIO_TIMBERDALE) += radio-timb.o
-+obj-$(CONFIG_RADIO_WL128X) += wl128x/
- 
- EXTRA_CFLAGS += -Isound
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0014-drivers-misc-ti-st-change-protocol-parse-logic.patch b/recipes-kernel/linux/linux-omap/wl1271/0014-drivers-misc-ti-st-change-protocol-parse-logic.patch
deleted file mode 100644
index c16dc45..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0014-drivers-misc-ti-st-change-protocol-parse-logic.patch
+++ /dev/null
@@ -1,900 +0,0 @@
-From 46b2c4077bedb96a38cdceff88f2c9b0a9923a8c Mon Sep 17 00:00:00 2001
-From: Pavan Savoy <pavan_savoy at ti.com>
-Date: Tue, 4 Jan 2011 10:59:47 +0000
-Subject: [PATCH 14/15] drivers:misc:ti-st: change protocol parse logic
-
-TI shared transport driver had to specifically know the
-protocol headers for each type of data it can receive to
-properly re-assemble data if its fragmented during UART
-transaction or fragment if the data is an assembly of
-
-different protocol data.
-
-Now the individual protocol drivers provide enough header
-information for shared transport driver to do this in a
-generic way applicable for all protocols.
-
-Signed-off-by: Pavan Savoy <pavan_savoy at ti.com>
----
- drivers/misc/ti-st/st_core.c |  355 +++++++++++++-----------------------------
- drivers/misc/ti-st/st_kim.c  |   56 ++++----
- include/linux/ti_wilink_st.h |   40 ++++--
- 3 files changed, 167 insertions(+), 284 deletions(-)
-
-diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c
-index f9aad06..84d73c5 100644
---- a/drivers/misc/ti-st/st_core.c
-+++ b/drivers/misc/ti-st/st_core.c
-@@ -25,10 +25,9 @@
- #include <linux/init.h>
- #include <linux/tty.h>
- 
--/* understand BT, FM and GPS for now */
--#include <net/bluetooth/bluetooth.h>
--#include <net/bluetooth/hci_core.h>
--#include <net/bluetooth/hci.h>
-+#include <linux/seq_file.h>
-+#include <linux/skbuff.h>
-+
- #include <linux/ti_wilink_st.h>
- 
- /* function pointer pointing to either,
-@@ -38,21 +37,20 @@
- void (*st_recv) (void*, const unsigned char*, long);
- 
- /********************************************************************/
--#if 0
--/* internal misc functions */
--bool is_protocol_list_empty(void)
-+static void add_channel_to_table(struct st_data_s *st_gdata,
-+		struct st_proto_s *new_proto)
- {
--	unsigned char i = 0;
--	pr_debug(" %s ", __func__);
--	for (i = 0; i < ST_MAX; i++) {
--		if (st_gdata->list[i] != NULL)
--			return ST_NOTEMPTY;
--		/* not empty */
--	}
--	/* list empty */
--	return ST_EMPTY;
-+	pr_info("%s: id %d\n", __func__, new_proto->chnl_id);
-+	/* list now has the channel id as index itself */
-+	st_gdata->list[new_proto->chnl_id] = new_proto;
-+}
-+
-+static void remove_channel_from_table(struct st_data_s *st_gdata,
-+		struct st_proto_s *proto)
-+{
-+	pr_info("%s: id %d\n", __func__, proto->chnl_id);
-+	st_gdata->list[proto->chnl_id] = NULL;
- }
--#endif
- 
- /* can be called in from
-  * -- KIM (during fw download)
-@@ -82,15 +80,15 @@ int st_int_write(struct st_data_s *st_gdata,
-  * push the skb received to relevant
-  * protocol stacks
-  */
--void st_send_frame(enum proto_type protoid, struct st_data_s *st_gdata)
-+void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata)
- {
--	pr_info(" %s(prot:%d) ", __func__, protoid);
-+	pr_info(" %s(prot:%d) ", __func__, chnl_id);
- 
- 	if (unlikely
- 	    (st_gdata == NULL || st_gdata->rx_skb == NULL
--	     || st_gdata->list[protoid] == NULL)) {
--		pr_err("protocol %d not registered, no data to send?",
--			   protoid);
-+	     || st_gdata->list[chnl_id] == NULL)) {
-+		pr_err("chnl_id %d not registered, no data to send?",
-+			   chnl_id);
- 		kfree_skb(st_gdata->rx_skb);
- 		return;
- 	}
-@@ -99,17 +97,17 @@ void st_send_frame(enum proto_type protoid, struct st_data_s *st_gdata)
- 	 * - should be just skb_queue_tail for the
- 	 *   protocol stack driver
- 	 */
--	if (likely(st_gdata->list[protoid]->recv != NULL)) {
-+	if (likely(st_gdata->list[chnl_id]->recv != NULL)) {
- 		if (unlikely
--			(st_gdata->list[protoid]->recv
--			(st_gdata->list[protoid]->priv_data, st_gdata->rx_skb)
-+			(st_gdata->list[chnl_id]->recv
-+			(st_gdata->list[chnl_id]->priv_data, st_gdata->rx_skb)
- 			     != 0)) {
--			pr_err(" proto stack %d's ->recv failed", protoid);
-+			pr_err(" proto stack %d's ->recv failed", chnl_id);
- 			kfree_skb(st_gdata->rx_skb);
- 			return;
- 		}
- 	} else {
--		pr_err(" proto stack %d's ->recv null", protoid);
-+		pr_err(" proto stack %d's ->recv null", chnl_id);
- 		kfree_skb(st_gdata->rx_skb);
- 	}
- 	return;
-@@ -124,7 +122,7 @@ void st_reg_complete(struct st_data_s *st_gdata, char err)
- {
- 	unsigned char i = 0;
- 	pr_info(" %s ", __func__);
--	for (i = 0; i < ST_MAX; i++) {
-+	for (i = 0; i < ST_MAX_CHANNELS; i++) {
- 		if (likely(st_gdata != NULL && st_gdata->list[i] != NULL &&
- 			   st_gdata->list[i]->reg_complete_cb != NULL))
- 			st_gdata->list[i]->reg_complete_cb
-@@ -133,7 +131,7 @@ void st_reg_complete(struct st_data_s *st_gdata, char err)
- }
- 
- static inline int st_check_data_len(struct st_data_s *st_gdata,
--	int protoid, int len)
-+	unsigned char chnl_id, int len)
- {
- 	int room = skb_tailroom(st_gdata->rx_skb);
- 
-@@ -144,7 +142,7 @@ static inline int st_check_data_len(struct st_data_s *st_gdata,
- 		 * has zero length payload. So, ask ST CORE to
- 		 * forward the packet to protocol driver (BT/FM/GPS)
- 		 */
--		st_send_frame(protoid, st_gdata);
-+		st_send_frame(chnl_id, st_gdata);
- 
- 	} else if (len > room) {
- 		/* Received packet's payload length is larger.
-@@ -157,7 +155,7 @@ static inline int st_check_data_len(struct st_data_s *st_gdata,
- 		/* Packet header has non-zero payload length and
- 		 * we have enough space in created skb. Lets read
- 		 * payload data */
--		st_gdata->rx_state = ST_BT_W4_DATA;
-+		st_gdata->rx_state = ST_W4_DATA;
- 		st_gdata->rx_count = len;
- 		return len;
- 	}
-@@ -167,6 +165,7 @@ static inline int st_check_data_len(struct st_data_s *st_gdata,
- 	st_gdata->rx_state = ST_W4_PACKET_TYPE;
- 	st_gdata->rx_skb = NULL;
- 	st_gdata->rx_count = 0;
-+	st_gdata->rx_chnl = 0;
- 
- 	return 0;
- }
-@@ -208,13 +207,10 @@ void st_int_recv(void *disc_data,
- 	const unsigned char *data, long count)
- {
- 	char *ptr;
--	struct hci_event_hdr *eh;
--	struct hci_acl_hdr *ah;
--	struct hci_sco_hdr *sh;
--	struct fm_event_hdr *fm;
--	struct gps_event_hdr *gps;
--	int len = 0, type = 0, dlen = 0;
--	static enum proto_type protoid = ST_MAX;
-+	struct st_proto_s *proto;
-+	unsigned short payload_len = 0;
-+	int len = 0, type = 0;
-+	unsigned char *plen;
- 	struct st_data_s *st_gdata = (struct st_data_s *)disc_data;
- 
- 	ptr = (char *)data;
-@@ -242,64 +238,36 @@ void st_int_recv(void *disc_data,
- 
- 			/* Check ST RX state machine , where are we? */
- 			switch (st_gdata->rx_state) {
--
--				/* Waiting for complete packet ? */
--			case ST_BT_W4_DATA:
-+			/* Waiting for complete packet ? */
-+			case ST_W4_DATA:
- 				pr_debug("Complete pkt received");
--
- 				/* Ask ST CORE to forward
- 				 * the packet to protocol driver */
--				st_send_frame(protoid, st_gdata);
-+				st_send_frame(st_gdata->rx_chnl, st_gdata);
- 
- 				st_gdata->rx_state = ST_W4_PACKET_TYPE;
- 				st_gdata->rx_skb = NULL;
--				protoid = ST_MAX;	/* is this required ? */
--				continue;
--
--				/* Waiting for Bluetooth event header ? */
--			case ST_BT_W4_EVENT_HDR:
--				eh = (struct hci_event_hdr *)st_gdata->rx_skb->
--				    data;
--
--				pr_debug("Event header: evt 0x%2.2x"
--					   "plen %d", eh->evt, eh->plen);
--
--				st_check_data_len(st_gdata, protoid, eh->plen);
--				continue;
--
--				/* Waiting for Bluetooth acl header ? */
--			case ST_BT_W4_ACL_HDR:
--				ah = (struct hci_acl_hdr *)st_gdata->rx_skb->
--				    data;
--				dlen = __le16_to_cpu(ah->dlen);
--
--				pr_info("ACL header: dlen %d", dlen);
--
--				st_check_data_len(st_gdata, protoid, dlen);
--				continue;
--
--				/* Waiting for Bluetooth sco header ? */
--			case ST_BT_W4_SCO_HDR:
--				sh = (struct hci_sco_hdr *)st_gdata->rx_skb->
--				    data;
--
--				pr_info("SCO header: dlen %d", sh->dlen);
--
--				st_check_data_len(st_gdata, protoid, sh->dlen);
--				continue;
--			case ST_FM_W4_EVENT_HDR:
--				fm = (struct fm_event_hdr *)st_gdata->rx_skb->
--				    data;
--				pr_info("FM Header: ");
--				st_check_data_len(st_gdata, ST_FM, fm->plen);
- 				continue;
--				/* TODO : Add GPS packet machine logic here */
--			case ST_GPS_W4_EVENT_HDR:
--				/* [0x09 pkt hdr][R/W byte][2 byte len] */
--				gps = (struct gps_event_hdr *)st_gdata->rx_skb->
--				     data;
--				pr_info("GPS Header: ");
--				st_check_data_len(st_gdata, ST_GPS, gps->plen);
-+			/* parse the header to know details */
-+			case ST_W4_HEADER:
-+				proto = st_gdata->list[st_gdata->rx_chnl];
-+				plen =
-+				&st_gdata->rx_skb->data
-+				[proto->offset_len_in_hdr];
-+				pr_info("plen pointing to %x\n", *plen);
-+				if (proto->len_size == 1)/* 1 byte len field */
-+					payload_len = *(unsigned char *)plen;
-+				else if (proto->len_size == 2)
-+					payload_len =
-+					__le16_to_cpu(*(unsigned short *)plen);
-+				else
-+					pr_info("%s: invalid length "
-+					"for id %d\n",
-+					__func__, proto->chnl_id);
-+				st_check_data_len(st_gdata, proto->chnl_id,
-+						payload_len);
-+				pr_info("off %d, pay len %d\n",
-+					proto->offset_len_in_hdr, payload_len);
- 				continue;
- 			}	/* end of switch rx_state */
- 		}
-@@ -308,51 +276,6 @@ void st_int_recv(void *disc_data,
- 		/* Check first byte of packet and identify module
- 		 * owner (BT/FM/GPS) */
- 		switch (*ptr) {
--
--			/* Bluetooth event packet? */
--		case HCI_EVENT_PKT:
--			pr_info("Event packet");
--			st_gdata->rx_state = ST_BT_W4_EVENT_HDR;
--			st_gdata->rx_count = HCI_EVENT_HDR_SIZE;
--			type = HCI_EVENT_PKT;
--			protoid = ST_BT;
--			break;
--
--			/* Bluetooth acl packet? */
--		case HCI_ACLDATA_PKT:
--			pr_info("ACL packet");
--			st_gdata->rx_state = ST_BT_W4_ACL_HDR;
--			st_gdata->rx_count = HCI_ACL_HDR_SIZE;
--			type = HCI_ACLDATA_PKT;
--			protoid = ST_BT;
--			break;
--
--			/* Bluetooth sco packet? */
--		case HCI_SCODATA_PKT:
--			pr_info("SCO packet");
--			st_gdata->rx_state = ST_BT_W4_SCO_HDR;
--			st_gdata->rx_count = HCI_SCO_HDR_SIZE;
--			type = HCI_SCODATA_PKT;
--			protoid = ST_BT;
--			break;
--
--			/* Channel 8(FM) packet? */
--		case ST_FM_CH8_PKT:
--			pr_info("FM CH8 packet");
--			type = ST_FM_CH8_PKT;
--			st_gdata->rx_state = ST_FM_W4_EVENT_HDR;
--			st_gdata->rx_count = FM_EVENT_HDR_SIZE;
--			protoid = ST_FM;
--			break;
--
--			/* Channel 9(GPS) packet? */
--		case 0x9:	/*ST_LL_GPS_CH9_PKT */
--			pr_info("GPS CH9 packet");
--			type = 0x9;	/* ST_LL_GPS_CH9_PKT; */
--			protoid = ST_GPS;
--			st_gdata->rx_state = ST_GPS_W4_EVENT_HDR;
--			st_gdata->rx_count = 3;	/* GPS_EVENT_HDR_SIZE -1*/
--			break;
- 		case LL_SLEEP_IND:
- 		case LL_SLEEP_ACK:
- 		case LL_WAKE_UP_IND:
-@@ -373,57 +296,22 @@ void st_int_recv(void *disc_data,
- 			continue;
- 			/* Unknow packet? */
- 		default:
--			pr_err("Unknown packet type %2.2x", (__u8) *ptr);
--			ptr++;
--			count--;
--			continue;
-+			type = *ptr;
-+			st_gdata->rx_skb = alloc_skb(
-+					st_gdata->list[type]->max_frame_size,
-+					GFP_ATOMIC);
-+			skb_reserve(st_gdata->rx_skb,
-+					st_gdata->list[type]->reserve);
-+			/* next 2 required for BT only */
-+			st_gdata->rx_skb->cb[0] = type; /*pkt_type*/
-+			st_gdata->rx_skb->cb[1] = 0; /*incoming*/
-+			st_gdata->rx_chnl = *ptr;
-+			st_gdata->rx_state = ST_W4_HEADER;
-+			st_gdata->rx_count = st_gdata->list[type]->hdr_len;
-+			pr_info("rx_count %ld\n", st_gdata->rx_count);
- 		};
- 		ptr++;
- 		count--;
--
--		switch (protoid) {
--		case ST_BT:
--			/* Allocate new packet to hold received data */
--			st_gdata->rx_skb =
--			    bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
--			if (!st_gdata->rx_skb) {
--				pr_err("Can't allocate mem for new packet");
--				st_gdata->rx_state = ST_W4_PACKET_TYPE;
--				st_gdata->rx_count = 0;
--				return;
--			}
--			bt_cb(st_gdata->rx_skb)->pkt_type = type;
--			break;
--		case ST_FM:	/* for FM */
--			st_gdata->rx_skb =
--			    alloc_skb(FM_MAX_FRAME_SIZE, GFP_ATOMIC);
--			if (!st_gdata->rx_skb) {
--				pr_err("Can't allocate mem for new packet");
--				st_gdata->rx_state = ST_W4_PACKET_TYPE;
--				st_gdata->rx_count = 0;
--				return;
--			}
--			/* place holder 0x08 */
--			skb_reserve(st_gdata->rx_skb, 1);
--			st_gdata->rx_skb->cb[0] = ST_FM_CH8_PKT;
--			break;
--		case ST_GPS:
--			/* for GPS */
--			st_gdata->rx_skb =
--			    alloc_skb(100 /*GPS_MAX_FRAME_SIZE */ , GFP_ATOMIC);
--			if (!st_gdata->rx_skb) {
--				pr_err("Can't allocate mem for new packet");
--				st_gdata->rx_state = ST_W4_PACKET_TYPE;
--				st_gdata->rx_count = 0;
--				return;
--			}
--			/* place holder 0x09 */
--			skb_reserve(st_gdata->rx_skb, 1);
--			st_gdata->rx_skb->cb[0] = 0x09;	/*ST_GPS_CH9_PKT; */
--			break;
--		case ST_MAX:
--			break;
--		}
- 	}
- 	pr_debug("done %s", __func__);
- 	return;
-@@ -565,20 +453,28 @@ long st_register(struct st_proto_s *new_proto)
- 	unsigned long flags = 0;
- 
- 	st_kim_ref(&st_gdata, 0);
--	pr_info("%s(%d) ", __func__, new_proto->type);
-+	pr_info("%s(%d) ", __func__, new_proto->chnl_id);
- 	if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL
- 	    || new_proto->reg_complete_cb == NULL) {
- 		pr_err("gdata/new_proto/recv or reg_complete_cb not ready");
-+		if (st_gdata == NULL)
-+			pr_err("error 1\n");
-+		if (new_proto == NULL)
-+			pr_err("error 2\n");
-+		if (new_proto->recv == NULL)
-+			pr_err("error 3\n");
-+		if (new_proto->reg_complete_cb == NULL)
-+			pr_err("erro 4\n");
- 		return -1;
- 	}
- 
--	if (new_proto->type < ST_BT || new_proto->type >= ST_MAX) {
--		pr_err("protocol %d not supported", new_proto->type);
-+	if (new_proto->chnl_id >= ST_MAX_CHANNELS) {
-+		pr_err("chnl_id %d not supported", new_proto->chnl_id);
- 		return -EPROTONOSUPPORT;
- 	}
- 
--	if (st_gdata->list[new_proto->type] != NULL) {
--		pr_err("protocol %d already registered", new_proto->type);
-+	if (st_gdata->list[new_proto->chnl_id] != NULL) {
-+		pr_err("chnl_id %d already registered", new_proto->chnl_id);
- 		return -EALREADY;
- 	}
- 
-@@ -586,11 +482,11 @@ long st_register(struct st_proto_s *new_proto)
- 	spin_lock_irqsave(&st_gdata->lock, flags);
- 
- 	if (test_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state)) {
--		pr_info(" ST_REG_IN_PROGRESS:%d ", new_proto->type);
-+		pr_info(" ST_REG_IN_PROGRESS:%d ", new_proto->chnl_id);
- 		/* fw download in progress */
--		st_kim_chip_toggle(new_proto->type, KIM_GPIO_ACTIVE);
-+		st_kim_chip_toggle(new_proto->chnl_id, KIM_GPIO_ACTIVE);
- 
--		st_gdata->list[new_proto->type] = new_proto;
-+		add_channel_to_table(st_gdata, new_proto);
- 		st_gdata->protos_registered++;
- 		new_proto->write = st_write;
- 
-@@ -598,7 +494,7 @@ long st_register(struct st_proto_s *new_proto)
- 		spin_unlock_irqrestore(&st_gdata->lock, flags);
- 		return -EINPROGRESS;
- 	} else if (st_gdata->protos_registered == ST_EMPTY) {
--		pr_info(" protocol list empty :%d ", new_proto->type);
-+		pr_info(" chnl_id list empty :%d ", new_proto->chnl_id);
- 		set_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
- 		st_recv = st_kim_recv;
- 
-@@ -622,9 +518,9 @@ long st_register(struct st_proto_s *new_proto)
- 			return -1;
- 		}
- 
--		/* the protocol might require other gpios to be toggled
-+		/* the chnl_id might require other gpios to be toggled
- 		 */
--		st_kim_chip_toggle(new_proto->type, KIM_GPIO_ACTIVE);
-+		st_kim_chip_toggle(new_proto->chnl_id, KIM_GPIO_ACTIVE);
- 
- 		clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
- 		st_recv = st_int_recv;
-@@ -642,14 +538,14 @@ long st_register(struct st_proto_s *new_proto)
- 		/* check for already registered once more,
- 		 * since the above check is old
- 		 */
--		if (st_gdata->list[new_proto->type] != NULL) {
-+		if (st_gdata->list[new_proto->chnl_id] != NULL) {
- 			pr_err(" proto %d already registered ",
--				   new_proto->type);
-+				   new_proto->chnl_id);
- 			return -EALREADY;
- 		}
- 
- 		spin_lock_irqsave(&st_gdata->lock, flags);
--		st_gdata->list[new_proto->type] = new_proto;
-+		add_channel_to_table(st_gdata, new_proto);
- 		st_gdata->protos_registered++;
- 		new_proto->write = st_write;
- 		spin_unlock_irqrestore(&st_gdata->lock, flags);
-@@ -657,22 +553,7 @@ long st_register(struct st_proto_s *new_proto)
- 	}
- 	/* if fw is already downloaded & new stack registers protocol */
- 	else {
--		switch (new_proto->type) {
--		case ST_BT:
--			/* do nothing */
--			break;
--		case ST_FM:
--		case ST_GPS:
--			st_kim_chip_toggle(new_proto->type, KIM_GPIO_ACTIVE);
--			break;
--		case ST_MAX:
--		default:
--			pr_err("%d protocol not supported",
--				   new_proto->type);
--			spin_unlock_irqrestore(&st_gdata->lock, flags);
--			return -EPROTONOSUPPORT;
--		}
--		st_gdata->list[new_proto->type] = new_proto;
-+		add_channel_to_table(st_gdata, new_proto);
- 		st_gdata->protos_registered++;
- 		new_proto->write = st_write;
- 
-@@ -680,48 +561,48 @@ long st_register(struct st_proto_s *new_proto)
- 		spin_unlock_irqrestore(&st_gdata->lock, flags);
- 		return err;
- 	}
--	pr_debug("done %s(%d) ", __func__, new_proto->type);
-+	pr_debug("done %s(%d) ", __func__, new_proto->chnl_id);
- }
- EXPORT_SYMBOL_GPL(st_register);
- 
- /* to unregister a protocol -
-  * to be called from protocol stack driver
-  */
--long st_unregister(enum proto_type type)
-+long st_unregister(struct st_proto_s *proto)
- {
- 	long err = 0;
- 	unsigned long flags = 0;
- 	struct st_data_s	*st_gdata;
- 
--	pr_debug("%s: %d ", __func__, type);
-+	pr_debug("%s: %d ", __func__, proto->chnl_id);
- 
- 	st_kim_ref(&st_gdata, 0);
--	if (type < ST_BT || type >= ST_MAX) {
--		pr_err(" protocol %d not supported", type);
-+	if (proto->chnl_id >= ST_MAX_CHANNELS) {
-+		pr_err(" chnl_id %d not supported", proto->chnl_id);
- 		return -EPROTONOSUPPORT;
- 	}
- 
- 	spin_lock_irqsave(&st_gdata->lock, flags);
- 
--	if (st_gdata->list[type] == NULL) {
--		pr_err(" protocol %d not registered", type);
-+	if (st_gdata->list[proto->chnl_id] == NULL) {
-+		pr_err(" chnl_id %d not registered", proto->chnl_id);
- 		spin_unlock_irqrestore(&st_gdata->lock, flags);
- 		return -EPROTONOSUPPORT;
- 	}
- 
- 	st_gdata->protos_registered--;
--	st_gdata->list[type] = NULL;
-+	remove_channel_from_table(st_gdata, proto);
- 
- 	/* kim ignores BT in the below function
- 	 * and handles the rest, BT is toggled
- 	 * only in kim_start and kim_stop
- 	 */
--	st_kim_chip_toggle(type, KIM_GPIO_INACTIVE);
-+	st_kim_chip_toggle(proto->chnl_id, KIM_GPIO_INACTIVE);
- 	spin_unlock_irqrestore(&st_gdata->lock, flags);
- 
- 	if ((st_gdata->protos_registered == ST_EMPTY) &&
- 	    (!test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
--		pr_info(" all protocols unregistered ");
-+		pr_info(" all chnl_ids unregistered ");
- 
- 		/* stop traffic on tty */
- 		if (st_gdata->tty) {
-@@ -729,7 +610,7 @@ long st_unregister(enum proto_type type)
- 			stop_tty(st_gdata->tty);
- 		}
- 
--		/* all protocols now unregistered */
-+		/* all chnl_ids now unregistered */
- 		st_kim_stop(st_gdata->kim_data);
- 		/* disable ST LL */
- 		st_ll_disable(st_gdata);
-@@ -745,7 +626,7 @@ long st_write(struct sk_buff *skb)
- {
- 	struct st_data_s *st_gdata;
- #ifdef DEBUG
--	enum proto_type protoid = ST_MAX;
-+	unsigned char chnl_id = ST_MAX_CHANNELS;
- #endif
- 	long len;
- 
-@@ -756,22 +637,10 @@ long st_write(struct sk_buff *skb)
- 		return -1;
- 	}
- #ifdef DEBUG			/* open-up skb to read the 1st byte */
--	switch (skb->data[0]) {
--	case HCI_COMMAND_PKT:
--	case HCI_ACLDATA_PKT:
--	case HCI_SCODATA_PKT:
--		protoid = ST_BT;
--		break;
--	case ST_FM_CH8_PKT:
--		protoid = ST_FM;
--		break;
--	case 0x09:
--		protoid = ST_GPS;
--		break;
--	}
--	if (unlikely(st_gdata->list[protoid] == NULL)) {
--		pr_err(" protocol %d not registered, and writing? ",
--			   protoid);
-+	chnl_id = skb->data[0];
-+	if (unlikely(st_gdata->list[chnl_id] == NULL)) {
-+		pr_err(" chnl_id %d not registered, and writing? ",
-+			   chnl_id);
- 		return -1;
- 	}
- #endif
-@@ -824,7 +693,7 @@ static int st_tty_open(struct tty_struct *tty)
- 
- static void st_tty_close(struct tty_struct *tty)
- {
--	unsigned char i = ST_MAX;
-+	unsigned char i = ST_MAX_CHANNELS;
- 	unsigned long flags = 0;
- 	struct	st_data_s *st_gdata = tty->disc_data;
- 
-@@ -835,7 +704,7 @@ static void st_tty_close(struct tty_struct *tty)
- 	 * un-installed for some reason - what should be done ?
- 	 */
- 	spin_lock_irqsave(&st_gdata->lock, flags);
--	for (i = ST_BT; i < ST_MAX; i++) {
-+	for (i = ST_BT; i < ST_MAX_CHANNELS; i++) {
- 		if (st_gdata->list[i] != NULL)
- 			pr_err("%d not un-registered", i);
- 		st_gdata->list[i] = NULL;
-@@ -869,7 +738,7 @@ static void st_tty_close(struct tty_struct *tty)
- static void st_tty_receive(struct tty_struct *tty, const unsigned char *data,
- 			   char *tty_flags, int count)
- {
--
-+#define VERBOSE
- #ifdef VERBOSE
- 	print_hex_dump(KERN_DEBUG, ">in>", DUMP_PREFIX_NONE,
- 		16, 1, data, count, 0);
-diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
-index 73b6c8b..707c858 100644
---- a/drivers/misc/ti-st/st_kim.c
-+++ b/drivers/misc/ti-st/st_kim.c
-@@ -32,11 +32,7 @@
- #include <linux/sched.h>
- #include <linux/rfkill.h>
- 
--/* understand BT events for fw response */
--#include <net/bluetooth/bluetooth.h>
--#include <net/bluetooth/hci_core.h>
--#include <net/bluetooth/hci.h>
--
-+#include <linux/skbuff.h>
- #include <linux/ti_wilink_st.h>
- 
- 
-@@ -134,7 +130,7 @@ static inline int kim_check_data_len(struct kim_data_s *kim_gdata, int len)
- 		/* Packet header has non-zero payload length and
- 		 * we have enough space in created skb. Lets read
- 		 * payload data */
--		kim_gdata->rx_state = ST_BT_W4_DATA;
-+		kim_gdata->rx_state = ST_W4_DATA;
- 		kim_gdata->rx_count = len;
- 		return len;
- 	}
-@@ -158,8 +154,8 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
- 	const unsigned char *data, long count)
- {
- 	const unsigned char *ptr;
--	struct hci_event_hdr *eh;
- 	int len = 0, type = 0;
-+	unsigned char *plen;
- 
- 	pr_debug("%s", __func__);
- 	/* Decode received bytes here */
-@@ -183,29 +179,27 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
- 			/* Check ST RX state machine , where are we? */
- 			switch (kim_gdata->rx_state) {
- 				/* Waiting for complete packet ? */
--			case ST_BT_W4_DATA:
-+			case ST_W4_DATA:
- 				pr_debug("Complete pkt received");
- 				validate_firmware_response(kim_gdata);
- 				kim_gdata->rx_state = ST_W4_PACKET_TYPE;
- 				kim_gdata->rx_skb = NULL;
- 				continue;
- 				/* Waiting for Bluetooth event header ? */
--			case ST_BT_W4_EVENT_HDR:
--				eh = (struct hci_event_hdr *)kim_gdata->
--				    rx_skb->data;
--				pr_debug("Event header: evt 0x%2.2x"
--					   "plen %d", eh->evt, eh->plen);
--				kim_check_data_len(kim_gdata, eh->plen);
-+			case ST_W4_HEADER:
-+				plen =
-+				(unsigned char *)&kim_gdata->rx_skb->data[1];
-+				pr_debug("event hdr: plen 0x%02x\n", *plen);
-+				kim_check_data_len(kim_gdata, *plen);
- 				continue;
- 			}	/* end of switch */
- 		}		/* end of if rx_state */
- 		switch (*ptr) {
- 			/* Bluetooth event packet? */
--		case HCI_EVENT_PKT:
--			pr_info("Event packet");
--			kim_gdata->rx_state = ST_BT_W4_EVENT_HDR;
--			kim_gdata->rx_count = HCI_EVENT_HDR_SIZE;
--			type = HCI_EVENT_PKT;
-+		case 0x04:
-+			kim_gdata->rx_state = ST_W4_HEADER;
-+			kim_gdata->rx_count = 2;
-+			type = *ptr;
- 			break;
- 		default:
- 			pr_info("unknown packet");
-@@ -216,16 +210,18 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
- 		ptr++;
- 		count--;
- 		kim_gdata->rx_skb =
--		    bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
-+			alloc_skb(1024+8, GFP_ATOMIC);
- 		if (!kim_gdata->rx_skb) {
- 			pr_err("can't allocate mem for new packet");
- 			kim_gdata->rx_state = ST_W4_PACKET_TYPE;
- 			kim_gdata->rx_count = 0;
- 			return;
- 		}
--		bt_cb(kim_gdata->rx_skb)->pkt_type = type;
-+		skb_reserve(kim_gdata->rx_skb, 8);
-+		kim_gdata->rx_skb->cb[0] = 4;
-+		kim_gdata->rx_skb->cb[1] = 0;
-+
- 	}
--	pr_info("done %s", __func__);
- 	return;
- }
- 
-@@ -398,7 +394,7 @@ void st_kim_chip_toggle(enum proto_type type, enum kim_gpio_state state)
- 			gpio_set_value(kim_gdata->gpios[ST_GPS], GPIO_LOW);
- 		break;
- 
--	case ST_MAX:
-+	case ST_MAX_CHANNELS:
- 	default:
- 		break;
- 	}
-@@ -416,7 +412,6 @@ void st_kim_recv(void *disc_data, const unsigned char *data, long count)
- 	struct st_data_s	*st_gdata = (struct st_data_s *)disc_data;
- 	struct kim_data_s	*kim_gdata = st_gdata->kim_data;
- 
--	pr_info(" %s ", __func__);
- 	/* copy to local buffer */
- 	if (unlikely(data[4] == 0x01 && data[5] == 0x10 && data[0] == 0x04)) {
- 		/* must be the read_ver_cmd */
-@@ -578,7 +573,7 @@ static int kim_toggle_radio(void *data, bool blocked)
- 		else
- 			st_kim_chip_toggle(type, KIM_GPIO_ACTIVE);
- 	break;
--	case ST_MAX:
-+	case ST_MAX_CHANNELS:
- 		pr_err(" wrong proto type ");
- 	break;
- 	}
-@@ -664,12 +659,13 @@ static int kim_probe(struct platform_device *pdev)
- 	/* refer to itself */
- 	kim_gdata->core_data->kim_data = kim_gdata;
- 
--	for (proto = 0; proto < ST_MAX; proto++) {
-+	for (proto = 0; proto < ST_MAX_CHANNELS; proto++) {
- 		kim_gdata->gpios[proto] = gpios[proto];
- 		pr_info(" %ld gpio to be requested", gpios[proto]);
- 	}
- 
--	for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) {
-+	for (proto = 0; (proto < ST_MAX_CHANNELS)
-+			&& (gpios[proto] != -1); proto++) {
- 		/* Claim the Bluetooth/FM/GPIO
- 		 * nShutdown gpio from the system
- 		 */
-@@ -704,7 +700,8 @@ static int kim_probe(struct platform_device *pdev)
- 	init_completion(&kim_gdata->kim_rcvd);
- 	init_completion(&kim_gdata->ldisc_installed);
- 
--	for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) {
-+	for (proto = 0; (proto < ST_MAX_CHANNELS)
-+			&& (gpios[proto] != -1); proto++) {
- 		/* TODO: should all types be rfkill_type_bt ? */
- 		kim_gdata->rf_protos[proto] = proto;
- 		kim_gdata->rfkill[proto] = rfkill_alloc(protocol_names[proto],
-@@ -752,7 +749,8 @@ static int kim_remove(struct platform_device *pdev)
- 
- 	kim_gdata = dev_get_drvdata(&pdev->dev);
- 
--	for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) {
-+	for (proto = 0; (proto < ST_MAX_CHANNELS)
-+		&& (gpios[proto] != -1); proto++) {
- 		/* Claim the Bluetooth/FM/GPIO
- 		 * nShutdown gpio from the system
- 		 */
-diff --git a/include/linux/ti_wilink_st.h b/include/linux/ti_wilink_st.h
-index 4c7be22..1674ca7 100644
---- a/include/linux/ti_wilink_st.h
-+++ b/include/linux/ti_wilink_st.h
-@@ -42,7 +42,7 @@ enum proto_type {
- 	ST_BT,
- 	ST_FM,
- 	ST_GPS,
--	ST_MAX,
-+	ST_MAX_CHANNELS = 16,
- };
- 
- /**
-@@ -62,6 +62,17 @@ enum proto_type {
-  * @priv_data: privdate data holder for the protocol drivers, sent
-  *	from the protocol drivers during registration, and sent back on
-  *	reg_complete_cb and recv.
-+ * @chnl_id: channel id the protocol driver is interested in, the channel
-+ *	id is nothing but the 1st byte of the packet in UART frame.
-+ * @max_frame_size: size of the largest frame the protocol can receive.
-+ * @hdr_len: length of the header structure of the protocol.
-+ * @offset_len_in_hdr: this provides the offset of the length field in the
-+ *	header structure of the protocol header, to assist ST to know
-+ *	how much to receive, if the data is split across UART frames.
-+ * @len_size: whether the length field inside the header is 2 bytes
-+ *	or 1 byte.
-+ * @reserve: the number of bytes ST needs to reserve in the skb being
-+ *	prepared for the protocol driver.
-  */
- struct st_proto_s {
- 	enum proto_type type;
-@@ -70,10 +81,17 @@ struct st_proto_s {
- 	void (*reg_complete_cb) (void *, char data);
- 	long (*write) (struct sk_buff *skb);
- 	void *priv_data;
-+
-+	unsigned char chnl_id;
-+	unsigned short max_frame_size;
-+	unsigned char hdr_len;
-+	unsigned char offset_len_in_hdr;
-+	unsigned char len_size;
-+	unsigned char reserve;
- };
- 
- extern long st_register(struct st_proto_s *);
--extern long st_unregister(enum proto_type);
-+extern long st_unregister(struct st_proto_s *);
- 
- 
- /*
-@@ -114,6 +132,7 @@ extern long st_unregister(enum proto_type);
-  * @rx_skb: the skb where all data for a protocol gets accumulated,
-  *	since tty might not call receive when a complete event packet
-  *	is received, the states, count and the skb needs to be maintained.
-+ * @rx_chnl: the channel ID for which the data is getting accumalated for.
-  * @txq: the list of skbs which needs to be sent onto the TTY.
-  * @tx_waitq: if the chip is not in AWAKE state, the skbs needs to be queued
-  *	up in here, PM(WAKEUP_IND) data needs to be sent and then the skbs
-@@ -135,10 +154,11 @@ struct st_data_s {
- #define ST_TX_SENDING	1
- #define ST_TX_WAKEUP	2
- 	unsigned long tx_state;
--	struct st_proto_s *list[ST_MAX];
-+	struct st_proto_s *list[ST_MAX_CHANNELS];
- 	unsigned long rx_state;
- 	unsigned long rx_count;
- 	struct sk_buff *rx_skb;
-+	unsigned char rx_chnl;
- 	struct sk_buff_head txq, tx_waitq;
- 	spinlock_t lock;
- 	unsigned char	protos_registered;
-@@ -243,12 +263,12 @@ struct kim_data_s {
- 	struct completion kim_rcvd, ldisc_installed;
- 	char resp_buffer[30];
- 	const struct firmware *fw_entry;
--	long gpios[ST_MAX];
-+	long gpios[ST_MAX_CHANNELS];
- 	unsigned long rx_state;
- 	unsigned long rx_count;
- 	struct sk_buff *rx_skb;
--	struct rfkill *rfkill[ST_MAX];
--	enum proto_type rf_protos[ST_MAX];
-+	struct rfkill *rfkill[ST_MAX_CHANNELS];
-+	enum proto_type rf_protos[ST_MAX_CHANNELS];
- 	struct st_data_s *core_data;
- 	struct chip_version version;
- };
-@@ -338,12 +358,8 @@ struct hci_command {
- 
- /* ST LL receiver states */
- #define ST_W4_PACKET_TYPE       0
--#define ST_BT_W4_EVENT_HDR      1
--#define ST_BT_W4_ACL_HDR        2
--#define ST_BT_W4_SCO_HDR        3
--#define ST_BT_W4_DATA           4
--#define ST_FM_W4_EVENT_HDR      5
--#define ST_GPS_W4_EVENT_HDR	6
-+#define ST_W4_HEADER		1
-+#define ST_W4_DATA		2
- 
- /* ST LL state machines */
- #define ST_LL_ASLEEP               0
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap/wl1271/0015-Bluetooth-btwilink-driver.patch b/recipes-kernel/linux/linux-omap/wl1271/0015-Bluetooth-btwilink-driver.patch
deleted file mode 100644
index f45149f..0000000
--- a/recipes-kernel/linux/linux-omap/wl1271/0015-Bluetooth-btwilink-driver.patch
+++ /dev/null
@@ -1,463 +0,0 @@
-From e3948bda11a3a0d938500ffbc7ef43603909cc15 Mon Sep 17 00:00:00 2001
-From: Pavan Savoy <pavan_savoy at ti.com>
-Date: Tue, 4 Jan 2011 10:59:48 +0000
-Subject: [PATCH 15/15] Bluetooth: btwilink driver
-
--- patch description --
-
-This is the bluetooth protocol driver for the TI WiLink7 chipsets.
-Texas Instrument's WiLink chipsets combine wireless technologies
-like BT, FM, GPS and WLAN onto a single chip.
-
-This Bluetooth driver works on top of the TI_ST shared transport
-line discipline driver which also allows other drivers like
-FM V4L2 and GPS character driver to make use of the same UART interface.
-
-Kconfig and Makefile modifications to enable the Bluetooth
-driver for Texas Instrument's WiLink 7 chipset.
-
-Signed-off-by: Pavan Savoy <pavan_savoy at ti.com>
----
- drivers/bluetooth/Kconfig    |   10 +
- drivers/bluetooth/Makefile   |    1 +
- drivers/bluetooth/btwilink.c |  397 ++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 408 insertions(+), 0 deletions(-)
- create mode 100644 drivers/bluetooth/btwilink.c
-
-diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
-index 02deef4..8e0de9a 100644
---- a/drivers/bluetooth/Kconfig
-+++ b/drivers/bluetooth/Kconfig
-@@ -219,4 +219,14 @@ config BT_ATH3K
- 	  Say Y here to compile support for "Atheros firmware download driver"
- 	  into the kernel or say M to compile it as module (ath3k).
- 
-+config BT_WILINK
-+	tristate "Texas Instruments WiLink7 driver"
-+	depends on TI_ST
-+	help
-+	  This enables the Bluetooth driver for Texas Instrument's BT/FM/GPS
-+	  combo devices. This makes use of shared transport line discipline
-+	  core driver to communicate with the BT core of the combo chip.
-+
-+	  Say Y here to compile support for Texas Instrument's WiLink7 driver
-+	  into the kernel or say M to compile it as module.
- endmenu
-diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile
-index 71bdf13..f4460f4 100644
---- a/drivers/bluetooth/Makefile
-+++ b/drivers/bluetooth/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_BT_HCIBTSDIO)	+= btsdio.o
- obj-$(CONFIG_BT_ATH3K)		+= ath3k.o
- obj-$(CONFIG_BT_MRVL)		+= btmrvl.o
- obj-$(CONFIG_BT_MRVL_SDIO)	+= btmrvl_sdio.o
-+obj-$(CONFIG_BT_WILINK)		+= btwilink.o
- 
- btmrvl-y			:= btmrvl_main.o
- btmrvl-$(CONFIG_DEBUG_FS)	+= btmrvl_debugfs.o
-diff --git a/drivers/bluetooth/btwilink.c b/drivers/bluetooth/btwilink.c
-new file mode 100644
-index 0000000..0201aca
---- /dev/null
-+++ b/drivers/bluetooth/btwilink.c
-@@ -0,0 +1,397 @@
-+/*
-+ *  Texas Instrument's Bluetooth Driver For Shared Transport.
-+ *
-+ *  Bluetooth Driver acts as interface between HCI core and
-+ *  TI Shared Transport Layer.
-+ *
-+ *  Copyright (C) 2009-2010 Texas Instruments
-+ *  Author: Raja Mani <raja_mani at ti.com>
-+ *	Pavan Savoy <pavan_savoy at ti.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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ *
-+ */
-+
-+#include <linux/platform_device.h>
-+#include <net/bluetooth/bluetooth.h>
-+#include <net/bluetooth/hci_core.h>
-+
-+#include <linux/ti_wilink_st.h>
-+
-+/* Bluetooth Driver Version */
-+#define VERSION               "1.0"
-+
-+/* Number of seconds to wait for registration completion
-+ * when ST returns PENDING status.
-+ */
-+#define BT_REGISTER_TIMEOUT   6000	/* 6 sec */
-+
-+/**
-+ * struct ti_st - driver operation structure
-+ * @hdev: hci device pointer which binds to bt driver
-+ * @reg_status: ST registration callback status
-+ * @st_write: write function provided by the ST driver
-+ *	to be used by the driver during send_frame.
-+ * @wait_reg_completion - completion sync between ti_st_open
-+ *	and ti_st_registration_completion_cb.
-+ */
-+struct ti_st {
-+	struct hci_dev *hdev;
-+	char reg_status;
-+	long (*st_write) (struct sk_buff *);
-+	struct completion wait_reg_completion;
-+};
-+
-+/* Increments HCI counters based on pocket ID (cmd,acl,sco) */
-+static inline void ti_st_tx_complete(struct ti_st *hst, int pkt_type)
-+{
-+	struct hci_dev *hdev = hst->hdev;
-+
-+	/* Update HCI stat counters */
-+	switch (pkt_type) {
-+	case HCI_COMMAND_PKT:
-+		hdev->stat.cmd_tx++;
-+		break;
-+
-+	case HCI_ACLDATA_PKT:
-+		hdev->stat.acl_tx++;
-+		break;
-+
-+	case HCI_SCODATA_PKT:
-+		hdev->stat.sco_tx++;
-+		break;
-+	}
-+}
-+
-+/* ------- Interfaces to Shared Transport ------ */
-+
-+/* Called by ST layer to indicate protocol registration completion
-+ * status.ti_st_open() function will wait for signal from this
-+ * API when st_register() function returns ST_PENDING.
-+ */
-+static void st_registration_completion_cb(void *priv_data, char data)
-+{
-+	struct ti_st *lhst = priv_data;
-+
-+	/* Save registration status for use in ti_st_open() */
-+	lhst->reg_status = data;
-+	/* complete the wait in ti_st_open() */
-+	complete(&lhst->wait_reg_completion);
-+}
-+
-+/* Called by Shared Transport layer when receive data is
-+ * available */
-+static long st_receive(void *priv_data, struct sk_buff *skb)
-+{
-+	struct ti_st *lhst = priv_data;
-+	int err;
-+
-+	if (!skb)
-+		return -EFAULT;
-+
-+	if (!lhst) {
-+		kfree_skb(skb);
-+		return -EFAULT;
-+	}
-+
-+	skb->dev = (void *) lhst->hdev;
-+
-+	/* Forward skb to HCI core layer */
-+	err = hci_recv_frame(skb);
-+	if (err < 0) {
-+		BT_ERR("Unable to push skb to HCI core(%d)", err);
-+		return err;
-+	}
-+
-+	lhst->hdev->stat.byte_rx += skb->len;
-+
-+	return 0;
-+}
-+
-+/* ------- Interfaces to HCI layer ------ */
-+/* protocol structure registered with shared transport */
-+static struct st_proto_s ti_st_proto[3] = {
-+	{
-+		.chnl_id = 0x02, /* ACL */
-+		.recv = st_receive,
-+		.reg_complete_cb = st_registration_completion_cb,
-+		.hdr_len = 4,
-+		.offset_len_in_hdr = 2,
-+		.len_size = 2,
-+		.reserve = 8,
-+	},
-+	{
-+		.chnl_id = 0x03, /* SCO */
-+		.recv = st_receive,
-+		.reg_complete_cb = st_registration_completion_cb,
-+		.hdr_len = 3,
-+		.offset_len_in_hdr = 2,
-+		.len_size = 1,
-+		.reserve = 8,
-+	},
-+	{
-+		.chnl_id = 0x04, /* HCI Events */
-+		.recv = st_receive,
-+		.reg_complete_cb = st_registration_completion_cb,
-+		.hdr_len = 2,
-+		.offset_len_in_hdr = 1,
-+		.len_size = 1,
-+		.reserve = 8,
-+	},
-+};
-+
-+/* Called from HCI core to initialize the device */
-+static int ti_st_open(struct hci_dev *hdev)
-+{
-+	unsigned long timeleft;
-+	struct ti_st *hst;
-+	int err, i;
-+
-+	BT_DBG("%s %p", hdev->name, hdev);
-+	if (test_and_set_bit(HCI_RUNNING, &hdev->flags)) {
-+		BT_ERR("btwilink already opened");
-+		return -EBUSY;
-+	}
-+
-+	/* provide contexts for callbacks from ST */
-+	hst = hdev->driver_data;
-+
-+	for (i = 0; i < 3; i++) {
-+		ti_st_proto[i].priv_data = hst;
-+		ti_st_proto[i].max_frame_size = HCI_MAX_FRAME_SIZE;
-+
-+		err = st_register(&ti_st_proto[i]);
-+		if (err == -EINPROGRESS) {
-+			/* ST is busy with either protocol
-+			 * registration or firmware download.
-+			 */
-+			/* Prepare wait-for-completion handler data structures.
-+			*/
-+			init_completion(&hst->wait_reg_completion);
-+
-+			/* Reset ST registration callback status flag,
-+			 * this value will be updated in
-+			 * ti_st_registration_completion_cb()
-+			 * function whenever it called from ST driver.
-+			 */
-+			hst->reg_status = -EINPROGRESS;
-+
-+			BT_DBG("waiting for registration "
-+			"completion signal from ST");
-+			timeleft = wait_for_completion_timeout
-+				(&hst->wait_reg_completion,
-+				 msecs_to_jiffies(BT_REGISTER_TIMEOUT));
-+			if (!timeleft) {
-+				clear_bit(HCI_RUNNING, &hdev->flags);
-+				BT_ERR("Timeout(%d sec),didn't get reg "
-+						"completion signal from ST",
-+						BT_REGISTER_TIMEOUT / 1000);
-+				return -ETIMEDOUT;
-+			}
-+
-+			/* Is ST registration callback
-+			 * called with ERROR status? */
-+			if (hst->reg_status != 0) {
-+				clear_bit(HCI_RUNNING, &hdev->flags);
-+				BT_ERR("ST registration completed with invalid "
-+						"status %d", hst->reg_status);
-+				return -EAGAIN;
-+			}
-+			err = 0;
-+		} else if (err != 0) {
-+			clear_bit(HCI_RUNNING, &hdev->flags);
-+			BT_ERR("st_register failed %d", err);
-+			return err;
-+		}
-+		hst->st_write = ti_st_proto[i].write;
-+		if (!hst->st_write) {
-+			BT_ERR("undefined ST write function");
-+			clear_bit(HCI_RUNNING, &hdev->flags);
-+
-+			/* Undo registration with ST */
-+			err = st_unregister(&ti_st_proto[i]);
-+			if (err)
-+				BT_ERR("st_unregister() failed with "
-+				"error %d", err);
-+
-+			hst->st_write = NULL;
-+			/* ti_st_proto.write is filled up by the
-+			 * underlying shared transport driver
-+			 * upon registration
-+			 */
-+			return err;
-+		}
-+	}
-+
-+	return err;
-+}
-+
-+/* Close device */
-+static int ti_st_close(struct hci_dev *hdev)
-+{
-+	int err, i;
-+	struct ti_st *hst = hdev->driver_data;
-+
-+	if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
-+		return 0;
-+
-+	for (i = 0; i < 3; i++) {
-+		/* continue to unregister from transport */
-+		err = st_unregister(&ti_st_proto[i]);
-+		if (err)
-+			BT_ERR("st_unregister() failed with error %d", err);
-+	}
-+
-+	hst->st_write = NULL;
-+
-+	return err;
-+}
-+
-+static int ti_st_send_frame(struct sk_buff *skb)
-+{
-+	struct hci_dev *hdev;
-+	struct ti_st *hst;
-+	long len;
-+
-+	hdev = (struct hci_dev *)skb->dev;
-+
-+	if (!test_bit(HCI_RUNNING, &hdev->flags))
-+		return -EBUSY;
-+
-+	hst = hdev->driver_data;
-+
-+	/* Prepend skb with frame type */
-+	memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1);
-+
-+	BT_DBG("%s: type %d len %d", hdev->name, bt_cb(skb)->pkt_type,
-+			skb->len);
-+
-+	/* Insert skb to shared transport layer's transmit queue.
-+	 * Freeing skb memory is taken care in shared transport layer,
-+	 * so don't free skb memory here.
-+	 */
-+	len = hst->st_write(skb);
-+	if (len < 0) {
-+		kfree_skb(skb);
-+		BT_ERR("ST write failed (%ld)", len);
-+		/* Try Again, would only fail if UART has gone bad */
-+		return -EAGAIN;
-+	}
-+
-+	/* ST accepted our skb. So, Go ahead and do rest */
-+	hdev->stat.byte_tx += len;
-+	ti_st_tx_complete(hst, bt_cb(skb)->pkt_type);
-+
-+	return 0;
-+}
-+
-+static void ti_st_destruct(struct hci_dev *hdev)
-+{
-+	BT_DBG("%s", hdev->name);
-+	kfree(hdev->driver_data);
-+}
-+
-+static int bt_ti_probe(struct platform_device *pdev)
-+{
-+	static struct ti_st *hst;
-+	struct hci_dev *hdev;
-+	int err;
-+
-+	hst = kzalloc(sizeof(struct ti_st), GFP_KERNEL);
-+	if (!hst)
-+		return -ENOMEM;
-+
-+	/* Expose "hciX" device to user space */
-+	hdev = hci_alloc_dev();
-+	if (!hdev) {
-+		kfree(hst);
-+		return -ENOMEM;
-+	}
-+
-+	BT_DBG("hdev %p", hdev);
-+
-+	hst->hdev = hdev;
-+	hdev->bus = HCI_UART;
-+	hdev->driver_data = hst;
-+	hdev->open = ti_st_open;
-+	hdev->close = ti_st_close;
-+	hdev->flush = NULL;
-+	hdev->send = ti_st_send_frame;
-+	hdev->destruct = ti_st_destruct;
-+	hdev->owner = THIS_MODULE;
-+
-+	err = hci_register_dev(hdev);
-+	if (err < 0) {
-+		BT_ERR("Can't register HCI device error %d", err);
-+		kfree(hst);
-+		hci_free_dev(hdev);
-+		return err;
-+	}
-+
-+	BT_DBG("HCI device registered (hdev %p)", hdev);
-+
-+	dev_set_drvdata(&pdev->dev, hst);
-+	return err;
-+}
-+
-+static int bt_ti_remove(struct platform_device *pdev)
-+{
-+	struct hci_dev *hdev;
-+	struct ti_st *hst = dev_get_drvdata(&pdev->dev);
-+
-+	if (!hst)
-+		return -EFAULT;
-+
-+	hdev = hst->hdev;
-+	ti_st_close(hdev);
-+	hci_unregister_dev(hdev);
-+
-+	hci_free_dev(hdev);
-+	kfree(hst);
-+
-+	dev_set_drvdata(&pdev->dev, NULL);
-+	return 0;
-+}
-+
-+static struct platform_driver btwilink_driver = {
-+	.probe = bt_ti_probe,
-+	.remove = bt_ti_remove,
-+	.driver = {
-+		.name = "btwilink",
-+		.owner = THIS_MODULE,
-+	},
-+};
-+
-+/* ------- Module Init/Exit interfaces ------ */
-+static int __init btwilink_init(void)
-+{
-+	BT_INFO("Bluetooth Driver for TI WiLink - Version %s", VERSION);
-+
-+	return platform_driver_register(&btwilink_driver);
-+}
-+
-+static void __exit btwilink_exit(void)
-+{
-+	platform_driver_unregister(&btwilink_driver);
-+}
-+
-+module_init(btwilink_init);
-+module_exit(btwilink_exit);
-+
-+/* ------ Module Info ------ */
-+
-+MODULE_AUTHOR("Raja Mani <raja_mani at ti.com>");
-+MODULE_DESCRIPTION("Bluetooth Driver for TI Shared Transport" VERSION);
-+MODULE_VERSION(VERSION);
-+MODULE_LICENSE("GPL");
--- 
-1.6.6.1
-
diff --git a/recipes-kernel/linux/linux-omap_2.6.37.bb b/recipes-kernel/linux/linux-omap_2.6.37.bb
deleted file mode 100644
index 1bbdde1..0000000
--- a/recipes-kernel/linux/linux-omap_2.6.37.bb
+++ /dev/null
@@ -1,215 +0,0 @@
-require multi-kernel.inc
-
-DESCRIPTION = "Linux kernel for OMAP processors"
-
-COMPATIBLE_MACHINE = "(beagleboard|overo|omap3evm|omap3-touchbook)"
-
-# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
-PV = "2.6.37"
-
-MACHINE_KERNEL_PR_append = "c+gitr${SRCREV}"
-PR = "${MACHINE_KERNEL_PR}"
-
-SRCREV = "fa3b4e23ec20cfc944db7cc2b30b0d82c20e4472"
-
-FILESEXTRAPATHS_prepend := "{THISDIR}/${PN}-${PV}:"
-
-SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git;protocol=git \
-	   file://defconfig"
-
-SRC_URI_append = " \
-                  file://linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch \
-                  file://linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch \
-                  file://linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch \  
-                  file://linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch \
-                  file://linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch \
-                  file://linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch \
-                  file://linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch \
-                  file://linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch \
-                  file://linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch \
-                  file://linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch \
-                  file://linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch \
-                  file://linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch \
-                  file://linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch \
-                  file://linus/0014-ehea-Avoid-changing-vlan-flags.patch \
-                  file://linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch \
-                  file://linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch \
-                  file://linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch \
-                  file://linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch \
-                  file://linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch \
-                  file://linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch \
-                  file://linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch \
-                  file://linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch \
-                  file://linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch \
-                  file://linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch \
-                  file://linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch \
-                  file://linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch \
-                  file://linus/0027-fix-freeing-user_struct-in-user-cache.patch \
-                  file://linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch \
-                  file://linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch \
-                  file://linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch \
-                  file://linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch \
-                  file://linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch \
-                  file://linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch \
-                  file://linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch \
-                  file://linus/0035-update-Documentation-filesystems-Locking.patch \
-                  file://linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch \
-                  file://linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch \
-                  file://linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch \
-                  file://linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch \
-                  file://linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch \
-                  file://linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch \
-                  file://linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch \
-                  file://linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch \
-                  file://linus/0044-KVM-i8259-initialize-isr_ack.patch \
-                  file://linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch \
-                  file://linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch \
-                  file://linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch \
-                  file://linus/0048-mv_xor-fix-race-in-tasklet-function.patch \
-                  file://linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch \
-                  file://linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch \
-                  file://linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch \
-                  file://linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch \
-                  file://linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch \
-                  file://linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch \
-                  file://linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch \
-                  file://linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch \
-                  file://linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch \
-                  file://linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch \
-                  file://linus/0059-name_to_dev_t-must-not-call-__init-code.patch \
-                  file://linus/0060-bridge-stp-ensure-mac-header-is-set.patch \
-                  file://linus/0061-ima-fix-add-LSM-rule-bug.patch \
-                  file://linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch \
-                  file://linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch \
-                  file://linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch \
-                  file://linus/0065-Linux-2.6.37.patch \
-                  \
-                  file://base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch \
-                  file://base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch \
-                  file://base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch \
-                  file://base/0004-omap-Beagle-detect-new-xM-revision-B.patch \
-                  file://base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch \
-                  file://base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch \
-                  file://base/0007-modedb.c-add-proper-720p60-mode.patch \
-                  file://base/0008-mmc-don-t-display-single-block-read-console-messages.patch \
-                  file://base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch \
-                  file://base/0010-Miracle-patch.patch \
-                  file://base/0011-ARM-OMAP-add-omap_rev_-macros.patch \
-                  file://base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch \
-                  file://base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch \
-                  file://base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch \
-                  file://base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch \
-                  file://base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch \
-                  file://base/0017-MFD-enable-madc-clock.patch \
-                  file://base/0018-MFD-add-twl4030-madc-driver.patch \
-                  file://base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch \
-                  file://base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch \
-                  file://base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch \
-                  file://base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch \
-                  file://base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch \
-                  file://base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch \
-                  file://base/0025-RTC-add-support-for-backup-battery-recharge.patch \
-                  file://base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch \
-                  file://base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch \
-                  file://base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch \
-                  \
-                  file://dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch \
-                  file://dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch \
-                  file://dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch \
-                  file://dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch \
-                  file://dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch \
-                  file://dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch \
-                  file://dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch \
-                  file://dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch \
-                  file://dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch \
-                  file://dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch \
-                  file://dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch \
-                  file://dvfs/0012-OMAP-Introduce-device-scale.patch \
-                  file://dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch \
-                  file://dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch \
-                  file://dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch \
-                  file://dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch \
-                  file://dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch \
-                  file://dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch \
-                  file://dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch \
-                  file://dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch \
-                  \
-                  file://new/0001-OMAP-Enable-Magic-SysRq-on-serial-console-ttyOx.patch \
-                  \
-                  file://wl1271/0001-wl12xx-Read-MAC-address-from-NVS-file-on-HW-startup.patch \
-                  file://wl1271/0002-wl1271-11n-Support-Add-Definitions.patch \
-                  file://wl1271/0003-wl1271-11n-Support-ACX-Commands.patch \
-                  file://wl1271/0004-wl1271-11n-Support-functionality-and-configuration-a.patch \
-                  file://wl1271/0005-wl1271-set-wl-vif-only-if-add_interface-succeeded.patch \
-                  file://wl1271/0006-wl12xx-Unset-bssid-filter-ssid-and-bssid-from-firmwa.patch \
-                  file://wl1271/0007-drivers-media-radio-wl128x-FM-Driver-common-header-f.patch \
-                  file://wl1271/0008-drivers-media-radio-wl128x-FM-Driver-V4L2-sources.patch \
-                  file://wl1271/0009-drivers-media-radio-wl128x-FM-Driver-Common-sources.patch \
-                  file://wl1271/0010-drivers-media-radio-wl128x-FM-driver-RX-sources.patch \
-                  file://wl1271/0011-drivers-media-radio-wl128x-FM-driver-TX-sources.patch \
-                  file://wl1271/0012-drivers-media-radio-wl128x-Kconfig-Makefile-for-wl12.patch \
-                  file://wl1271/0013-drivers-media-radio-Update-Kconfig-and-Makefile-for-.patch \
-                  file://wl1271/0014-drivers-misc-ti-st-change-protocol-parse-logic.patch \
-                  file://wl1271/0015-Bluetooth-btwilink-driver.patch \
-                  \
-                  file://media/0001-v4l-Share-code-between-video_usercopy-and-video_ioct.patch \
-                  file://media/0002-v4l-subdev-Don-t-require-core-operations.patch \
-                  file://media/0003-v4l-subdev-Merge-v4l2_i2c_new_subdev_cfg-and-v4l2_i2.patch \
-                  file://media/0004-v4l-subdev-Add-device-node-support.patch \
-                  file://media/0005-v4l-subdev-Uninline-the-v4l2_subdev_init-function.patch \
-                  file://media/0006-v4l-subdev-Control-ioctls-support.patch \
-                  file://media/0007-v4l-subdev-Events-support.patch \
-                  file://media/0008-media-Media-device-node-support.patch \
-                  file://media/0009-media-Media-device.patch \
-                  file://media/0010-media-Entities-pads-and-links.patch \
-                  file://media/0011-media-Entity-graph-traversal.patch \
-                  file://media/0012-media-Entity-use-count.patch \
-                  file://media/0013-media-Media-device-information-query.patch \
-                  file://media/0014-media-Entities-pads-and-links-enumeration.patch \
-                  file://media/0015-media-Links-setup.patch \
-                  file://media/0016-media-Pipelines-and-media-streams.patch \
-                  file://media/0017-v4l-Add-a-media_device-pointer-to-the-v4l2_device-st.patch \
-                  file://media/0018-v4l-Make-video_device-inherit-from-media_entity.patch \
-                  file://media/0019-v4l-Make-v4l2_subdev-inherit-from-media_entity.patch \
-                  file://media/0020-v4l-Move-the-media-v4l2-mediabus.h-header-to-include.patch \
-                  file://media/0021-v4l-Replace-enums-with-fixed-sized-fields-in-public-.patch \
-                  file://media/0022-v4l-Rename-V4L2_MBUS_FMT_GREY8_1X8-to-V4L2_MBUS_FMT_.patch \
-                  file://media/0023-v4l-Group-media-bus-pixel-codes-by-types-and-sort-th.patch \
-                  file://media/0024-v4l-Create-v4l2-subdev-file-handle-structure.patch \
-                  file://media/0025-v4l-subdev-Add-a-new-file-operations-class.patch \
-                  file://media/0026-v4l-v4l2_subdev-pad-level-operations.patch \
-                  file://media/0028-v4l-v4l2_subdev-userspace-format-API.patch \
-                  file://media/0029-v4l-v4l2_subdev-userspace-frame-interval-API.patch \
-                  file://media/0030-v4l-v4l2_subdev-userspace-crop-API.patch \
-                  file://media/0031-v4l-subdev-Generic-ioctl-support.patch \
-                  file://media/0032-v4l-Add-subdev-sensor-g_skip_frames-operation.patch \
-                  file://media/0033-v4l-Include-linux-videodev2.h-in-media-v4l2-ctrls.h.patch \
-                  file://media/0034-v4l-Fix-a-use-before-set-in-the-control-framework.patch \
-                  file://media/0035-v4l-Add-8-bit-YUYV-on-16-bit-bus-and-SGRBG10-media-b.patch \
-                  file://media/0036-v4l-Add-remaining-RAW10-patterns-w-DPCM-pixel-code-v.patch \
-                  file://media/0037-v4l-Add-missing-12-bits-bayer-media-bus-formats.patch \
-                  file://media/0038-v4l-Add-12-bits-bayer-pixel-formats.patch \
-                  file://media/0039-ARM-OMAP3-Update-Camera-ISP-definitions-for-OMAP3630.patch \
-                  file://media/0040-omap3-Remove-unusued-ISP-CBUFF-resource.patch \
-                  file://media/0041-omap3-Add-function-to-register-omap3isp-platform-dev.patch \
-                  file://media/0042-omap2-Fix-camera-resources-for-multiomap.patch \
-                  file://media/0043-OMAP3-ISP-driver.patch \
-                  \
-                  file://0001-beagleboard-hack-in-support-from-xM-rev-C.patch \
-                  file://0001-xM-audio-fix-from-Ashok.patch \
-                  file://0001-omap3-allow-1GHz-mpurates.patch \
-                  file://0001-BeagleBoard-Adjust-USER-button-pin-for-xM.patch \
-                  file://0001-board-omap3beagle-whitespace-cleanup.patch \
-                  file://0002-board-omap3beagle-allow-for-building-without-wl1271.patch \
-                  "
-
-SRC_URI_append_usrp-e1xx = "\
-                  file://usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch \
-                  file://usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch \
-                  file://usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch \
-"
-
-SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
-"
-
-S = "${WORKDIR}/git"
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-TI-WL12xx-MMC-patches-03.21.00.04.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-TI-WL12xx-MMC-patches-03.21.00.04.patch
deleted file mode 100644
index 1f8f0f9..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-TI-WL12xx-MMC-patches-03.21.00.04.patch
+++ /dev/null
@@ -1,616 +0,0 @@
-From 303bd9e5876970a970aa8a90b2f1836a3374ab39 Mon Sep 17 00:00:00 2001
-From: Nisim Peled <nisimp at ti.com>
-Date: Wed, 18 May 2011 22:34:29 +0300
-Subject: [PATCH] TI-WL12xx MMC patches 03.21.00.04
- Enables a second MMC (mmc1) which is actually the TI-WL12xx module connection to the board.
-
-Signed-off-by: Nisim Peled <nisimp at ti.com>
----
- arch/arm/mach-davinci/Kconfig              |    1 +
- arch/arm/mach-davinci/board-da850-evm.c    |  102 +++++++++++++++++++++++++--
- arch/arm/mach-davinci/da850.c              |   16 +++++
- arch/arm/mach-davinci/devices-da8xx.c      |    1 +
- arch/arm/mach-davinci/dma.c                |    6 ++
- arch/arm/mach-davinci/include/mach/da8xx.h |    1 +
- arch/arm/mach-davinci/include/mach/mmc.h   |    3 +
- arch/arm/mach-davinci/include/mach/mux.h   |   10 +++
- drivers/mmc/core/core.c                    |   24 ++++++-
- drivers/mmc/core/sdio.c                    |   16 ++++-
- drivers/mmc/core/sdio_bus.c                |   32 ---------
- drivers/mmc/host/davinci_mmc.c             |   18 +++++
- drivers/net/wireless/wl12xx/Kconfig        |    1 -
- drivers/net/wireless/wl12xx/wl1271_boot.c  |   10 +--
- include/linux/mmc/host.h                   |    5 ++
- include/linux/wl12xx.h                     |   27 +++++++
- 16 files changed, 221 insertions(+), 52 deletions(-)
-
-diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
-index c4c207e..ece78c6 100644
---- a/arch/arm/mach-davinci/Kconfig
-+++ b/arch/arm/mach-davinci/Kconfig
-@@ -40,6 +40,7 @@ config ARCH_DAVINCI_DA850
- 	select CP_INTC
- 	select ARCH_DAVINCI_DA8XX
- 	select ARCH_HAS_CPUFREQ
-+	select WL12XX_PLATFORM_DATA
- 
- config DAVINCI_UART1_AFE
- 	bool "Enable UART1 flow control"
-diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
-index 80710f1..4b4d78b 100644
---- a/arch/arm/mach-davinci/board-da850-evm.c
-+++ b/arch/arm/mach-davinci/board-da850-evm.c
-@@ -34,6 +34,7 @@
- #include <linux/delay.h>
- #include <linux/i2c-gpio.h>
- #include <linux/pwm_backlight.h>
-+#include <linux/wl12xx.h>
- 
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -62,6 +63,9 @@
- 
- #define DA850_SD_ENABLE_PIN		GPIO_TO_PIN(0, 11)
- 
-+#define DA850_WLAN_EN			GPIO_TO_PIN(6, 9)
-+#define DA850_WLAN_IRQ			GPIO_TO_PIN(6, 10)
-+
- #define DAVINCI_BACKLIGHT_MAX_BRIGHTNESS	250
- #define DAVINVI_BACKLIGHT_DEFAULT_BRIGHTNESS	250
- #define DAVINCI_PWM_PERIOD_NANO_SECONDS		(10000 * 10)
-@@ -1038,13 +1042,50 @@ static int da850_evm_mmc_get_cd(int index)
- 	return !gpio_get_value(DA850_MMCSD_CD_PIN);
- }
- 
--static struct davinci_mmc_config da850_mmc_config = {
--	.get_ro		= da850_evm_mmc_get_ro,
--	.get_cd		= da850_evm_mmc_get_cd,
--	.wires		= 4,
--	.max_freq	= 50000000,
--	.caps		= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
--	.version	= MMC_CTLR_VERSION_2,
-+static int wl12xx_set_power(int slot, int power_on)
-+{
-+	static int power_state;
-+
-+	pr_debug("Powering %s wifi", (power_on ? "on" : "off"));
-+
-+	if (power_on == power_state)
-+		return 0;
-+	power_state = power_on;
-+
-+	if (power_on) {
-+		gpio_set_value(DA850_WLAN_EN, 1);
-+		mdelay(15);
-+		gpio_set_value(DA850_WLAN_EN, 0);
-+		mdelay(1);
-+		gpio_set_value(DA850_WLAN_EN, 1);
-+		mdelay(70);
-+	} else {
-+		gpio_set_value(DA850_WLAN_EN, 0);
-+	}
-+
-+	return 0;
-+}
-+
-+static struct davinci_mmc_config da850_mmc_config[] = {
-+	{
-+		.get_ro		= da850_evm_mmc_get_ro,
-+		.get_cd		= da850_evm_mmc_get_cd,
-+		.wires		= 4,
-+		.max_freq	= 50000000,
-+		.caps		= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-+		.version	= MMC_CTLR_VERSION_2,
-+	},
-+	{
-+		.get_ro		= NULL,
-+		.get_cd		= NULL,
-+		.set_power	= wl12xx_set_power,
-+		.wires		= 4,
-+		.max_freq	= 25000000,
-+		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_NONREMOVABLE |
-+				  MMC_CAP_POWER_OFF_CARD,
-+		.version	= MMC_CTLR_VERSION_2,
-+	},
-+	{}	/* Terminator */
- };
- 
- static void da850_panel_power_ctrl(int val)
-@@ -1765,6 +1806,40 @@ static struct vpif_display_config da850_vpif_display_config = {
- #define HAS_LCD	0
- #endif
- 
-+#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+
-+static struct wl12xx_platform_data da850_wl12xx_wlan_data __initdata = {
-+	.irq = -1,
-+	.board_ref_clock = WL12XX_REFCLOCK_38,
-+	.platform_quirks = WL12XX_PLATFORM_QUIRK_EDGE_IRQ,
-+};
-+
-+static void da850_wl12xx_set_platform_data(void)
-+{
-+	da850_wl12xx_wlan_data.irq = gpio_to_irq(DA850_WLAN_IRQ);
-+	if (wl12xx_set_platform_data(&da850_wl12xx_wlan_data))
-+		pr_err("Error setting wl12xx data\n");
-+}
-+
-+#else
-+
-+static void da850_wl12xx_set_platform_data(void) { }
-+
-+#endif
-+
-+static void da850_wl12xx_init(void)
-+{
-+	if (gpio_request(DA850_WLAN_EN, "wl12xx") ||
-+	    gpio_direction_output(DA850_WLAN_EN, 0))
-+		pr_err("Error initializing the wl12xx enable gpio\n");
-+
-+	if (gpio_request(DA850_WLAN_IRQ, "wl12xx_irq") ||
-+	    gpio_direction_input(DA850_WLAN_IRQ))
-+		pr_err("Error initializing the wl12xx irq gpio\n");
-+
-+	da850_wl12xx_set_platform_data();
-+}
-+
- static __init void da850_evm_init(void)
- {
- 	int ret;
-@@ -1806,6 +1881,11 @@ static __init void da850_evm_init(void)
- 			pr_warning("da850_evm_init: mmcsd0 mux setup failed:"
- 					" %d\n", ret);
- 
-+		ret = davinci_cfg_reg_list(da850_mmcsd1_pins);
-+		if (ret)
-+			pr_warning("da850_evm_init: mmcsd1 mux setup failed:"
-+					" %d\n", ret);
-+
- 		ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n");
- 		if (ret)
- 			pr_warning("da850_evm_init: can not open GPIO %d\n",
-@@ -1818,10 +1898,16 @@ static __init void da850_evm_init(void)
- 					DA850_MMCSD_WP_PIN);
- 		gpio_direction_input(DA850_MMCSD_WP_PIN);
- 
--		ret = da8xx_register_mmcsd0(&da850_mmc_config);
-+		ret = da8xx_register_mmcsd0(&da850_mmc_config[0]);
- 		if (ret)
- 			pr_warning("da850_evm_init: mmcsd0 registration failed:"
- 					" %d\n", ret);
-+		ret = da850_register_mmcsd1(&da850_mmc_config[1]);
-+		if (ret)
-+			pr_warning("da850_evm_init: mmcsd0 registration failed:"
-+					" %d\n", ret);
-+
-+		da850_wl12xx_init();
- 	}
- 
- 	davinci_serial_init(&da850_evm_uart_config);
-diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
-index 5e13f88..bc52ec4 100644
---- a/arch/arm/mach-davinci/da850.c
-+++ b/arch/arm/mach-davinci/da850.c
-@@ -580,6 +580,13 @@ static const struct mux_config da850_pins[] = {
- 	MUX_CFG(DA850, MMCSD0_DAT_3,	10,	20,	15,	2,	false)
- 	MUX_CFG(DA850, MMCSD0_CLK,	10,	0,	15,	2,	false)
- 	MUX_CFG(DA850, MMCSD0_CMD,	10,	4,	15,	2,	false)
-+	/* MMC/SD1 function */
-+	MUX_CFG(DA850, MMCSD1_DAT_0,	18,	8,	15,	2,	false)
-+	MUX_CFG(DA850, MMCSD1_DAT_1,	19,	16,	15,	2,	false)
-+	MUX_CFG(DA850, MMCSD1_DAT_2,	19,	12,	15,	2,	false)
-+	MUX_CFG(DA850, MMCSD1_DAT_3,	19,	8,	15,	2,	false)
-+	MUX_CFG(DA850, MMCSD1_CLK,	18,	12,	15,	2,	false)
-+	MUX_CFG(DA850, MMCSD1_CMD,	18,	16,	15,	2,	false)
- 	/* EMIF2.5/EMIFA function */
- 	MUX_CFG(DA850, EMA_D_7,		9,	0,	15,	1,	false)
- 	MUX_CFG(DA850, EMA_D_6,		9,	4,	15,	1,	false)
-@@ -642,6 +649,8 @@ static const struct mux_config da850_pins[] = {
- 	MUX_CFG(DA850, GPIO6_13,        13,     8,      15,     8,      false)
- 	MUX_CFG(DA850, RTC_ALARM,	0,	28,	15,	2,	false)
- 	MUX_CFG(DA850, GPIO7_4,         17,     20,     15,     8,      false)
-+	MUX_CFG(DA850, GPIO6_9,		13,	24,	15,	8,	false)
-+	MUX_CFG(DA850, GPIO6_10,	13,	20,	15,	8,	false)
- 	/* McBSP0 function */
- 	MUX_CFG(DA850,	MCBSP0_CLKR,	2,	4,	15,	2,	false)
- 	MUX_CFG(DA850,	MCBSP0_CLKX,	2,	8,	15,	2,	false)
-@@ -778,6 +787,13 @@ const short da850_mmcsd0_pins[] __initdata = {
- 	-1
- };
- 
-+const short da850_mmcsd1_pins[] __initdata = {
-+	DA850_MMCSD1_DAT_0, DA850_MMCSD1_DAT_1, DA850_MMCSD1_DAT_2,
-+	DA850_MMCSD1_DAT_3, DA850_MMCSD1_CLK, DA850_MMCSD1_CMD,
-+	DA850_GPIO6_9, DA850_GPIO6_10,
-+	-1
-+};
-+
- const short da850_ehrpwm0_pins[] __initdata = {
- 	DA850_EHRPWM0_A, DA850_EHRPWM0_B, DA850_EHRPWM0_TZ,
- 	-1
-diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
-index 70aa9f8..dd62e44 100644
---- a/arch/arm/mach-davinci/devices-da8xx.c
-+++ b/arch/arm/mach-davinci/devices-da8xx.c
-@@ -124,6 +124,7 @@ static struct edma_soc_info da830_edma_cc0_info = {
- 	.n_cc			= 1,
- 	.queue_tc_mapping	= da8xx_queue_tc_mapping,
- 	.queue_priority_mapping	= da8xx_queue_priority_mapping,
-+	.default_queue		= EVENTQ_0,
- };
- 
- static struct edma_soc_info *da830_edma_info[EDMA_MAX_CC] = {
-diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c
-index 6b96698..6152f69 100644
---- a/arch/arm/mach-davinci/dma.c
-+++ b/arch/arm/mach-davinci/dma.c
-@@ -1450,8 +1450,10 @@ static int __init edma_probe(struct platform_device *pdev)
- 							EDMA_MAX_CC);
- 
- 		edma_cc[j]->default_queue = info[j]->default_queue;
-+#if 0
- 		if (!edma_cc[j]->default_queue)
- 			edma_cc[j]->default_queue = EVENTQ_1;
-+#endif
- 
- 		dev_dbg(&pdev->dev, "DMA REG BASE ADDR=%p\n",
- 			edmacc_regs_base[j]);
-@@ -1516,7 +1518,11 @@ static int __init edma_probe(struct platform_device *pdev)
- 		 * started by the codec engine will not cause audio defects.
- 		 */
- 		for (i = 0; i < edma_cc[j]->num_channels; i++)
-+#if 0
- 			map_dmach_queue(j, i, EVENTQ_1);
-+#else
-+			map_dmach_queue(j, i, edma_cc[j]->default_queue);
-+#endif
- 
- 		queue_tc_mapping = info[j]->queue_tc_mapping;
- 		queue_priority_mapping = info[j]->queue_priority_mapping;
-diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
-index 1053485..d67d502 100644
---- a/arch/arm/mach-davinci/include/mach/da8xx.h
-+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
-@@ -150,6 +150,7 @@ extern const short da850_cpgmac_pins[];
- extern const short da850_mcasp_pins[];
- extern const short da850_lcdcntl_pins[];
- extern const short da850_mmcsd0_pins[];
-+extern const short da850_mmcsd1_pins[];
- extern const short da850_emif25_pins[];
- extern const short da850_mcbsp0_pins[];
- extern const short da850_mcbsp1_pins[];
-diff --git a/arch/arm/mach-davinci/include/mach/mmc.h b/arch/arm/mach-davinci/include/mach/mmc.h
-index d4f1e96..e64d636 100644
---- a/arch/arm/mach-davinci/include/mach/mmc.h
-+++ b/arch/arm/mach-davinci/include/mach/mmc.h
-@@ -12,6 +12,9 @@ struct davinci_mmc_config {
- 	/* get_cd()/get_wp() may sleep */
- 	int	(*get_cd)(int module);
- 	int	(*get_ro)(int module);
-+
-+	int	(*set_power)(int module, int on);
-+
- 	/* wires == 0 is equivalent to wires == 4 (4-bit parallel) */
- 	u8	wires;
- 
-diff --git a/arch/arm/mach-davinci/include/mach/mux.h b/arch/arm/mach-davinci/include/mach/mux.h
-index 8bea8fb..b8b00bc 100644
---- a/arch/arm/mach-davinci/include/mach/mux.h
-+++ b/arch/arm/mach-davinci/include/mach/mux.h
-@@ -860,6 +860,14 @@ enum davinci_da850_index {
- 	DA850_MMCSD0_CLK,
- 	DA850_MMCSD0_CMD,
- 
-+	/* MMC/SD1 function */
-+	DA850_MMCSD1_DAT_0,
-+	DA850_MMCSD1_DAT_1,
-+	DA850_MMCSD1_DAT_2,
-+	DA850_MMCSD1_DAT_3,
-+	DA850_MMCSD1_CLK,
-+	DA850_MMCSD1_CMD,
-+
- 	/* EMIF2.5/EMIFA function */
- 	DA850_EMA_D_7,
- 	DA850_EMA_D_6,
-@@ -923,6 +931,8 @@ enum davinci_da850_index {
- 	DA850_GPIO6_13,
- 	DA850_RTC_ALARM,
- 	DA850_GPIO7_4,
-+	DA850_GPIO6_9,
-+	DA850_GPIO6_10,
- 
- 	/* McBSP0 function */
- 	DA850_MCBSP0_CLKR,
-diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
-index 57dcf8f..add09c3 100644
---- a/drivers/mmc/core/core.c
-+++ b/drivers/mmc/core/core.c
-@@ -22,6 +22,7 @@
- #include <linux/scatterlist.h>
- #include <linux/log2.h>
- #include <linux/regulator/consumer.h>
-+#include <linux/pm_runtime.h>
- 
- #include <linux/mmc/card.h>
- #include <linux/mmc/host.h>
-@@ -1446,8 +1447,12 @@ void mmc_rescan(struct work_struct *work)
- 
- 	mmc_bus_get(host);
- 
--	/* if there is a card registered, check whether it is still present */
--	if ((host->bus_ops != NULL) && host->bus_ops->detect && !host->bus_dead)
-+	/*
-+	 * if there is a _removable_ card registered, check whether it is
-+	 * still present
-+	 */
-+	if (host->bus_ops && host->bus_ops->detect && !host->bus_dead
-+	    && mmc_card_is_removable(host))
- 		host->bus_ops->detect(host);
- 
- 	mmc_bus_put(host);
-@@ -1538,7 +1543,8 @@ out_fail:
- 		mmc_power_off(host);
- 	}
- out:
--	if (host->caps & MMC_CAP_NEEDS_POLL)
-+	if (host->caps & MMC_CAP_NEEDS_POLL &&
-+	    !(host->caps & MMC_CAP_NONREMOVABLE))
- 		mmc_schedule_delayed_work(&host->detect, HZ);
- }
- 
-@@ -1721,6 +1727,18 @@ int mmc_resume_host(struct mmc_host *host)
- 		if (!(host->pm_flags & MMC_PM_KEEP_POWER)) {
- 			mmc_power_up(host);
- 			mmc_select_voltage(host, host->ocr);
-+			/*
-+			 * Tell runtime PM core we just powered up the card,
-+			 * since it still believes the card is powered off.
-+			 * Note that currently runtime PM is only enabled
-+			 * for SDIO cards that are MMC_CAP_POWER_OFF_CARD
-+			 */
-+			if (mmc_card_sdio(host->card) &&
-+			    (host->caps & MMC_CAP_POWER_OFF_CARD)) {
-+				pm_runtime_disable(&host->card->dev);
-+				pm_runtime_set_active(&host->card->dev);
-+				pm_runtime_enable(&host->card->dev);
-+			}
- 		}
- 		BUG_ON(!host->bus_ops->resume);
- 		err = host->bus_ops->resume(host);
-diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
-index efef5f9..b424fbe 100644
---- a/drivers/mmc/core/sdio.c
-+++ b/drivers/mmc/core/sdio.c
-@@ -627,15 +627,27 @@ static int mmc_sdio_suspend(struct mmc_host *host)
- 
- static int mmc_sdio_resume(struct mmc_host *host)
- {
--	int i, err;
-+	int i, err = 0;
- 
- 	BUG_ON(!host);
- 	BUG_ON(!host->card);
- 
- 	/* Basic card reinitialization. */
- 	mmc_claim_host(host);
--	err = mmc_sdio_init_card(host, host->ocr, host->card,
-+
-+	/* No need to reinitialize powered-resumed nonremovable cards */
-+	if (mmc_card_is_removable(host) || !mmc_card_is_powered_resumed(host))
-+		err = mmc_sdio_init_card(host, host->ocr, host->card,
- 				 (host->pm_flags & MMC_PM_KEEP_POWER));
-+	else if (mmc_card_is_powered_resumed(host)) {
-+		/* We may have switched to 1-bit mode during suspend */
-+		err = sdio_enable_4bit_bus(host->card);
-+		if (err > 0) {
-+			mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
-+			err = 0;
-+		}
-+	}
-+
- 	if (!err && host->sdio_irqs)
- 		mmc_signal_sdio_irq(host);
- 	mmc_release_host(host);
-diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
-index 203da44..d29b9c3 100644
---- a/drivers/mmc/core/sdio_bus.c
-+++ b/drivers/mmc/core/sdio_bus.c
-@@ -197,44 +197,12 @@ out:
- 
- #ifdef CONFIG_PM_RUNTIME
- 
--static int sdio_bus_pm_prepare(struct device *dev)
--{
--	struct sdio_func *func = dev_to_sdio_func(dev);
--
--	/*
--	 * Resume an SDIO device which was suspended at run time at this
--	 * point, in order to allow standard SDIO suspend/resume paths
--	 * to keep working as usual.
--	 *
--	 * Ultimately, the SDIO driver itself will decide (in its
--	 * suspend handler, or lack thereof) whether the card should be
--	 * removed or kept, and if kept, at what power state.
--	 *
--	 * At this point, PM core have increased our use count, so it's
--	 * safe to directly resume the device. After system is resumed
--	 * again, PM core will drop back its runtime PM use count, and if
--	 * needed device will be suspended again.
--	 *
--	 * The end result is guaranteed to be a power state that is
--	 * coherent with the device's runtime PM use count.
--	 *
--	 * The return value of pm_runtime_resume is deliberately unchecked
--	 * since there is little point in failing system suspend if a
--	 * device can't be resumed.
--	 */
--	if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD)
--		pm_runtime_resume(dev);
--
--	return 0;
--}
--
- static const struct dev_pm_ops sdio_bus_pm_ops = {
- 	SET_RUNTIME_PM_OPS(
- 		pm_generic_runtime_suspend,
- 		pm_generic_runtime_resume,
- 		pm_generic_runtime_idle
- 	)
--	.prepare = sdio_bus_pm_prepare,
- };
- 
- #define SDIO_PM_OPS_PTR	(&sdio_bus_pm_ops)
-diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
-index e15547c..2e9b507 100644
---- a/drivers/mmc/host/davinci_mmc.c
-+++ b/drivers/mmc/host/davinci_mmc.c
-@@ -208,6 +208,8 @@ struct mmc_davinci_host {
- #ifdef CONFIG_CPU_FREQ
- 	struct notifier_block	freq_transition;
- #endif
-+
-+	unsigned char		power_mode;
- };
- 
- 
-@@ -798,12 +800,28 @@ static void calculate_clk_divider(struct mmc_host *mmc, struct mmc_ios *ios)
- static void mmc_davinci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
- {
- 	struct mmc_davinci_host *host = mmc_priv(mmc);
-+	struct platform_device *pdev = to_platform_device(mmc->parent);
-+	struct davinci_mmc_config *config = pdev->dev.platform_data;
- 
- 	dev_dbg(mmc_dev(host->mmc),
- 		"clock %dHz busmode %d powermode %d Vdd %04x\n",
- 		ios->clock, ios->bus_mode, ios->power_mode,
- 		ios->vdd);
- 
-+	if (ios->power_mode != host->power_mode) {
-+		switch (ios->power_mode) {
-+		case MMC_POWER_OFF:
-+			if (config && config->set_power)
-+				config->set_power(pdev->id, 0);
-+			break;
-+		case MMC_POWER_UP:
-+			if (config && config->set_power)
-+				config->set_power(pdev->id, 1);
-+			break;
-+		}
-+		host->power_mode = ios->power_mode;
-+	}
-+
- 	switch (ios->bus_width) {
- 	case MMC_BUS_WIDTH_8:
- 		dev_dbg(mmc_dev(host->mmc), "Enabling 8 bit mode\n");
-diff --git a/drivers/net/wireless/wl12xx/Kconfig b/drivers/net/wireless/wl12xx/Kconfig
-index b447559..441aaf6 100644
---- a/drivers/net/wireless/wl12xx/Kconfig
-+++ b/drivers/net/wireless/wl12xx/Kconfig
-@@ -42,5 +42,4 @@ config WL1271_SDIO
- 
- config WL12XX_PLATFORM_DATA
- 	bool
--	depends on WL1271_SDIO != n
- 	default y
-diff --git a/drivers/net/wireless/wl12xx/wl1271_boot.c b/drivers/net/wireless/wl12xx/wl1271_boot.c
-index b910212..5b19072 100644
---- a/drivers/net/wireless/wl12xx/wl1271_boot.c
-+++ b/drivers/net/wireless/wl12xx/wl1271_boot.c
-@@ -471,20 +471,19 @@ int wl1271_boot(struct wl1271 *wl)
- {
- 	int ret = 0;
- 	u32 tmp, clk, pause;
--	int ref_clock = wl->ref_clock;
- 
- 	wl1271_boot_hw_version(wl);
- 
--	if (ref_clock == 0 || ref_clock == 2 || ref_clock == 4)
-+	if (wl->ref_clock == 0 || wl->ref_clock == 2 || wl->ref_clock == 4)
- 		/* ref clk: 19.2/38.4/38.4-XTAL */
- 		clk = 0x3;
--	else if (ref_clock == 1 || ref_clock == 3)
-+	else if (wl->ref_clock == 1 || wl->ref_clock == 3)
- 		/* ref clk: 26/52 */
- 		clk = 0x5;
- 	else
- 		return -EINVAL;
- 
--	if (ref_clock != 0) {
-+	if (wl->ref_clock != 0) {
- 		u16 val;
- 		/* Set clock type (open drain) */
- 		val = wl1271_top_reg_read(wl, OCP_REG_CLK_TYPE);
-@@ -529,8 +528,7 @@ int wl1271_boot(struct wl1271 *wl)
- 
- 	wl1271_debug(DEBUG_BOOT, "clk2 0x%x", clk);
- 
--	/* 2 */
--	clk |= (ref_clock << 1) << 4;
-+	clk |= (wl->ref_clock << 1) << 4;
- 	wl1271_write32(wl, DRPW_SCRATCH_START, clk);
- 
- 	wl1271_set_partition(wl, &part_table[PART_WORK]);
-diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
-index 30f6fad..86d74a5 100644
---- a/include/linux/mmc/host.h
-+++ b/include/linux/mmc/host.h
-@@ -307,5 +307,10 @@ static inline int mmc_card_is_removable(struct mmc_host *host)
- 	return !(host->caps & MMC_CAP_NONREMOVABLE) && mmc_assume_removable;
- }
- 
-+static inline int mmc_card_is_powered_resumed(struct mmc_host *host)
-+{
-+	return host->pm_flags & MMC_PM_KEEP_POWER;
-+}
-+
- #endif
- 
-diff --git a/include/linux/wl12xx.h b/include/linux/wl12xx.h
-index 4f902e1..4b69739 100644
---- a/include/linux/wl12xx.h
-+++ b/include/linux/wl12xx.h
-@@ -24,14 +24,41 @@
- #ifndef _LINUX_WL12XX_H
- #define _LINUX_WL12XX_H
- 
-+/* Reference clock values */
-+enum {
-+	WL12XX_REFCLOCK_19	= 0, /* 19.2 MHz */
-+	WL12XX_REFCLOCK_26	= 1, /* 26 MHz */
-+	WL12XX_REFCLOCK_38	= 2, /* 38.4 MHz */
-+	WL12XX_REFCLOCK_52	= 3, /* 52 MHz */
-+	WL12XX_REFCLOCK_38_XTAL = 4, /* 38.4 MHz, XTAL */
-+	WL12XX_REFCLOCK_26_XTAL = 5, /* 26 MHz, XTAL */
-+};
-+
-+/* TCXO clock values */
-+enum {
-+	WL12XX_TCXOCLOCK_19_2	= 0, /* 19.2MHz */
-+	WL12XX_TCXOCLOCK_26	= 1, /* 26 MHz */
-+	WL12XX_TCXOCLOCK_38_4	= 2, /* 38.4MHz */
-+	WL12XX_TCXOCLOCK_52	= 3, /* 52 MHz */
-+	WL12XX_TCXOCLOCK_16_368	= 4, /* 16.368 MHz */
-+	WL12XX_TCXOCLOCK_32_736	= 5, /* 32.736 MHz */
-+	WL12XX_TCXOCLOCK_16_8	= 6, /* 16.8 MHz */
-+	WL12XX_TCXOCLOCK_33_6	= 7, /* 33.6 MHz */
-+};
-+
- struct wl12xx_platform_data {
- 	void (*set_power)(bool enable);
- 	/* SDIO only: IRQ number if WLAN_IRQ line is used, 0 for SDIO IRQs */
- 	int irq;
- 	bool use_eeprom;
- 	int board_ref_clock;
-+	int board_tcxo_clock;
-+	unsigned long platform_quirks;
- };
- 
-+/* Platform does not support level trigger interrupts */
-+#define WL12XX_PLATFORM_QUIRK_EDGE_IRQ	BIT(0)
-+
- #ifdef CONFIG_WL12XX_PLATFORM_DATA
- 
- int wl12xx_set_platform_data(const struct wl12xx_platform_data *data);
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch
deleted file mode 100644
index ff1c430..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0001-musb-update-PIO-mode-help-information-in-Kconfig.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 10fbd32a96aedd644b6bf38888a2af64cc13a35f Mon Sep 17 00:00:00 2001
-From: Matt Porter <mporter at ti.com>
-Date: Mon, 5 Dec 2011 15:29:35 -0600
-Subject: [PATCH] musb: update PIO mode help information in Kconfig
-
-* Updated the Kconfig help information for the PIO mode for MUSB
-  to make it more clear to the customer when to select this option
-  and which devices currently have issues with this option.
-* This is in accordance with the findings for CPPI4.1 DMA usage
-  for MUSB
-
-Upstream-Status: Submitted
-    * Submitted to the PSP team using the lpr list
-
-Signed-off-by: Matt Porter <mporter at ti.com>
-Signed-off-by: Chase Maupin <Chase.Maupin at ti.com>
----
- drivers/usb/musb/Kconfig |   11 +++++++----
- 1 files changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
-index ee75cbc..d56f23d 100644
---- a/drivers/usb/musb/Kconfig
-+++ b/drivers/usb/musb/Kconfig
-@@ -107,10 +107,13 @@ config MUSB_PIO_ONLY
-	  All data is copied between memory and FIFO by the CPU.
-	  DMA controllers are ignored.
-
--	  Do not select 'n' here unless DMA support for your SOC or board
--	  is unavailable (or unstable).  When DMA is enabled at compile time,
--	  you can still disable it at run time using the "use_dma=n" module
--	  parameter.
-+	  Select 'y' here if DMA support for your SOC or board
-+	  is unavailable (or unstable). On CPPI 4.1 DMA based
-+	  systems (AM335x, AM35x, and AM180x) DMA support is
-+	  considered unstable and this option should be enabled
-+	  in production. When DMA is enabled at compile time,
-+	  you can still disable it at run time using the "use_dma=n"
-+	  module parameter.
-
- config USB_UX500_DMA_HW
-	select USB_UX500_DMA
---
-1.7.0.4
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0002-da850-Set-maximum-OPP-frequency-to-456MHz.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0002-da850-Set-maximum-OPP-frequency-to-456MHz.patch
deleted file mode 100644
index 86e73a8..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0002-da850-Set-maximum-OPP-frequency-to-456MHz.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 47ec4ffa87e353bf1913f8f4de31e1fd5928b52f Mon Sep 17 00:00:00 2001
-From: Nisim Peled <nisimp at ti.com>
-Date: Wed, 18 May 2011 22:57:56 +0300
-Subject: [PATCH] da850 Set maximum OPP frequency to 456MHz
- extends the CPU rate limit to maximum of 456MHz and enables a better performance.
- The default rate stays the same (300MHz).
-
-Signed-off-by: Nisim Peled <nisimp at ti.com>
----
- arch/arm/mach-davinci/da850.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
-index bc52ec4..d11854c 100644
---- a/arch/arm/mach-davinci/da850.c
-+++ b/arch/arm/mach-davinci/da850.c
-@@ -1194,7 +1194,7 @@ static struct platform_device da850_cpufreq_device = {
- 	.id = -1,
- };
- 
--unsigned int da850_max_speed = 300000;
-+unsigned int da850_max_speed = 456000;
- 
- static void da850_set_pll0_bypass_src(bool pll1_sysclk3)
- {
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0003-AM18xx-WL1271-Enable-BT.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0003-AM18xx-WL1271-Enable-BT.patch
deleted file mode 100644
index 346bc04..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0003-AM18xx-WL1271-Enable-BT.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From da8fc5330246e7242945646306ea062e6aca3214 Mon Sep 17 00:00:00 2001
-From: Nisim Peled <nisimp at ti.com>
-Date: Wed, 18 May 2011 21:56:03 +0300
-Subject: [PATCH] AM18xx WL1271 Enable BT Manage a GPIO enable/disable (DA850_GPIO0_15) to enable the Bluetooth functionality.
-
-Signed-off-by: Nisim Peled <nisimp at ti.com>
----
- arch/arm/mach-davinci/board-da850-evm.c    |   27 ++++++++++++++++++++++++++-
- arch/arm/mach-davinci/da850.c              |    6 ++++++
- arch/arm/mach-davinci/include/mach/da8xx.h |    1 +
- arch/arm/mach-davinci/include/mach/mux.h   |    1 +
- 4 files changed, 34 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
-index 4b4d78b..7414331 100644
---- a/arch/arm/mach-davinci/board-da850-evm.c
-+++ b/arch/arm/mach-davinci/board-da850-evm.c
-@@ -72,6 +72,20 @@
- 
- #define PWM_DEVICE_ID	"ehrpwm.1"
- 
-+
-+/* Enabling GPIO for WL1271's Bluetooth */
-+#define WL1271_BT_EN_GPIO GPIO_TO_PIN(0, 15)
-+
-+/* Enabling GPIOs for WL1271's BT, FM, GPS respectively (-1 if not used) */
-+static int gpios[] = { WL1271_BT_EN_GPIO, -1, -1};
-+
-+static struct platform_device wl1271_device = {
-+       .name           = "kim",
-+       .id             = -1,
-+       .dev.platform_data = &gpios,
-+};
-+
-+
- static struct platform_pwm_backlight_data da850evm_backlight_data = {
- 	.pwm_id		= PWM_DEVICE_ID,
- 	.ch		= 0,
-@@ -1836,6 +1850,9 @@ static void da850_wl12xx_init(void)
- 	if (gpio_request(DA850_WLAN_IRQ, "wl12xx_irq") ||
- 	    gpio_direction_input(DA850_WLAN_IRQ))
- 		pr_err("Error initializing the wl12xx irq gpio\n");
-+	if (gpio_request(WL1271_BT_EN_GPIO, "wl1271 BT Enable") ||
-+	    gpio_direction_output(WL1271_BT_EN_GPIO,0))
-+		pr_err("Failed to request BT_EN GPIO\n");
- 
- 	da850_wl12xx_set_platform_data();
- }
-@@ -2109,7 +2126,15 @@ static __init void da850_evm_init(void)
- 	if (ret)
- 		pr_warning("da850_evm_init: eCAP registration failed: %d\n",
- 			       ret);
--
-+	ret = davinci_cfg_reg_list(da850_wl1271_pins);
-+	if (ret)
-+		pr_warning("da850_evm_init: wl1271 mux setup failed:"
-+		       "%d\n",	ret);
-+ 
-+	ret = platform_device_register(&wl1271_device);
-+	if (ret)
-+		pr_warning("da850_evm_init: wl1271 device registration"
-+				" failed: %d\n", ret);
- 	/* initilaize usb module */
- 	da850_evm_usb_init();
- }
-diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
-index d11854c..884c88c 100644
---- a/arch/arm/mach-davinci/da850.c
-+++ b/arch/arm/mach-davinci/da850.c
-@@ -649,6 +649,7 @@ static const struct mux_config da850_pins[] = {
- 	MUX_CFG(DA850, GPIO6_13,        13,     8,      15,     8,      false)
- 	MUX_CFG(DA850, RTC_ALARM,	0,	28,	15,	2,	false)
- 	MUX_CFG(DA850, GPIO7_4,         17,     20,     15,     8,      false)
-+	MUX_CFG(DA850, GPIO0_15,	0,	0,	15,	8,	false)
- 	MUX_CFG(DA850, GPIO6_9,		13,	24,	15,	8,	false)
- 	MUX_CFG(DA850, GPIO6_10,	13,	20,	15,	8,	false)
- 	/* McBSP0 function */
-@@ -804,6 +805,11 @@ const short da850_ehrpwm1_pins[] __initdata = {
- 	-1
- };
- 
-+const short da850_wl1271_pins[] __initdata = {
-+	DA850_GPIO0_15,
-+	-1
-+};
-+
- const short da850_emif25_pins[] __initdata = {
- 	DA850_EMA_BA_1, DA850_EMA_CLK, DA850_EMA_WAIT_1, DA850_NEMA_CS_2,
- 	DA850_NEMA_CS_3, DA850_NEMA_CS_4, DA850_NEMA_WE, DA850_NEMA_OE,
-diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
-index d67d502..f9b70c4 100644
---- a/arch/arm/mach-davinci/include/mach/da8xx.h
-+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
-@@ -158,4 +158,5 @@ extern const short da850_vpif_capture_pins[];
- extern const short da850_vpif_display_pins[];
- extern const short da850_ehrpwm0_pins[];
- extern const short da850_ehrpwm1_pins[];
-+extern const short da850_wl1271_pins[];
- #endif /* __ASM_ARCH_DAVINCI_DA8XX_H */
-diff --git a/arch/arm/mach-davinci/include/mach/mux.h b/arch/arm/mach-davinci/include/mach/mux.h
-index b8b00bc..b7333bb 100644
---- a/arch/arm/mach-davinci/include/mach/mux.h
-+++ b/arch/arm/mach-davinci/include/mach/mux.h
-@@ -931,6 +931,7 @@ enum davinci_da850_index {
- 	DA850_GPIO6_13,
- 	DA850_RTC_ALARM,
- 	DA850_GPIO7_4,
-+	DA850_GPIO0_15,
- 	DA850_GPIO6_9,
- 	DA850_GPIO6_10,
- 
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0004-PSP03.21.00.04.sdk-activate-wireless-extensions.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0004-PSP03.21.00.04.sdk-activate-wireless-extensions.patch
deleted file mode 100644
index 5a58421..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0004-PSP03.21.00.04.sdk-activate-wireless-extensions.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 5be065dd4c8711b530c69c9ab5b998f404a0be5f Mon Sep 17 00:00:00 2001
-From: Nisim Peled <nisimp at ti.com>
-Date: Tue, 17 May 2011 23:14:02 +0300
-Subject: [PATCH] PSP03.21.00.04.sdk: activate wireless extensions interface used by iwconfig
-
-Signed-off-by: Nisim Peled <nisimp at ti.com>
----
- arch/arm/mach-davinci/Kconfig |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
-index ece78c6..287bd51 100644
---- a/arch/arm/mach-davinci/Kconfig
-+++ b/arch/arm/mach-davinci/Kconfig
-@@ -41,6 +41,7 @@ config ARCH_DAVINCI_DA850
- 	select ARCH_DAVINCI_DA8XX
- 	select ARCH_HAS_CPUFREQ
- 	select WL12XX_PLATFORM_DATA
-+	select WIRELESS_EXT
- 
- config DAVINCI_UART1_AFE
- 	bool "Enable UART1 flow control"
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0005-Davinci-da850-Add-Mistral-WL12XX-config-support-to.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0005-Davinci-da850-Add-Mistral-WL12XX-config-support-to.patch
deleted file mode 100644
index 546887f..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0005-Davinci-da850-Add-Mistral-WL12XX-config-support-to.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From 332bbf93e2b5366cb5dae5eb413b8f212cd4fdac Mon Sep 17 00:00:00 2001
-From: Nisim Peled <nisimp at ti.com>
-Date: Mon, 23 May 2011 15:52:08 +0300
-Subject: [PATCH] Davinci da850 Add Mistral WL12XX config support to change ref clock
-
-Add config flag to support different clock rates needed by WL12XX modules.
-Different front-end modules has different clock rate.
-
-Signed-off-by: Nisim Peled <nisimp at ti.com>
----
- arch/arm/mach-davinci/Kconfig           |   24 +++++++++++++++++++++++-
- arch/arm/mach-davinci/board-da850-evm.c |    4 ++--
- 2 files changed, 25 insertions(+), 3 deletions(-)
-
-diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
-index 287bd51..ec68c5e 100644
---- a/arch/arm/mach-davinci/Kconfig
-+++ b/arch/arm/mach-davinci/Kconfig
-@@ -40,7 +40,6 @@ config ARCH_DAVINCI_DA850
- 	select CP_INTC
- 	select ARCH_DAVINCI_DA8XX
- 	select ARCH_HAS_CPUFREQ
--	select WL12XX_PLATFORM_DATA
- 	select WIRELESS_EXT
- 
- config DAVINCI_UART1_AFE
-@@ -310,6 +309,29 @@ config DAVINCI_MCBSP1
- 	depends on DAVINCI_MCBSP
- 	default n
- 
-+config DA850_MISTRAL_WL12XX
-+	bool "Enable Mistral daughter board support"
-+	depends on ARCH_DAVINCI_DA850
-+	help
-+	  Support for the Mistral daughter board.
-+	  This extension board which supports both WLAN and Bluetooth.
-+	  Specifically, for WL1271, more info can be found at
-+	  http://processors.wiki.ti.com/index.php/AM18x_%2B_WL1271
-+
-+config DA850_MISTRAL_WL12XX_REFCLOCK
-+	int "Ref clock value"
-+	range 0 5
-+	depends on DA850_MISTRAL_WL12XX
-+	default 2
-+	help
-+	  Set ref clock value for the Mistral WL12XX daughter board.
-+	  Select 0 for 19.2 MHz.
-+	  Select 1 for 26 MHz.
-+	  Select 2 for 38.4 MHz.
-+	  Select 3 for 52 MHz.
-+	  Select 4 for 38.4 MHz, XTAL.
-+	  Select 5 for 26 MHz, XTAL.
-+
- endmenu
- 
- endif
-diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
-index 7414331..3c5be76 100644
---- a/arch/arm/mach-davinci/board-da850-evm.c
-+++ b/arch/arm/mach-davinci/board-da850-evm.c
-@@ -1820,11 +1820,11 @@ static struct vpif_display_config da850_vpif_display_config = {
- #define HAS_LCD	0
- #endif
- 
--#ifdef CONFIG_WL12XX_PLATFORM_DATA
-+#ifdef CONFIG_DA850_MISTRAL_WL12XX
- 
- static struct wl12xx_platform_data da850_wl12xx_wlan_data __initdata = {
- 	.irq = -1,
--	.board_ref_clock = WL12XX_REFCLOCK_38,
-+	.board_ref_clock = CONFIG_DA850_MISTRAL_WL12XX_REFCLOCK,
- 	.platform_quirks = WL12XX_PLATFORM_QUIRK_EDGE_IRQ,
- };
- 
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0006-Add-wlan-and-BT-config-switches.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0006-Add-wlan-and-BT-config-switches.patch
deleted file mode 100644
index bfe5512..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0006-Add-wlan-and-BT-config-switches.patch
+++ /dev/null
@@ -1,210 +0,0 @@
-From bfda3fc5f88ab21395a18f8073ae38d867883917 Mon Sep 17 00:00:00 2001
-From: Nisim Peled <nisimp at ti.com>
-Date: Mon, 27 Jun 2011 18:46:18 +0300
-Subject: [PATCH] Add wlan and BT config switches.
-
-Signed-off-by: Nisim Peled <nisimp at ti.com>
----
- arch/arm/configs/da850_omapl138_defconfig |   75 +++++++++++++++++++++--------
- 1 files changed, 54 insertions(+), 21 deletions(-)
-
-diff --git a/arch/arm/configs/da850_omapl138_defconfig b/arch/arm/configs/da850_omapl138_defconfig
-index 646c477..3528214 100755
---- a/arch/arm/configs/da850_omapl138_defconfig
-+++ b/arch/arm/configs/da850_omapl138_defconfig
-@@ -255,7 +255,7 @@ CONFIG_CP_INTC=y
- # CONFIG_ARCH_DAVINCI_DM646x is not set
- # CONFIG_ARCH_DAVINCI_DA830 is not set
- CONFIG_ARCH_DAVINCI_DA850=y
--# CONFIG_DAVINCI_UART1_AFE is not set
-+CONFIG_DAVINCI_UART1_AFE=y
- CONFIG_ARCH_DAVINCI_DA8XX=y
- # CONFIG_ARCH_DAVINCI_DM365 is not set
- # CONFIG_ARCH_DAVINCI_TNETV107X is not set
-@@ -280,6 +280,8 @@ CONFIG_DAVINCI_RESET_CLOCKS=y
- CONFIG_DAVINCI_MCBSP=y
- # CONFIG_DAVINCI_MCBSP0 is not set
- CONFIG_DAVINCI_MCBSP1=y
-+CONFIG_DA850_MISTRAL_WL12XX=y
-+CONFIG_DA850_MISTRAL_WL12XX_REFCLOCK=2
- 
- #
- # Processor Type
-@@ -416,7 +418,7 @@ CONFIG_SUSPEND_NVS=y
- CONFIG_SUSPEND=y
- CONFIG_SUSPEND_FREEZER=y
- # CONFIG_APM_EMULATION is not set
--# CONFIG_PM_RUNTIME is not set
-+CONFIG_PM_RUNTIME=y
- CONFIG_PM_OPS=y
- CONFIG_ARCH_SUSPEND_POSSIBLE=y
- CONFIG_NET=y
-@@ -490,16 +492,23 @@ CONFIG_NETFILTER_ADVANCED=y
- #
- # CONFIG_NETFILTER_NETLINK_QUEUE is not set
- # CONFIG_NETFILTER_NETLINK_LOG is not set
--# CONFIG_NF_CONNTRACK is not set
--# CONFIG_NETFILTER_XTABLES is not set
-+CONFIG_NF_CONNTRACK=y
-+CONFIG_NF_CONNTRACK_IPV4=y
-+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-+CONFIG_NETFILTER_XTABLES=y
- # CONFIG_IP_VS is not set
- 
- #
- # IP: Netfilter Configuration
- #
--# CONFIG_NF_DEFRAG_IPV4 is not set
-+CONFIG_NF_DEFRAG_IPV4=y
- # CONFIG_IP_NF_QUEUE is not set
--# CONFIG_IP_NF_IPTABLES is not set
-+CONFIG_IP_NF_FILTER=y
-+CONFIG_IP_NF_TARGET_LOG=y
-+CONFIG_NF_NAT=y
-+CONFIG_NF_NAT_NEEDED=y
-+CONFIG_IP_NF_TARGET_MASQUERADE=y 
-+CONFIG_IP_NF_IPTABLES=y
- # CONFIG_IP_NF_ARPTABLES is not set
- 
- #
-@@ -537,9 +546,30 @@ CONFIG_NETFILTER_ADVANCED=y
- # CONFIG_HAMRADIO is not set
- # CONFIG_CAN is not set
- # CONFIG_IRDA is not set
--# CONFIG_BT is not set
-+CONFIG_BT=y
-+CONFIG_BT_L2CAP=y
-+CONFIG_BT_SCO=y
-+CONFIG_BT_RFCOMM=y
-+CONFIG_BT_RFCOMM_TTY=y
-+CONFIG_BT_BNEP=y
-+CONFIG_BT_BNEP_MC_FILTER=y
-+CONFIG_BT_BNEP_PROTO_FILTER=y
-+CONFIG_BT_HIDP=y
-+
-+#
-+# Bluetooth device drivers
-+#
-+CONFIG_BT_HCIUART=y
-+CONFIG_BT_HCIUART_H4=y
-+CONFIG_BT_HCIUART_LL=y
-+
- # CONFIG_AF_RXRPC is not set
- 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 is not set
- # CONFIG_LIB80211 is not set
- 
-@@ -551,7 +581,7 @@ CONFIG_WIRELESS=y
- # Some wireless drivers require a rate control algorithm
- #
- # CONFIG_WIMAX is not set
--# CONFIG_RFKILL is not set
-+CONFIG_RFKILL=y
- # CONFIG_NET_9P is not set
- # CONFIG_CAIF is not set
- # CONFIG_CEPH_LIB is not set
-@@ -567,7 +597,9 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
- # CONFIG_DEVTMPFS is not set
- CONFIG_STANDALONE=y
- CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
-+CONFIG_FW_LOADER=y
-+CONFIG_FIRMWARE_IN_KERNEL=y
-+CONFIG_EXTRA_FIRMWARE=""
- # CONFIG_SYS_HYPERVISOR is not set
- # CONFIG_CONNECTOR is not set
- CONFIG_MTD=y
-@@ -807,8 +839,9 @@ CONFIG_TI_DAVINCI_CPDMA=y
- # CONFIG_NETDEV_1000 is not set
- # CONFIG_NETDEV_10000 is not set
- CONFIG_WLAN=y
--# CONFIG_USB_ZD1201 is not set
- # CONFIG_HOSTAP is not set
-+# CONFIG_HOSTAP_FIRMWARE is not set
-+CONFIG_WL12XX_PLATFORM_DATA=y
- 
- #
- # Enable WiMAX (Networking options) to see the WiMAX drivers
-@@ -1421,7 +1454,7 @@ CONFIG_USB_OTG_UTILS=y
- CONFIG_NOP_USB_XCEIV=y
- CONFIG_MMC=y
- # CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
-+CONFIG_MMC_UNSAFE_RESUME=y
- 
- #
- # MMC/SD/SDIO Card Drivers
-@@ -1745,9 +1778,9 @@ CONFIG_HAVE_ARCH_KGDB=y
- #
- # Security options
- #
--# CONFIG_KEYS is not set
-+CONFIG_KEYS=y
- # CONFIG_SECURITY_DMESG_RESTRICT is not set
--# CONFIG_SECURITY is not set
-+CONFIG_SECURITY=y
- # CONFIG_SECURITYFS is not set
- CONFIG_DEFAULT_SECURITY_DAC=y
- CONFIG_DEFAULT_SECURITY=""
-@@ -1777,7 +1810,7 @@ CONFIG_CRYPTO=y
- # CONFIG_CRYPTO_CBC is not set
- # CONFIG_CRYPTO_CTR is not set
- # CONFIG_CRYPTO_CTS is not set
--# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_ECB=y
- # CONFIG_CRYPTO_LRW is not set
- # CONFIG_CRYPTO_PCBC is not set
- # CONFIG_CRYPTO_XTS is not set
-@@ -1792,11 +1825,11 @@ CONFIG_CRYPTO=y
- #
- # Digest
- #
--# CONFIG_CRYPTO_CRC32C is not set
-+CONFIG_CRYPTO_CRC32C=y
- # CONFIG_CRYPTO_GHASH is not set
- # CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+CONFIG_CRYPTO_MD5=y
-+CONFIG_CRYPTO_MICHAEL_MIC=y
- # CONFIG_CRYPTO_RMD128 is not set
- # CONFIG_CRYPTO_RMD160 is not set
- # CONFIG_CRYPTO_RMD256 is not set
-@@ -1810,9 +1843,9 @@ CONFIG_CRYPTO=y
- #
- # Ciphers
- #
--# CONFIG_CRYPTO_AES is not set
-+CONFIG_CRYPTO_AES=y
- # CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_ARC4 is not set
-+CONFIG_CRYPTO_ARC4=y
- # CONFIG_CRYPTO_BLOWFISH is not set
- # CONFIG_CRYPTO_CAMELLIA is not set
- # CONFIG_CRYPTO_CAST5 is not set
-@@ -1837,7 +1870,7 @@ CONFIG_CRYPTO=y
- # Random Number Generation
- #
- # CONFIG_CRYPTO_ANSI_CPRNG is not set
--# CONFIG_CRYPTO_HW is not set
-+CONFIG_CRYPTO_HW=y
- # CONFIG_BINARY_PRINTF is not set
- 
- #
-@@ -1850,7 +1883,7 @@ CONFIG_CRC_CCITT=m
- CONFIG_CRC_T10DIF=m
- # CONFIG_CRC_ITU_T is not set
- CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
-+CONFIG_CRC7=y
- # CONFIG_LIBCRC32C is not set
- CONFIG_ZLIB_INFLATE=y
- CONFIG_ZLIB_DEFLATE=y
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0007-mmc-davinci-Eliminate-spurious-interrupts.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0007-mmc-davinci-Eliminate-spurious-interrupts.patch
deleted file mode 100644
index 11de26f..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0007-mmc-davinci-Eliminate-spurious-interrupts.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 568c76b4c8483ca912eb55f2d69398d1a162aabf Mon Sep 17 00:00:00 2001
-From: Ido Yariv <ido at wizery.com>
-Date: Wed, 21 Dec 2011 02:13:17 +0200
-Subject: [PATCH] mmc: davinci: Eliminate spurious interrupts *EXPERIMENTAL*
-
-The davinci mmc interrupt handler fills the fifo in a loop, as long as
-the DXRDY or DRRDY bits are set in the status register.
-
-If interrupts fire during this loop, they will be handled by the
-handler, but the PIC will still buffer these. As a result, the handler
-will be called again to serve these needlessly. In order to avoid these
-spurious interrupts, keep interrupts masked during the loop.
----
- drivers/mmc/host/davinci_mmc.c |   35 +++++++++++++++++++++++++++++------
- 1 files changed, 29 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
-index 64a8325..8e3212e 100644
---- a/drivers/mmc/host/davinci_mmc.c
-+++ b/drivers/mmc/host/davinci_mmc.c
-@@ -1009,12 +1009,35 @@ static irqreturn_t mmc_davinci_irq(int irq, void *dev_id)
-	 * by read. So, it is not unbouned loop even in the case of
-	 * non-dma.
-	 */
--	while (host->bytes_left && (status & (MMCST0_DXRDY | MMCST0_DRRDY))) {
--		davinci_fifo_data_trans(host, rw_threshold);
--		status = readl(host->base + DAVINCI_MMCST0);
--		if (!status)
--			break;
--		qstatus |= status;
-+	if (host->bytes_left && (status & (MMCST0_DXRDY | MMCST0_DRRDY))) {
-+		unsigned long im_val;
-+
-+		/*
-+		 * If interrupts fire during the following loop, they will be
-+		 * handled by the handler, but the PIC will still buffer these.
-+		 * As a result, the handler will be called again to serve these
-+		 * needlessly. In order to avoid these spurious interrupts,
-+		 * keep interrupts masked during the loop.
-+		 */
-+		im_val = readl(host->base + DAVINCI_MMCIM);
-+		writel(0, host->base + DAVINCI_MMCIM);
-+
-+		do {
-+			davinci_fifo_data_trans(host, rw_threshold);
-+			status = readl(host->base + DAVINCI_MMCST0);
-+			if (!status)
-+				break;
-+			qstatus |= status;
-+		} while (host->bytes_left &&
-+			 (status & (MMCST0_DXRDY | MMCST0_DRRDY)));
-+
-+		/*
-+		 * Assumption: if an interrupt is already pending, it will fire
-+		 * when it is unmasked. This is also assumed when the MMCIM is
-+		 * first set. Otherwise, writing to MMCIM after reading the
-+		 * status is race-prone.
-+		 */
-+		writel(im_val, host->base + DAVINCI_MMCIM);
-	}
-
-	if (qstatus & MMCST0_DATDNE) {
---
-1.7.7.4
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0008-mmc-davinci-Poll-for-small-size-transfers.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0008-mmc-davinci-Poll-for-small-size-transfers.patch
deleted file mode 100644
index e358f9f..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/0008-mmc-davinci-Poll-for-small-size-transfers.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From 2323173abf87fa542d8434fa187dd67ed6048da2 Mon Sep 17 00:00:00 2001
-From: Ido Yariv <ido at wizery.com>
-Date: Sat, 24 Dec 2011 14:02:45 +0200
-Subject: [PATCH] mmc: davinci: Poll for small size transfers
-
-When initiating small size sdio transactions, it might be worth while to
-poll instead of waiting for an interrupt.
-
-While this optimization wastes CPU cycles, tests have shown that the
-interrupts handling and context switches' overhead is actually larger.
-
-Signed-off-by: Ido Yariv <ido at wizery.com>
----
- drivers/mmc/host/davinci_mmc.c |   25 ++++++++++++++++++++++---
- 1 files changed, 22 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
-index c5b540b..39be44a 100644
---- a/drivers/mmc/host/davinci_mmc.c
-+++ b/drivers/mmc/host/davinci_mmc.c
-@@ -152,6 +152,11 @@ module_param(rw_threshold, uint, S_IRUGO);
- MODULE_PARM_DESC(rw_threshold,
-		"Read/Write threshold. Default = 32");
-
-+static unsigned poll_threshold = 128;
-+module_param(poll_threshold, uint, S_IRUGO);
-+MODULE_PARM_DESC(poll_threshold,
-+		 "Polling transaction size threshold. Default = 128");
-+
- static unsigned __initdata use_dma = 1;
- module_param(use_dma, uint, 0);
- MODULE_PARM_DESC(use_dma, "Whether to use DMA or not. Default = 1");
-@@ -184,6 +189,7 @@ struct mmc_davinci_host {
-	u32 rxdma, txdma;
-	bool use_dma;
-	bool do_dma;
-+	bool active_request;
-
-	/* Scatterlist DMA uses one or more parameter RAM entries:
-	 * the main one (associated with rxdma or txdma) plus zero or
-@@ -212,6 +218,7 @@ struct mmc_davinci_host {
-	unsigned char		power_mode;
- };
-
-+static irqreturn_t mmc_davinci_irq(int irq, void *dev_id);
-
- /* PIO only */
- static void mmc_davinci_sg_to_buf(struct mmc_davinci_host *host)
-@@ -369,7 +376,16 @@ static void mmc_davinci_start_command(struct mmc_davinci_host *host,
-
-	writel(cmd->arg, host->base + DAVINCI_MMCARGHL);
-	writel(cmd_reg,  host->base + DAVINCI_MMCCMD);
--	writel(im_val, host->base + DAVINCI_MMCIM);
-+
-+	host->active_request = true;
-+	if (!host->do_dma && host->bytes_left <= poll_threshold) {
-+		while (host->active_request) {
-+			mmc_davinci_irq(0, host);
-+			cpu_relax();
-+		}
-+	} else {
-+		writel(im_val, host->base + DAVINCI_MMCIM);
-+	}
- }
-
- /*----------------------------------------------------------------------*/
-@@ -684,8 +700,9 @@ mmc_davinci_prepare_data(struct mmc_davinci_host *host, struct mmc_request *req)
-	 * While we *could* change that, unusual block sizes are rarely
-	 * used.  The occasional fallback to PIO should't hurt.
-	 */
--	if (host->use_dma && (host->bytes_left & (rw_threshold - 1)) == 0
--			&& mmc_davinci_start_dma_transfer(host, data) == 0) {
-+	if (host->use_dma && (host->bytes_left & (rw_threshold - 1)) == 0 &&
-+	    host->bytes_left > poll_threshold &&
-+	    mmc_davinci_start_dma_transfer(host, data) == 0) {
-		/* zero this to ensure we take no PIO paths */
-		host->bytes_left = 0;
-	} else {
-@@ -898,6 +915,7 @@ mmc_davinci_xfer_done(struct mmc_davinci_host *host, struct mmc_data *data)
-	if (!data->stop || (host->cmd && host->cmd->error)) {
-		mmc_request_done(host->mmc, data->mrq);
-		writel(0, host->base + DAVINCI_MMCIM);
-+		host->active_request = false;
-	} else
-		mmc_davinci_start_command(host, data->stop);
- }
-@@ -925,6 +943,7 @@ static void mmc_davinci_cmd_done(struct mmc_davinci_host *host,
-			cmd->mrq->cmd->retries = 0;
-		mmc_request_done(host->mmc, cmd->mrq);
-		writel(0, host->base + DAVINCI_MMCIM);
-+		host->active_request = false;
-	}
- }
-
---
-1.7.7.4
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/configs/static b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/configs/static
deleted file mode 100644
index c792ee3..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/configs/static
+++ /dev/null
@@ -1,1891 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Thu Apr  7 20:15:42 2011
-#
-CONFIG_ARM=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_ZONE_DMA=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-CONFIG_HAVE_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=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# 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=14
-# CONFIG_CGROUPS is not set
-# CONFIG_NAMESPACES is not set
-# 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 is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# 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 is not set
-# CONFIG_PERF_COUNTERS is not set
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLUB_DEBUG=y
-CONFIG_COMPAT_BRK=y
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-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
-
-#
-# 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 is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-# 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=y
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_PLAT_SPEAR is not set
-CONFIG_CP_INTC=y
-
-#
-# TI DaVinci Implementations
-#
-
-#
-# DaVinci Core Type
-#
-# CONFIG_ARCH_DAVINCI_DM644x is not set
-# CONFIG_ARCH_DAVINCI_DM355 is not set
-# CONFIG_ARCH_DAVINCI_DM646x is not set
-# CONFIG_ARCH_DAVINCI_DA830 is not set
-CONFIG_ARCH_DAVINCI_DA850=y
-CONFIG_DAVINCI_UART1_AFE=y
-CONFIG_ARCH_DAVINCI_DA8XX=y
-# CONFIG_ARCH_DAVINCI_DM365 is not set
-# CONFIG_ARCH_DAVINCI_TNETV107X is not set
-
-#
-# DaVinci Board Type
-#
-CONFIG_MACH_DAVINCI_DA850_EVM=y
-CONFIG_DA850_UI_NONE=y
-# CONFIG_DA850_UI_RMII is not set
-# CONFIG_DA850_UI_CLCD is not set
-# CONFIG_DA850_UI_SD_VIDEO_PORT is not set
-# CONFIG_DA850_UI_CAMERA is not set
-CONFIG_GPIO_PCA953X=y
-CONFIG_KEYBOARD_GPIO_POLLED=y
-# CONFIG_MACH_MITYOMAPL138 is not set
-# CONFIG_MACH_OMAPL138_HAWKBOARD is not set
-CONFIG_DAVINCI_MUX=y
-# CONFIG_DAVINCI_MUX_DEBUG is not set
-# CONFIG_DAVINCI_MUX_WARNINGS is not set
-CONFIG_DAVINCI_RESET_CLOCKS=y
-CONFIG_DAVINCI_MCBSP=y
-# CONFIG_DAVINCI_MCBSP0 is not set
-CONFIG_DAVINCI_MCBSP1=y
-CONFIG_DA850_MISTRAL_WL12XX=y
-CONFIG_DA850_MISTRAL_WL12XX_REFCLOCK=2
-
-#
-# Processor Type
-#
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-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=100
-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=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-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_LEDS_CPU is not set
-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=""
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-# CONFIG_AUTO_ZRELADDR is not set
-
-#
-# CPU Power Management
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# 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 is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-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_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_NET_KEY 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-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 is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-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 is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_SIT_6RD is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-CONFIG_NF_CONNTRACK=y
-CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-CONFIG_NETFILTER_XTABLES=y
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV4=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_LOG=y
-CONFIG_NF_NAT=y
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y 
-CONFIG_IP_NF_IPTABLES=y
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV6 is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_L2TP is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# 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 is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=y
-CONFIG_BT_L2CAP=y
-CONFIG_BT_SCO=y
-CONFIG_BT_RFCOMM=y
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=y
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=y
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=y
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_LL=y
-
-# CONFIG_AF_RXRPC is not set
-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 is not set
-# CONFIG_LIB80211 is not set
-
-#
-# CFG80211 needs to be enabled for MAC80211
-#
-
-#
-# Some wireless drivers require a rate control algorithm
-#
-# CONFIG_WIMAX is not set
-CONFIG_RFKILL=y
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# 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 is not set
-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 is not set
-# 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=y
-CONFIG_M25PXX_USE_FAST_READ=y
-# 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 is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# 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=1
-CONFIG_BLK_DEV_RAM_SIZE=32768
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD 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 is not set
-# CONFIG_SENSORS_BH1770 is not set
-# CONFIG_SENSORS_APDS990X is not set
-# CONFIG_HMC6352 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_BMP085 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-CONFIG_EEPROM_AT24=y
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-
-#
-# Texas Instruments shared transport line discipline
-#
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-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 is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# 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 is not set
-# 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 is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# 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=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-CONFIG_SATA_AHCI_PLATFORM=y
-# CONFIG_ATA_SFF is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-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=y
-# CONFIG_CICADA_PHY is not set
-# CONFIG_VITESSE_PHY is not set
-CONFIG_SMSC_PHY=y
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_BCM63XX_PHY is not set
-# 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=y
-# CONFIG_MICREL_PHY is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-CONFIG_TI_DAVINCI_EMAC=y
-CONFIG_TI_DAVINCI_MDIO=y
-CONFIG_TI_DAVINCI_CPDMA=y
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_ETHOC is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMSC911X 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 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_WLAN=y
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_FIRMWARE is not set
-CONFIG_WL12XX_PLATFORM_DATA=y
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_WAN is not set
-
-#
-# CAIF transport drivers
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-CONFIG_NETCONSOLE=y
-# CONFIG_NETCONSOLE_DYNAMIC is not set
-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 is not set
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# 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=m
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
-# CONFIG_KEYBOARD_TCA6416 is not set
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# 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_XTKBD=m
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_TSC2004 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_TOUCHSCREEN_TPS6507X=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# 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 is not set
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_N_GSM is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=3
-CONFIG_SERIAL_8250_RUNTIME_UARTS=3
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# 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_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=y
-CONFIG_LEGACY_PTY_COUNT=8
-# CONFIG_TTY_PRINTK is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# 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 is not set
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_ALGOBIT=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-CONFIG_I2C_DAVINCI=y
-# CONFIG_I2C_DESIGNWARE is not set
-CONFIG_I2C_GPIO=y
-# CONFIG_I2C_OCORES is not set
-# 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_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_DAVINCI=y
-# CONFIG_SPI_GPIO is not set
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# 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 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X_IRQ is not set
-CONFIG_GPIO_PCF857X=y
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_ADP5588 is not set
-
-#
-# 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_GENERIC_PWM is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_DAVINCI_WATCHDOG=y
-# CONFIG_MAX63XX_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB 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=y
-# CONFIG_TWL4030_CORE is not set
-# 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 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-CONFIG_REGULATOR_DUMMY=y
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# 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_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_TPS65023 is not set
-CONFIG_REGULATOR_TPS6507X=y
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_TPS6524X is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# 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 is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# 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_DA8XX=y
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-# CONFIG_SOUND_OSS_CORE is not set
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_JACK=y
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-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 is not set
-# 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 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=y
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_DAVINCI_SOC=y
-CONFIG_SND_DAVINCI_SOC_MCASP=y
-CONFIG_SND_DA850_SOC_EVM=y
-CONFIG_SND_SOC_I2C_AND_SPI=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC3X=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 is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_THRUSTMASTER 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 is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_MON is not set
-# 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_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=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# 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
-
-#
-# Platform Glue Layer
-#
-CONFIG_USB_MUSB_DA8XX_GLUE=y
-# CONFIG_USB_MUSB_DAVINCI is not set
-CONFIG_USB_MUSB_DA8XX=y
-# CONFIG_USB_MUSB_TUSB6010 is not set
-# CONFIG_USB_MUSB_OMAP2PLUS is not set
-# CONFIG_USB_MUSB_AM35X is not set
-# CONFIG_USB_MUSB_BLACKFIN is not set
-# CONFIG_USB_MUSB_UX500 is not set
-CONFIG_USB_MUSB_HOST=y
-CONFIG_USB_MUSB_HDRC_HCD=y
-# CONFIG_MUSB_PIO_ONLY is not set
-# CONFIG_USB_INVENTRA_DMA_HW is not set
-# CONFIG_USB_TI_CPPI_DMA_HW is not set
-CONFIG_USB_TI_CPPI41_DMA_HW=y
-# CONFIG_USB_INVENTRA_DMA is not set
-# CONFIG_USB_TI_CPPI_DMA is not set
-CONFIG_USB_TI_CPPI41_DMA=y
-# CONFIG_USB_TUSB_OMAP_DMA is not set
-CONFIG_USB_MUSB_DEBUG=y
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_TMC is not set
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_YUREX is not set
-# CONFIG_USB_GADGET is not set
-
-#
-# OTG and related infrastructure
-#
-CONFIG_USB_OTG_UTILS=y
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_ULPI is not set
-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 is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_SDHCI is not set
-CONFIG_MMC_DAVINCI=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# 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 is not set
-# 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 is not set
-# 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_RTC_DRV_OMAP=y
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_UIO is not set
-# CONFIG_STAGING 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=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS 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 is not set
-# CONFIG_QUOTA is not set
-# CONFIG_QUOTACTL is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-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 is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-CONFIG_MINIX_FS=m
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS 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 is not set
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=m
-CONFIG_NFSD_DEPRECATED=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_CEPH_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS 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 is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# 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 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_MAGIC_SYSRQ is not set
-# 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 is not set
-# CONFIG_HARDLOCKUP_DETECTOR is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_BKL=y
-# CONFIG_SPARSE_RCU_POINTER is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LKDTM is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-CONFIG_KEYS=y
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
-CONFIG_SECURITY=y
-# CONFIG_SECURITYFS is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=y
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_ARC4=y
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYPTO_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC_T10DIF=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-CONFIG_CRC7=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_NLATTR=y
-CONFIG_GENERIC_ATOMIC64=y
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/defconfig b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/defconfig
deleted file mode 100644
index e1d6477..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/am180x-evm/defconfig
+++ /dev/null
@@ -1,2020 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Wed Mar 14 15:15:30 2012
-#
-CONFIG_ARM=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_ZONE_DMA=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-CONFIG_HAVE_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=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# 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=14
-# CONFIG_CGROUPS is not set
-# CONFIG_NAMESPACES is not set
-# 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 is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# 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 is not set
-# CONFIG_PERF_COUNTERS is not set
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLUB_DEBUG=y
-CONFIG_COMPAT_BRK=y
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# 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
-
-#
-# 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 is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-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 is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-# 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=y
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_PLAT_SPEAR is not set
-CONFIG_CP_INTC=y
-
-#
-# TI DaVinci Implementations
-#
-
-#
-# DaVinci Core Type
-#
-# CONFIG_ARCH_DAVINCI_DM644x is not set
-# CONFIG_ARCH_DAVINCI_DM355 is not set
-# CONFIG_ARCH_DAVINCI_DM646x is not set
-# CONFIG_ARCH_DAVINCI_DA830 is not set
-CONFIG_ARCH_DAVINCI_DA850=y
-CONFIG_DAVINCI_UART1_AFE=y
-CONFIG_ARCH_DAVINCI_DA8XX=y
-# CONFIG_ARCH_DAVINCI_DM365 is not set
-# CONFIG_ARCH_DAVINCI_TNETV107X is not set
-
-#
-# DaVinci Board Type
-#
-CONFIG_MACH_DAVINCI_DA850_EVM=y
-CONFIG_DA850_UI_NONE=y
-# CONFIG_DA850_UI_RMII is not set
-# CONFIG_DA850_UI_CLCD is not set
-# CONFIG_DA850_UI_SD_VIDEO_PORT is not set
-# CONFIG_DA850_UI_CAMERA is not set
-CONFIG_GPIO_PCA953X=y
-CONFIG_KEYBOARD_GPIO_POLLED=y
-# CONFIG_MACH_MITYOMAPL138 is not set
-# CONFIG_MACH_OMAPL138_HAWKBOARD is not set
-CONFIG_DAVINCI_MUX=y
-# CONFIG_DAVINCI_MUX_DEBUG is not set
-# CONFIG_DAVINCI_MUX_WARNINGS is not set
-CONFIG_DAVINCI_RESET_CLOCKS=y
-CONFIG_DAVINCI_MCBSP=y
-# CONFIG_DAVINCI_MCBSP0 is not set
-CONFIG_DAVINCI_MCBSP1=y
-CONFIG_DA850_MISTRAL_WL12XX=y
-CONFIG_DA850_MISTRAL_WL12XX_REFCLOCK=2
-
-#
-# Processor Type
-#
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-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=100
-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=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-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_LEDS_CPU is not set
-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 is not set
-# CONFIG_AUTO_ZRELADDR is not set
-
-#
-# CPU Power Management
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# 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 is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-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_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_NET_KEY 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-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 is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-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 is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_SIT_6RD is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_NETLABEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-CONFIG_NF_CONNTRACK=y
-# CONFIG_NF_CONNTRACK_MARK is not set
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CT_PROTO_DCCP is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_NETLINK is not set
-CONFIG_NETFILTER_XTABLES=y
-
-#
-# Xtables combined modules
-#
-# CONFIG_NETFILTER_XT_MARK is not set
-# CONFIG_NETFILTER_XT_CONNMARK is not set
-
-#
-# Xtables targets
-#
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TEE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-
-#
-# Xtables matches
-#
-# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_CPU is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_HL is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_DEFRAG_IPV4=y
-CONFIG_NF_CONNTRACK_IPV4=y
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-CONFIG_IP_NF_FILTER=y
-# CONFIG_IP_NF_TARGET_REJECT is not set
-CONFIG_IP_NF_TARGET_LOG=y
-# CONFIG_IP_NF_TARGET_ULOG is not set
-CONFIG_NF_NAT=y
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_SECURITY is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV6 is not set
-# CONFIG_NF_CONNTRACK_IPV6 is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_L2TP is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# 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 is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-# CONFIG_DNS_RESOLVER is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-CONFIG_WIRELESS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT_SYSFS=y
-# CONFIG_LIB80211 is not set
-
-#
-# CFG80211 needs to be enabled for MAC80211
-#
-
-#
-# Some wireless drivers require a rate control algorithm
-#
-# CONFIG_WIMAX is not set
-CONFIG_RFKILL=y
-# CONFIG_RFKILL_INPUT is not set
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB 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_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 is not set
-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 is not set
-# 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=y
-CONFIG_M25PXX_USE_FAST_READ=y
-# 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 is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# 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=1
-CONFIG_BLK_DEV_RAM_SIZE=32768
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD 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 is not set
-# CONFIG_SENSORS_BH1770 is not set
-# CONFIG_SENSORS_APDS990X is not set
-# CONFIG_HMC6352 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_BMP085 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-CONFIG_EEPROM_AT24=y
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-
-#
-# Texas Instruments shared transport line discipline
-#
-# CONFIG_TI_ST is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-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 is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# 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 is not set
-# 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 is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# 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=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-CONFIG_SATA_AHCI_PLATFORM=y
-# CONFIG_ATA_SFF is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-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=y
-# CONFIG_CICADA_PHY is not set
-# CONFIG_VITESSE_PHY is not set
-CONFIG_SMSC_PHY=y
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_BCM63XX_PHY is not set
-# 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=y
-# CONFIG_MICREL_PHY is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-CONFIG_TI_DAVINCI_EMAC=y
-CONFIG_TI_DAVINCI_MDIO=y
-CONFIG_TI_DAVINCI_CPDMA=y
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_ETHOC is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMSC911X 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 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_WLAN=y
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_WL12XX_PLATFORM_DATA=y
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_HSO is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_WAN is not set
-
-#
-# CAIF transport drivers
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-CONFIG_NETCONSOLE=y
-# CONFIG_NETCONSOLE_DYNAMIC is not set
-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 is not set
-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=m
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
-# CONFIG_KEYBOARD_TCA6416 is not set
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# 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_XTKBD=m
-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=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_TSC2004 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_TOUCHSCREEN_TPS6507X=y
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_AD714X is not set
-# 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_UINPUT=y
-# CONFIG_INPUT_PCF8574 is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT_ADXL34X is not set
-
-#
-# 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 is not set
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_N_GSM is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=3
-CONFIG_SERIAL_8250_RUNTIME_UARTS=3
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# 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_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=y
-CONFIG_LEGACY_PTY_COUNT=8
-# CONFIG_TTY_PRINTK is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# 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 is not set
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_ALGOBIT=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-CONFIG_I2C_DAVINCI=y
-# CONFIG_I2C_DESIGNWARE is not set
-CONFIG_I2C_GPIO=y
-# CONFIG_I2C_OCORES is not set
-# 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_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_DAVINCI=y
-# CONFIG_SPI_GPIO is not set
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# 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 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X_IRQ is not set
-CONFIG_GPIO_PCF857X=y
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_ADP5588 is not set
-
-#
-# 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_GENERIC_PWM is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_DAVINCI_WATCHDOG=y
-# CONFIG_MAX63XX_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB 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=y
-# CONFIG_TWL4030_CORE is not set
-# 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 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-CONFIG_REGULATOR_DUMMY=y
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# 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_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_TPS65023 is not set
-CONFIG_REGULATOR_TPS6507X=y
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_TPS6524X is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# 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 is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# 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_DA8XX=y
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_LOGO is not set
-CONFIG_SOUND=y
-# CONFIG_SOUND_OSS_CORE is not set
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_JACK=y
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-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 is not set
-# 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 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=y
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-CONFIG_SND_USB_AUDIO=y
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_DAVINCI_SOC=y
-CONFIG_SND_DAVINCI_SOC_MCASP=y
-CONFIG_SND_DA850_SOC_EVM=y
-CONFIG_SND_SOC_I2C_AND_SPI=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC3X=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 is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_THRUSTMASTER 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 is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_MON is not set
-# 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_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=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# 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
-
-#
-# Platform Glue Layer
-#
-CONFIG_USB_MUSB_DA8XX_GLUE=y
-# CONFIG_USB_MUSB_DAVINCI is not set
-CONFIG_USB_MUSB_DA8XX=y
-# CONFIG_USB_MUSB_TUSB6010 is not set
-# CONFIG_USB_MUSB_OMAP2PLUS is not set
-# CONFIG_USB_MUSB_AM35X is not set
-# CONFIG_USB_MUSB_BLACKFIN is not set
-# CONFIG_USB_MUSB_UX500 is not set
-CONFIG_USB_MUSB_HOST=y
-CONFIG_USB_MUSB_HDRC_HCD=y
-CONFIG_MUSB_PIO_ONLY=y
-# CONFIG_USB_INVENTRA_DMA is not set
-# CONFIG_USB_TI_CPPI_DMA is not set
-# CONFIG_USB_TI_CPPI41_DMA is not set
-# CONFIG_USB_TUSB_OMAP_DMA is not set
-CONFIG_USB_MUSB_DEBUG=y
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_TMC is not set
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_YUREX is not set
-# CONFIG_USB_GADGET is not set
-
-#
-# OTG and related infrastructure
-#
-CONFIG_USB_OTG_UTILS=y
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_ULPI is not set
-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 is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_SDHCI is not set
-CONFIG_MMC_DAVINCI=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# 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 is not set
-# 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 is not set
-# 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_RTC_DRV_OMAP=y
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-CONFIG_UIO=y
-# CONFIG_UIO_PDRV is not set
-# CONFIG_UIO_PDRV_GENIRQ is not set
-CONFIG_UIO_PRUSS=m
-# CONFIG_STAGING 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=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS 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 is not set
-# CONFIG_QUOTA is not set
-# CONFIG_QUOTACTL is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_ECRYPT_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-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 is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-CONFIG_MINIX_FS=m
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS 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 is not set
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=m
-CONFIG_NFSD_DEPRECATED=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_CEPH_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS 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 is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# 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 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_MAGIC_SYSRQ is not set
-# 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 is not set
-# CONFIG_HARDLOCKUP_DETECTOR is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_BKL=y
-# CONFIG_SPARSE_RCU_POINTER is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LKDTM is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK 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 is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER 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=y
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_NETWORK is not set
-# CONFIG_SECURITY_PATH is not set
-# CONFIG_SECURITY_TOMOYO is not set
-# CONFIG_SECURITY_APPARMOR is not set
-# CONFIG_IMA is not set
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_BLKCIPHER2=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_HASH2=y
-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 is not set
-# CONFIG_CRYPTO_NULL is not set
-CONFIG_CRYPTO_WORKQUEUE=y
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=y
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_ARC4=y
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYPTO_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=y
-CONFIG_CRC_T10DIF=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-CONFIG_CRC7=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_NLATTR=y
-CONFIG_GENERIC_ATOMIC64=y
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/configs/static b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/configs/static
deleted file mode 100644
index 73af1fc..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/configs/static
+++ /dev/null
@@ -1,1858 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Thu Apr  7 20:15:42 2011
-#
-CONFIG_ARM=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_ZONE_DMA=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-CONFIG_HAVE_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=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# 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=14
-# CONFIG_CGROUPS is not set
-# CONFIG_NAMESPACES is not set
-# 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 is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# 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 is not set
-# CONFIG_PERF_COUNTERS is not set
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLUB_DEBUG=y
-CONFIG_COMPAT_BRK=y
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-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
-
-#
-# 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 is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-# 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=y
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_PLAT_SPEAR is not set
-CONFIG_CP_INTC=y
-
-#
-# TI DaVinci Implementations
-#
-
-#
-# DaVinci Core Type
-#
-# CONFIG_ARCH_DAVINCI_DM644x is not set
-# CONFIG_ARCH_DAVINCI_DM355 is not set
-# CONFIG_ARCH_DAVINCI_DM646x is not set
-# CONFIG_ARCH_DAVINCI_DA830 is not set
-CONFIG_ARCH_DAVINCI_DA850=y
-# CONFIG_DAVINCI_UART1_AFE is not set
-CONFIG_ARCH_DAVINCI_DA8XX=y
-# CONFIG_ARCH_DAVINCI_DM365 is not set
-# CONFIG_ARCH_DAVINCI_TNETV107X is not set
-
-#
-# DaVinci Board Type
-#
-CONFIG_MACH_DAVINCI_DA850_EVM=y
-CONFIG_DA850_UI_NONE=y
-# CONFIG_DA850_UI_RMII is not set
-# CONFIG_DA850_UI_CLCD is not set
-# CONFIG_DA850_UI_SD_VIDEO_PORT is not set
-# CONFIG_DA850_UI_CAMERA is not set
-CONFIG_GPIO_PCA953X=y
-CONFIG_KEYBOARD_GPIO_POLLED=y
-# CONFIG_MACH_MITYOMAPL138 is not set
-# CONFIG_MACH_OMAPL138_HAWKBOARD is not set
-CONFIG_DAVINCI_MUX=y
-# CONFIG_DAVINCI_MUX_DEBUG is not set
-# CONFIG_DAVINCI_MUX_WARNINGS is not set
-CONFIG_DAVINCI_RESET_CLOCKS=y
-CONFIG_DAVINCI_MCBSP=y
-# CONFIG_DAVINCI_MCBSP0 is not set
-CONFIG_DAVINCI_MCBSP1=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-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=100
-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=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-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_LEDS_CPU is not set
-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=""
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-# CONFIG_AUTO_ZRELADDR is not set
-
-#
-# CPU Power Management
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# 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 is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_NVS=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-# CONFIG_APM_EMULATION is not set
-# CONFIG_PM_RUNTIME is not set
-CONFIG_PM_OPS=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_NET_KEY 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-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 is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-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 is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_SIT_6RD is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV4 is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV6 is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_L2TP is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# 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 is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-CONFIG_WIRELESS=y
-# CONFIG_CFG80211 is not set
-# CONFIG_LIB80211 is not set
-
-#
-# CFG80211 needs to be enabled for MAC80211
-#
-
-#
-# Some wireless drivers require a rate control algorithm
-#
-# CONFIG_WIMAX is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER 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 is not set
-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 is not set
-# 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=y
-CONFIG_M25PXX_USE_FAST_READ=y
-# 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 is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# 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=1
-CONFIG_BLK_DEV_RAM_SIZE=32768
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD 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 is not set
-# CONFIG_SENSORS_BH1770 is not set
-# CONFIG_SENSORS_APDS990X is not set
-# CONFIG_HMC6352 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_BMP085 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-CONFIG_EEPROM_AT24=y
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-
-#
-# Texas Instruments shared transport line discipline
-#
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-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 is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# 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 is not set
-# 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 is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# 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=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-CONFIG_SATA_AHCI_PLATFORM=y
-# CONFIG_ATA_SFF is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-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=y
-# CONFIG_CICADA_PHY is not set
-# CONFIG_VITESSE_PHY is not set
-CONFIG_SMSC_PHY=y
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_BCM63XX_PHY is not set
-# 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=y
-# CONFIG_MICREL_PHY is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-CONFIG_TI_DAVINCI_EMAC=y
-CONFIG_TI_DAVINCI_MDIO=y
-CONFIG_TI_DAVINCI_CPDMA=y
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_ETHOC is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMSC911X 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 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_WLAN=y
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_HOSTAP is not set
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_WAN is not set
-
-#
-# CAIF transport drivers
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-CONFIG_NETCONSOLE=y
-# CONFIG_NETCONSOLE_DYNAMIC is not set
-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 is not set
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# 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=m
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
-# CONFIG_KEYBOARD_TCA6416 is not set
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# 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_XTKBD=m
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_TSC2004 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_TOUCHSCREEN_TPS6507X=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# 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 is not set
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_N_GSM is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=3
-CONFIG_SERIAL_8250_RUNTIME_UARTS=3
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# 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_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=y
-CONFIG_LEGACY_PTY_COUNT=8
-# CONFIG_TTY_PRINTK is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# 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 is not set
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_ALGOBIT=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-CONFIG_I2C_DAVINCI=y
-# CONFIG_I2C_DESIGNWARE is not set
-CONFIG_I2C_GPIO=y
-# CONFIG_I2C_OCORES is not set
-# 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_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_DAVINCI=y
-# CONFIG_SPI_GPIO is not set
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# 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 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X_IRQ is not set
-CONFIG_GPIO_PCF857X=y
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_ADP5588 is not set
-
-#
-# 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_GENERIC_PWM is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_DAVINCI_WATCHDOG=y
-# CONFIG_MAX63XX_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB 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=y
-# CONFIG_TWL4030_CORE is not set
-# 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 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-CONFIG_REGULATOR_DUMMY=y
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# 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_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_TPS65023 is not set
-CONFIG_REGULATOR_TPS6507X=y
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_TPS6524X is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# 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 is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# 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_DA8XX=y
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-# CONFIG_SOUND_OSS_CORE is not set
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_JACK=y
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-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 is not set
-# 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 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=y
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_DAVINCI_SOC=y
-CONFIG_SND_DAVINCI_SOC_MCASP=y
-CONFIG_SND_DA850_SOC_EVM=y
-CONFIG_SND_SOC_I2C_AND_SPI=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC3X=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 is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_THRUSTMASTER 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 is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_MON is not set
-# 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_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=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# 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
-
-#
-# Platform Glue Layer
-#
-CONFIG_USB_MUSB_DA8XX_GLUE=y
-# CONFIG_USB_MUSB_DAVINCI is not set
-CONFIG_USB_MUSB_DA8XX=y
-# CONFIG_USB_MUSB_TUSB6010 is not set
-# CONFIG_USB_MUSB_OMAP2PLUS is not set
-# CONFIG_USB_MUSB_AM35X is not set
-# CONFIG_USB_MUSB_BLACKFIN is not set
-# CONFIG_USB_MUSB_UX500 is not set
-CONFIG_USB_MUSB_HOST=y
-CONFIG_USB_MUSB_HDRC_HCD=y
-# CONFIG_MUSB_PIO_ONLY is not set
-# CONFIG_USB_INVENTRA_DMA_HW is not set
-# CONFIG_USB_TI_CPPI_DMA_HW is not set
-CONFIG_USB_TI_CPPI41_DMA_HW=y
-# CONFIG_USB_INVENTRA_DMA is not set
-# CONFIG_USB_TI_CPPI_DMA is not set
-CONFIG_USB_TI_CPPI41_DMA=y
-# CONFIG_USB_TUSB_OMAP_DMA is not set
-CONFIG_USB_MUSB_DEBUG=y
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_TMC is not set
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_YUREX is not set
-# CONFIG_USB_GADGET is not set
-
-#
-# OTG and related infrastructure
-#
-CONFIG_USB_OTG_UTILS=y
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_ULPI is not set
-CONFIG_NOP_USB_XCEIV=y
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_MINORS=8
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_SDHCI is not set
-CONFIG_MMC_DAVINCI=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# 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 is not set
-# 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 is not set
-# 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_RTC_DRV_OMAP=y
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_UIO is not set
-# CONFIG_STAGING 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=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS 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 is not set
-# CONFIG_QUOTA is not set
-# CONFIG_QUOTACTL is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-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 is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-CONFIG_MINIX_FS=m
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS 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 is not set
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=m
-CONFIG_NFSD_DEPRECATED=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_CEPH_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS 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 is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# 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 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_MAGIC_SYSRQ is not set
-# 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 is not set
-# CONFIG_HARDLOCKUP_DETECTOR is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_BKL=y
-# CONFIG_SPARSE_RCU_POINTER is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LKDTM is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-# CONFIG_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_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYPTO_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC_T10DIF=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_NLATTR=y
-CONFIG_GENERIC_ATOMIC64=y
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/defconfig b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/defconfig
deleted file mode 100644
index 73af1fc..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/tipspkernel/am180x-evm/defconfig
+++ /dev/null
@@ -1,1858 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux/arm 2.6.37 Kernel Configuration
-# Thu Apr  7 20:15:42 2011
-#
-CONFIG_ARM=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_ZONE_DMA=y
-CONFIG_NEED_DMA_MAP_STATE=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-CONFIG_CONSTRUCTORS=y
-CONFIG_HAVE_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=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# 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=14
-# CONFIG_CGROUPS is not set
-# CONFIG_NAMESPACES is not set
-# 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 is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_ANON_INODES=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# 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 is not set
-# CONFIG_PERF_COUNTERS is not set
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLUB_DEBUG=y
-CONFIG_COMPAT_BRK=y
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-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
-
-#
-# 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 is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_BLOCK=y
-CONFIG_LBDAF=y
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_INTEGRITY is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-# 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=y
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_PLAT_SPEAR is not set
-CONFIG_CP_INTC=y
-
-#
-# TI DaVinci Implementations
-#
-
-#
-# DaVinci Core Type
-#
-# CONFIG_ARCH_DAVINCI_DM644x is not set
-# CONFIG_ARCH_DAVINCI_DM355 is not set
-# CONFIG_ARCH_DAVINCI_DM646x is not set
-# CONFIG_ARCH_DAVINCI_DA830 is not set
-CONFIG_ARCH_DAVINCI_DA850=y
-# CONFIG_DAVINCI_UART1_AFE is not set
-CONFIG_ARCH_DAVINCI_DA8XX=y
-# CONFIG_ARCH_DAVINCI_DM365 is not set
-# CONFIG_ARCH_DAVINCI_TNETV107X is not set
-
-#
-# DaVinci Board Type
-#
-CONFIG_MACH_DAVINCI_DA850_EVM=y
-CONFIG_DA850_UI_NONE=y
-# CONFIG_DA850_UI_RMII is not set
-# CONFIG_DA850_UI_CLCD is not set
-# CONFIG_DA850_UI_SD_VIDEO_PORT is not set
-# CONFIG_DA850_UI_CAMERA is not set
-CONFIG_GPIO_PCA953X=y
-CONFIG_KEYBOARD_GPIO_POLLED=y
-# CONFIG_MACH_MITYOMAPL138 is not set
-# CONFIG_MACH_OMAPL138_HAWKBOARD is not set
-CONFIG_DAVINCI_MUX=y
-# CONFIG_DAVINCI_MUX_DEBUG is not set
-# CONFIG_DAVINCI_MUX_WARNINGS is not set
-CONFIG_DAVINCI_RESET_CLOCKS=y
-CONFIG_DAVINCI_MCBSP=y
-# CONFIG_DAVINCI_MCBSP0 is not set
-CONFIG_DAVINCI_MCBSP1=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_PABRT_LEGACY=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-CONFIG_ARM_L1_CACHE_SHIFT=5
-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=100
-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=999999
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-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_LEDS_CPU is not set
-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=""
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-# CONFIG_AUTO_ZRELADDR is not set
-
-#
-# CPU Power Management
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# 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 is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_HAVE_AOUT=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_NVS=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-# CONFIG_APM_EMULATION is not set
-# CONFIG_PM_RUNTIME is not set
-CONFIG_PM_OPS=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_NET_KEY 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-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 is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-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 is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_SIT_6RD is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_IP_VS is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV4 is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_NF_DEFRAG_IPV6 is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_RDS is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_L2TP is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# 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 is not set
-# CONFIG_PHONET is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_NET_SCHED is not set
-# CONFIG_DCB is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-CONFIG_WIRELESS=y
-# CONFIG_CFG80211 is not set
-# CONFIG_LIB80211 is not set
-
-#
-# CFG80211 needs to be enabled for MAC80211
-#
-
-#
-# Some wireless drivers require a rate control algorithm
-#
-# CONFIG_WIMAX is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-# CONFIG_CAIF is not set
-# CONFIG_CEPH_LIB is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_DEVTMPFS is not set
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER 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 is not set
-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 is not set
-# 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=y
-CONFIG_M25PXX_USE_FAST_READ=y
-# 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 is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-
-#
-# 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=1
-CONFIG_BLK_DEV_RAM_SIZE=32768
-# CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD 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 is not set
-# CONFIG_SENSORS_BH1770 is not set
-# CONFIG_SENSORS_APDS990X is not set
-# CONFIG_HMC6352 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_BMP085 is not set
-# CONFIG_C2PORT is not set
-
-#
-# EEPROM support
-#
-CONFIG_EEPROM_AT24=y
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_IWMC3200TOP is not set
-
-#
-# Texas Instruments shared transport line discipline
-#
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-CONFIG_SCSI_MOD=y
-# CONFIG_RAID_ATTRS is not set
-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 is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# 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 is not set
-# 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 is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# 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=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-CONFIG_SATA_AHCI_PLATFORM=y
-# CONFIG_ATA_SFF is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_VETH is not set
-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=y
-# CONFIG_CICADA_PHY is not set
-# CONFIG_VITESSE_PHY is not set
-CONFIG_SMSC_PHY=y
-# CONFIG_BROADCOM_PHY is not set
-# CONFIG_BCM63XX_PHY is not set
-# 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=y
-# CONFIG_MICREL_PHY is not set
-# CONFIG_FIXED_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-CONFIG_TI_DAVINCI_EMAC=y
-CONFIG_TI_DAVINCI_MDIO=y
-CONFIG_TI_DAVINCI_CPDMA=y
-# CONFIG_DM9000 is not set
-# CONFIG_ENC28J60 is not set
-# CONFIG_ETHOC is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMSC911X 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 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_WLAN=y
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_HOSTAP is not set
-
-#
-# Enable WiMAX (Networking options) to see the WiMAX drivers
-#
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_WAN is not set
-
-#
-# CAIF transport drivers
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-CONFIG_NETCONSOLE=y
-# CONFIG_NETCONSOLE_DYNAMIC is not set
-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 is not set
-CONFIG_INPUT_POLLDEV=y
-# CONFIG_INPUT_SPARSEKMAP is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# 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=m
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_GPIO=y
-# CONFIG_KEYBOARD_TCA6416 is not set
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# 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_XTKBD=m
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_DYNAPRO is not set
-# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_TSC2004 is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-CONFIG_TOUCHSCREEN_TPS6507X=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# 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 is not set
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_N_GSM is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=3
-CONFIG_SERIAL_8250_RUNTIME_UARTS=3
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# 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_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=y
-CONFIG_LEGACY_PTY_COUNT=8
-# CONFIG_TTY_PRINTK is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_HW_RANDOM=m
-# 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 is not set
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_ALGOBIT=y
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-CONFIG_I2C_DAVINCI=y
-# CONFIG_I2C_DESIGNWARE is not set
-CONFIG_I2C_GPIO=y
-# CONFIG_I2C_OCORES is not set
-# 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_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_DAVINCI=y
-# CONFIG_SPI_GPIO is not set
-# CONFIG_SPI_XILINX is not set
-# CONFIG_SPI_DESIGNWARE is not set
-
-#
-# SPI Protocol Masters
-#
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-
-#
-# PPS support
-#
-# CONFIG_PPS is not set
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_SYSFS is not set
-
-#
-# 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 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_PCA953X_IRQ is not set
-CONFIG_GPIO_PCF857X=y
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_ADP5588 is not set
-
-#
-# 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_GENERIC_PWM is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-# CONFIG_THERMAL is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_DAVINCI_WATCHDOG=y
-# CONFIG_MAX63XX_WATCHDOG is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
-CONFIG_SSB_POSSIBLE=y
-
-#
-# Sonics Silicon Backplane
-#
-# CONFIG_SSB 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=y
-# CONFIG_TWL4030_CORE is not set
-# 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 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-CONFIG_REGULATOR_DUMMY=y
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# 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_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_TPS65023 is not set
-CONFIG_REGULATOR_TPS6507X=y
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_TPS6524X is not set
-# CONFIG_MEDIA_SUPPORT is not set
-
-#
-# Graphics support
-#
-# CONFIG_DRM is not set
-# 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 is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# 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_DA8XX=y
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_SOUND=y
-# CONFIG_SOUND_OSS_CORE is not set
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_JACK=y
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-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 is not set
-# 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 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=y
-CONFIG_SND_SPI=y
-CONFIG_SND_USB=y
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_CAIAQ is not set
-CONFIG_SND_SOC=y
-CONFIG_SND_DAVINCI_SOC=y
-CONFIG_SND_DAVINCI_SOC_MCASP=y
-CONFIG_SND_DA850_SOC_EVM=y
-CONFIG_SND_SOC_I2C_AND_SPI=y
-# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC3X=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 is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_THRUSTMASTER 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 is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_MON is not set
-# 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_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=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# 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
-
-#
-# Platform Glue Layer
-#
-CONFIG_USB_MUSB_DA8XX_GLUE=y
-# CONFIG_USB_MUSB_DAVINCI is not set
-CONFIG_USB_MUSB_DA8XX=y
-# CONFIG_USB_MUSB_TUSB6010 is not set
-# CONFIG_USB_MUSB_OMAP2PLUS is not set
-# CONFIG_USB_MUSB_AM35X is not set
-# CONFIG_USB_MUSB_BLACKFIN is not set
-# CONFIG_USB_MUSB_UX500 is not set
-CONFIG_USB_MUSB_HOST=y
-CONFIG_USB_MUSB_HDRC_HCD=y
-# CONFIG_MUSB_PIO_ONLY is not set
-# CONFIG_USB_INVENTRA_DMA_HW is not set
-# CONFIG_USB_TI_CPPI_DMA_HW is not set
-CONFIG_USB_TI_CPPI41_DMA_HW=y
-# CONFIG_USB_INVENTRA_DMA is not set
-# CONFIG_USB_TI_CPPI_DMA is not set
-CONFIG_USB_TI_CPPI41_DMA=y
-# CONFIG_USB_TUSB_OMAP_DMA is not set
-CONFIG_USB_MUSB_DEBUG=y
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_TMC is not set
-
-#
-# 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 is not set
-# 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 is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_YUREX is not set
-# CONFIG_USB_GADGET is not set
-
-#
-# OTG and related infrastructure
-#
-CONFIG_USB_OTG_UTILS=y
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_ULPI is not set
-CONFIG_NOP_USB_XCEIV=y
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD/SDIO Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_MINORS=8
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_SDIO_UART is not set
-# CONFIG_MMC_TEST is not set
-
-#
-# MMC/SD/SDIO Host Controller Drivers
-#
-# CONFIG_MMC_SDHCI is not set
-CONFIG_MMC_DAVINCI=y
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_ACCESSIBILITY is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# 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 is not set
-# 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 is not set
-# 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_RTC_DRV_OMAP=y
-# CONFIG_DMADEVICES is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_UIO is not set
-# CONFIG_STAGING 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=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_BTRFS_FS 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 is not set
-# CONFIG_QUOTA is not set
-# CONFIG_QUOTACTL is not set
-CONFIG_AUTOFS4_FS=m
-# CONFIG_FUSE_FS is not set
-
-#
-# Caches
-#
-# CONFIG_FSCACHE is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# 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 is not set
-
-#
-# 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 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-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 is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_LOGFS is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-CONFIG_MINIX_FS=m
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS 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 is not set
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=m
-CONFIG_NFSD_DEPRECATED=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_CEPH_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS 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 is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# 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 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=m
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_MAGIC_SYSRQ is not set
-# 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 is not set
-# CONFIG_HARDLOCKUP_DETECTOR is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_BKL=y
-# CONFIG_SPARSE_RCU_POINTER is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_MEMORY_INIT is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_LKDTM is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_ATOMIC64_SELFTEST is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_ARM_UNWIND is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_OC_ETM is not set
-
-#
-# Security options
-#
-# CONFIG_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_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_VMAC is not set
-
-#
-# Digest
-#
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYPTO_LZO is not set
-
-#
-# Random Number Generation
-#
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_BINARY_PRINTF is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC_T10DIF=m
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_DECOMPRESS_GZIP=y
-CONFIG_GENERIC_ALLOCATOR=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_NLATTR=y
-CONFIG_GENERIC_ATOMIC64=y
diff --git a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/uio_pruss.patch b/recipes-kernel/linux/linux-omapl138-psp-2.6.37/uio_pruss.patch
deleted file mode 100644
index 589b855..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp-2.6.37/uio_pruss.patch
+++ /dev/null
@@ -1,539 +0,0 @@
-From 15a3ca5868a7ba5b0526a566605675b77c45d40d Mon Sep 17 00:00:00 2001
-From: Melissa Watkins <m-watkins at ti.com>
-Date: Tue, 14 Jun 2011 09:32:53 -0500
-Subject: [PATCH] uio_pruss
-
-Signed-off-by: Melissa Watkins <m-watkins at ti.com>
----
- arch/arm/configs/da850_omapl138_defconfig  |    7 +-
- arch/arm/mach-davinci/board-da850-evm.c    |    3 +
- arch/arm/mach-davinci/da850.c              |   40 ++++-
- arch/arm/mach-davinci/devices-da8xx.c      |   75 ++++++++
- arch/arm/mach-davinci/include/mach/da8xx.h |    4 +
- drivers/uio/Kconfig                        |   10 +
- drivers/uio/Makefile                       |    1 +
- drivers/uio/uio_pru.c                      |  274 ++++++++++++++++++++++++++++
- 8 files changed, 406 insertions(+), 8 deletions(-)
- create mode 100644 drivers/uio/uio_pru.c
-
-diff --git a/arch/arm/configs/da850_omapl138_defconfig b/arch/arm/configs/da850_omapl138_defconfig
-index 73af1fc..646c477 100644
---- a/arch/arm/configs/da850_omapl138_defconfig
-+++ b/arch/arm/configs/da850_omapl138_defconfig
-@@ -1513,7 +1513,12 @@ CONFIG_RTC_INTF_DEV=y
- CONFIG_RTC_DRV_OMAP=y
- # CONFIG_DMADEVICES is not set
- # CONFIG_AUXDISPLAY is not set
--# CONFIG_UIO is not set
-+CONFIG_UIO=y
-+# CONFIG_UIO_PDRV is not set
-+# CONFIG_UIO_PDRV_GENIRQ is not set
-+# CONFIG_UIO_SMX is not set
-+# CONFIG_UIO_SERCOS3 is not set
-+CONFIG_UIO_PRUSS=m
- # CONFIG_STAGING is not set
- 
- #
-diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
-index 80745f6..5efd814 100644
---- a/arch/arm/mach-davinci/board-da850-evm.c
-+++ b/arch/arm/mach-davinci/board-da850-evm.c
-@@ -1876,6 +1876,9 @@ static __init void da850_evm_init(void)
- 
- 	platform_device_register(&da850_gpio_i2c);
- 
-+	/* Register PRUSS device */
-+	da8xx_register_pruss();
-+
- 	ret = da8xx_register_watchdog();
- 	if (ret)
- 		pr_warning("da830_evm_init: watchdog registration failed: %d\n",
-diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c
-index 884c88c..6fefd50 100644
---- a/arch/arm/mach-davinci/da850.c
-+++ b/arch/arm/mach-davinci/da850.c
-@@ -241,6 +241,13 @@ static struct clk tptc2_clk = {
- 	.flags		= ALWAYS_ENABLED,
- };
- 
-+static struct clk pruss_clk = {
-+	.name		= "pruss",
-+	.parent		= &pll0_sysclk2,
-+	.lpsc		= DA8XX_LPSC0_DMAX,
-+	.flags		= ALWAYS_ENABLED,
-+};
-+
- static struct clk uart0_clk = {
- 	.name		= "uart0",
- 	.parent		= &pll0_sysclk2,
-@@ -398,12 +405,28 @@ static struct clk ehrpwm_clk = {
- 	.flags          = DA850_CLK_ASYNC3,
- };
- 
--static struct clk ecap_clk = {
--	.name		= "ecap",
--	.parent		= &pll0_sysclk2,
--	.lpsc		= DA8XX_LPSC1_ECAP,
--	.gpsc		= 1,
--	.flags          = DA850_CLK_ASYNC3,
-+static struct clk ecap0_clk = {
-+       .name           = "ecap0",
-+       .parent         = &pll0_sysclk2,
-+       .lpsc           = DA8XX_LPSC1_ECAP,
-+       .flags          = DA850_CLK_ASYNC3,
-+       .gpsc           = 1,
-+};
-+
-+static struct clk ecap1_clk = {
-+       .name           = "ecap1",
-+       .parent         = &pll0_sysclk2,
-+       .lpsc           = DA8XX_LPSC1_ECAP,
-+       .flags          = DA850_CLK_ASYNC3,
-+       .gpsc           = 1,
-+};
-+
-+static struct clk ecap2_clk = {
-+       .name           = "ecap2",
-+       .parent         = &pll0_sysclk2,
-+       .lpsc           = DA8XX_LPSC1_ECAP,
-+       .flags          = DA850_CLK_ASYNC3,
-+       .gpsc           = 1,
- };
- 
- static struct clk usb11_clk = {
-@@ -447,6 +470,7 @@ static struct clk_lookup da850_clks[] = {
- 	CLK(NULL,		"tptc1",	&tptc1_clk),
- 	CLK(NULL,		"tpcc1",	&tpcc1_clk),
- 	CLK(NULL,		"tptc2",	&tptc2_clk),
-+	CLK(NULL,       "pruss",    &pruss_clk),
- 	CLK(NULL,		"uart0",	&uart0_clk),
- 	CLK(NULL,		"uart1",	&uart1_clk),
- 	CLK(NULL,		"uart2",	&uart2_clk),
-@@ -469,7 +493,9 @@ static struct clk_lookup da850_clks[] = {
- 	CLK("davinci-mcbsp.1",	NULL,		&mcbsp1_clk),
- 	CLK(NULL,		"vpif",		&vpif_clk),
- 	CLK(NULL,		"ehrpwm",	&ehrpwm_clk),
--	CLK(NULL,		"ecap",		&ecap_clk),
-+	CLK(NULL,               "ecap0",        &ecap0_clk),
-+        CLK(NULL,               "ecap1",        &ecap1_clk),
-+        CLK(NULL,               "ecap2",        &ecap2_clk),
- 	CLK(NULL,               "usb11",        &usb11_clk),
- 	CLK(NULL,               "usb20",        &usb20_clk),
- 	CLK(NULL,		NULL,		NULL),
-diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
-index dd62e44..08f6dfa 100644
---- a/arch/arm/mach-davinci/devices-da8xx.c
-+++ b/arch/arm/mach-davinci/devices-da8xx.c
-@@ -1064,3 +1064,78 @@ int __init da850_register_sata(unsigned long refclkpn)
- 
- 	return platform_device_register(&da850_sata_device);
- }
-+
-+static struct resource pruss_resources[] = {
-+        [0] = {
-+                .start  = DA8XX_PRUSS_BASE,
-+                .end    = DA8XX_PRUSS_BASE + SZ_64K - 1,
-+                .flags  = IORESOURCE_MEM,
-+        },
-+       [1] = {
-+                .start  = DA8XX_L3RAM_BASE,
-+                .end    = DA8XX_L3RAM_BASE + SZ_128K - 1,
-+                .flags  = IORESOURCE_MEM,
-+        },
-+       [2] = {
-+                .start  = 0,
-+                .end    = SZ_256K - 1,
-+                .flags  = IORESOURCE_MEM,
-+        },
-+
-+        [3] = {
-+                .start  = IRQ_DA8XX_EVTOUT0,
-+                .end    = IRQ_DA8XX_EVTOUT0,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [4] = {
-+                .start  = IRQ_DA8XX_EVTOUT1,
-+                .end    = IRQ_DA8XX_EVTOUT1,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [5] = {
-+                .start  = IRQ_DA8XX_EVTOUT2,
-+                .end    = IRQ_DA8XX_EVTOUT2,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [6] = {
-+                .start  = IRQ_DA8XX_EVTOUT3,
-+                .end    = IRQ_DA8XX_EVTOUT3,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [7] = {
-+                .start  = IRQ_DA8XX_EVTOUT4,
-+                .end    = IRQ_DA8XX_EVTOUT4,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [8] = {
-+                .start  = IRQ_DA8XX_EVTOUT5,
-+                .end    = IRQ_DA8XX_EVTOUT5,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [9] = {
-+                .start  = IRQ_DA8XX_EVTOUT6,
-+                .end    = IRQ_DA8XX_EVTOUT6,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+        [10] = {
-+                .start  = IRQ_DA8XX_EVTOUT7,
-+                .end    = IRQ_DA8XX_EVTOUT7,
-+                .flags  = IORESOURCE_IRQ,
-+        },
-+};
-+
-+static struct platform_device pruss_device = {
-+       .name                   = "pruss",
-+        .id                    = 0,
-+        .num_resources         = ARRAY_SIZE(pruss_resources),
-+        .resource              = pruss_resources,
-+       .dev    =       {
-+               .coherent_dma_mask = 0xffffffff,
-+       }
-+
-+};
-+
-+int __init da8xx_register_pruss()
-+{
-+        return platform_device_register(&pruss_device);
-+}
-diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
-index f9b70c4..ad0474f 100644
---- a/arch/arm/mach-davinci/include/mach/da8xx.h
-+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
-@@ -78,6 +78,9 @@ extern unsigned int da850_max_speed;
- #define DA8XX_DDR2_CTL_BASE	0xb0000000
- #define DA8XX_ARM_RAM_BASE	0xffff0000
- #define DA8XX_VPIF_BASE		0x01e17000
-+#define DA8XX_PRUSS_BASE       0x01C30000
-+#define DA8XX_L3RAM_BASE       0x80000000
-+
- 
- void __init da830_init(void);
- void __init da850_init(void);
-@@ -108,6 +111,7 @@ int __init da850_register_vpif_capture(struct vpif_capture_config
- int __init da850_register_sata(unsigned long refclkpn);
- void __init da850_register_ehrpwm(char);
- int __init da850_register_ecap(char);
-+int da8xx_register_pruss(void);
- 
- extern struct platform_device da8xx_serial_device;
- extern struct emac_platform_data da8xx_emac_pdata;
-diff --git a/drivers/uio/Kconfig b/drivers/uio/Kconfig
-index bb44079..4a26486 100644
---- a/drivers/uio/Kconfig
-+++ b/drivers/uio/Kconfig
-@@ -94,4 +94,14 @@ config UIO_NETX
- 	  To compile this driver as a module, choose M here; the module
- 	  will be called uio_netx.
- 
-+config UIO_PRUSS
-+	tristate "Texas Instruments PRUSS driver"
-+	depends on ARCH_DAVINCI_DA850
-+	default n
-+	help
-+	  PRUSS driver for OMAPL13X/DA8XX/AM17XX/AM18XX devices
-+	  PRUSS driver requires user space components
-+	  To compile this driver as a module, choose M here: the module
-+	  will be called uio_pruss.
-+
- endif
-diff --git a/drivers/uio/Makefile b/drivers/uio/Makefile
-index 18fd818..948d587 100644
---- a/drivers/uio/Makefile
-+++ b/drivers/uio/Makefile
-@@ -5,4 +5,5 @@ obj-$(CONFIG_UIO_PDRV_GENIRQ)	+= uio_pdrv_genirq.o
- obj-$(CONFIG_UIO_AEC)	+= uio_aec.o
- obj-$(CONFIG_UIO_SERCOS3)	+= uio_sercos3.o
- obj-$(CONFIG_UIO_PCI_GENERIC)	+= uio_pci_generic.o
-+obj-$(CONFIG_UIO_PRUSS)         += uio_pru.o
- obj-$(CONFIG_UIO_NETX)	+= uio_netx.o
-diff --git a/drivers/uio/uio_pru.c b/drivers/uio/uio_pru.c
-new file mode 100644
-index 0000000..88af0a2
---- /dev/null
-+++ b/drivers/uio/uio_pru.c
-@@ -0,0 +1,274 @@
-+/*
-+ * UIO TI Programmable Real-Time Unit (PRU) driver.
-+ *
-+ * (C) 2010 Amit Chatterjee <amit.chatterjee at ti.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/device.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/uio_driver.h>
-+#include <linux/io.h>
-+#include <linux/clk.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/slab.h>
-+
-+#define DRV_NAME "pruss"
-+#define DRV_VERSION "0.01"
-+
-+/*
-+0x01C30000 - 0x01C301FF Data RAM 0
-+0x01C30200 - 0x01C31FFF Reserved
-+0x01C32000 - 0x01C321FF Data RAM 1
-+0x01C32200 - 0x01C33FFF Reserved
-+0x01C34000 - 0x01C36FFF INTC Registers
-+0x01C37000 - 0x01C373FF PRU0 Control Registers
-+0x01C37400 - 0x01C377FF PRU0 Debug Registers
-+0x01C37800 - 0x01C37BFF PRU1 Control Registers
-+0x01C37C00 - 0x01C37FFF PRU1 Debug Registers
-+0x01C38000 - 0x01C38FFF PRU0 Instruction RAM
-+0x01C39000 - 0x01C3BFFF Reserved
-+0x01C3C000 - 0x01C3CFFF PRU1 Instruction RAM
-+0x01C3D000 - 0x01C3FFFF Reserved
-+*/
-+/*
-+ * 3 PRU_EVTOUT0 PRUSS Interrupt
-+ * 4 PRU_EVTOUT1 PRUSS Interrupt
-+ * 5 PRU_EVTOUT2 PRUSS Interrupt
-+ * 6 PRU_EVTOUT3 PRUSS Interrupt
-+ * 7 PRU_EVTOUT4 PRUSS Interrupt
-+ * 8 PRU_EVTOUT5 PRUSS Interrupt
-+ * 9 PRU_EVTOUT6 PRUSS Interrupt
-+ * 10 PRU_EVTOUT7 PRUSS Interrupt
-+*/
-+
-+#define PRUSS_INSTANCE		(8)
-+
-+static struct clk *pruss_clk = NULL, *ecap0_clk = NULL;
-+static struct uio_info *info[PRUSS_INSTANCE];
-+static void *ddr_virt_addr;
-+static dma_addr_t ddr_phy_addr;
-+
-+
-+
-+static irqreturn_t pruss_handler(int irq, struct uio_info *dev_info)
-+{
-+	return IRQ_HANDLED;
-+}
-+
-+static int __devinit pruss_probe(struct platform_device *dev)
-+{
-+	int ret = -ENODEV;
-+	int count = 0;
-+	struct resource *regs_pruram, *regs_l3ram, *regs_ddr;
-+	char *string;
-+ 
-+	/* Power on PRU in case its not done as part of boot-loader */
-+	pruss_clk = clk_get(&dev->dev, "pruss");
-+	if (IS_ERR(pruss_clk)) {
-+		dev_err(&dev->dev, "no pruss clock available\n");
-+		ret = PTR_ERR(pruss_clk);
-+		pruss_clk = NULL;
-+		return ret;
-+	} else {
-+		clk_enable (pruss_clk);
-+	}
-+
-+	ecap0_clk = clk_get(&dev->dev, "ecap0");
-+	if (IS_ERR(ecap0_clk)) {
-+		dev_err(&dev->dev, "no ecap0 clock available\n");
-+		ret = PTR_ERR(ecap0_clk);
-+		ecap0_clk = NULL;
-+		return ret;
-+	} else {
-+		clk_enable (ecap0_clk);
-+	}
-+ 
-+
-+
-+        for (count = 0; count < PRUSS_INSTANCE; count ++) {
-+		info[count] = (struct uio_info *)kzalloc(sizeof (struct uio_info), GFP_KERNEL);
-+	        if (!info[count])
-+        	        return -ENOMEM;
-+
-+        }
-+
-+	regs_pruram = platform_get_resource(dev, IORESOURCE_MEM, 0);
-+	if (!regs_pruram) {
-+		dev_err(&dev->dev, "No memory resource specified\n");
-+		goto out_free;
-+	}
-+
-+	regs_l3ram = platform_get_resource(dev, IORESOURCE_MEM, 1);
-+	if (!regs_l3ram) {
-+		dev_err(&dev->dev, "No memory resource specified\n");
-+		goto out_free;
-+	}
-+
-+	regs_ddr = platform_get_resource(dev, IORESOURCE_MEM, 2);
-+        if (!regs_ddr) {
-+                dev_err(&dev->dev, "No memory resource specified\n");
-+                goto out_free;
-+        }
-+	ddr_virt_addr = dma_alloc_coherent (&dev->dev, regs_ddr->end-regs_ddr->start+1, &ddr_phy_addr, GFP_KERNEL|GFP_DMA);
-+
-+
-+	for (count = 0; count < PRUSS_INSTANCE; count ++) {
-+		info[count]->mem[0].addr = regs_pruram->start;
-+		if (!info[count]->mem[0].addr) {
-+			dev_err(&dev->dev, "Invalid memory resource\n");
-+			break;
-+		}
-+
-+		info[count]->mem[0].size = regs_pruram->end - regs_pruram->start + 1;
-+		info[count]->mem[0].internal_addr = ioremap(regs_pruram->start, info[count]->mem[0].size);
-+
-+		if (!info[count]->mem[0].internal_addr) {
-+			dev_err(&dev->dev, "Can't remap memory address range\n");
-+			break;
-+		}
-+		info[count]->mem[0].memtype = UIO_MEM_PHYS;
-+
-+
-+		info[count]->mem[1].addr = regs_l3ram->start;
-+		if (!info[count]->mem[1].addr) {
-+			dev_err(&dev->dev, "Invalid memory resource\n");
-+			break;
-+		}
-+
-+		info[count]->mem[1].size = regs_l3ram->end - regs_l3ram->start + 1;
-+		info[count]->mem[1].internal_addr = ioremap(regs_l3ram->start, info[count]->mem[1].size);
-+
-+		if (!info[count]->mem[1].internal_addr) {
-+			dev_err(&dev->dev, "Can't remap memory address range\n");
-+			break;
-+		}
-+		info[count]->mem[1].memtype = UIO_MEM_PHYS;
-+
-+
-+                info[count]->mem[2].size = regs_ddr->end - regs_ddr->start + 1;
-+                if (!(info[count]->mem[2].size-1)) {
-+                        dev_err(&dev->dev, "Invalid memory resource\n");
-+                        break;
-+                }
-+
-+
-+                info[count]->mem[2].internal_addr = ddr_virt_addr;
-+
-+                if (!info[count]->mem[2].internal_addr) {
-+                        dev_err(&dev->dev, "Can't remap memory address range\n");
-+                        break;
-+                }
-+		info[count]->mem[2].addr = ddr_phy_addr;
-+                info[count]->mem[2].memtype = UIO_MEM_PHYS;
-+
-+
-+               	string = kzalloc(20, GFP_KERNEL);
-+                sprintf (string, "pruss_evt%d", count); 
-+                info[count]->name = string;
-+		info[count]->version = "0.01";
-+
-+		/* Register PRUSS IRQ lines */
-+		info[count]->irq = IRQ_DA8XX_EVTOUT0+count;
-+
-+		info[count]->irq_flags = IRQF_SHARED;
-+		info[count]->handler = pruss_handler;
-+
-+		ret = uio_register_device(&dev->dev, info[count]);
-+
-+		if (ret < 0)
-+			break;
-+	}
-+
-+	platform_set_drvdata(dev, info);
-+
-+	if (ret < 0) {
-+		if (ddr_virt_addr)
-+			dma_free_coherent (&dev->dev, regs_ddr->end - regs_ddr->start + 1, ddr_virt_addr, ddr_phy_addr);  
-+		while (count --) {
-+			uio_unregister_device (info[count]);
-+			if (info[count]->name)
-+				kfree (info[count]->name);
-+			iounmap(info[count]->mem[0].internal_addr);
-+		}
-+	} else {
-+		return 0;
-+	}
-+
-+out_free:
-+       for (count = 0; count < PRUSS_INSTANCE; count ++) {
-+                if (info[count])
-+                        kfree(info[count]);
-+        }
-+
-+	if(pruss_clk != NULL)
-+		clk_put(pruss_clk);
-+	if (ecap0_clk != NULL)
-+		clk_put (ecap0_clk);
-+
-+	return ret;
-+}
-+
-+static int __devexit pruss_remove(struct platform_device *dev)
-+{
-+	int count = 0;
-+	struct uio_info **info;
-+
-+	info = (struct uio_info **)platform_get_drvdata(dev);
-+
-+	for (count = 0; count < PRUSS_INSTANCE; count ++) { 
-+		uio_unregister_device(info[count]);
-+		if (info[count]->name)
-+			kfree (info[count]->name);
-+
-+	}
-+	iounmap(info[0]->mem[0].internal_addr);
-+	iounmap(info[0]->mem[1].internal_addr);
-+	if (ddr_virt_addr)
-+		dma_free_coherent (&dev->dev, info[0]->mem[2].size, info[0]->mem[2].internal_addr, info[0]->mem[2].addr );
-+
-+	for (count = 0; count < PRUSS_INSTANCE; count ++) {
-+		if (info[count])
-+			kfree(info[count]);
-+	}		
-+
-+	platform_set_drvdata(dev, NULL);
-+
-+	if(pruss_clk != NULL)
-+		clk_put(pruss_clk);
-+	if (ecap0_clk != NULL)
-+        	clk_put (ecap0_clk);
-+
-+
-+	return 0;
-+}
-+
-+static struct platform_driver pruss_driver = {
-+	.probe		= pruss_probe,
-+	.remove		= __devexit_p(pruss_remove),
-+	.driver		= {
-+		.name	= DRV_NAME,
-+		.owner	= THIS_MODULE,
-+	},
-+};
-+
-+static int __init pruss_init_module(void)
-+{
-+	return platform_driver_register(&pruss_driver);
-+}
-+module_init(pruss_init_module);
-+
-+static void __exit pruss_exit_module(void)
-+{
-+	platform_driver_unregister(&pruss_driver);
-+}
-+module_exit(pruss_exit_module);
-+
-+MODULE_LICENSE("GPL v2");
-+MODULE_VERSION(DRV_VERSION);
-+MODULE_AUTHOR("Amit Chatterjee <amit.chatterjee at ti.com>");
--- 
-1.7.0.4
-
diff --git a/recipes-kernel/linux/linux-omapl138-psp_2.6.37.bb b/recipes-kernel/linux/linux-omapl138-psp_2.6.37.bb
deleted file mode 100644
index 199499a..0000000
--- a/recipes-kernel/linux/linux-omapl138-psp_2.6.37.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "Linux kernel for OMAPL1 machines from PSP, based on linux-davinci kernel"
-LICENSE = "GPLv2"
-
-require multi-kernel.inc
-require tipspkernel.inc
-require setup-defconfig.inc
-
-MACHINE_KERNEL_PR_append = "c"
-PR = "${MACHINE_KERNEL_PR}"
-
-S = "${WORKDIR}/git"
-
-MULTI_CONFIG_BASE_SUFFIX = ""
-
-BRANCH = "03.21.00.03"
-SRCREV = "v2.6.37_DAVINCIPSP_03.21.00.04"
-
-COMPATIBLE_MACHINE = "(omapl138)"
-
-SRC_URI += "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH} \
-    file://defconfig"
-
-PATCHES_OVER_PSP = " \
-    file://0001-TI-WL12xx-MMC-patches-03.21.00.04.patch \
-    file://0002-da850-Set-maximum-OPP-frequency-to-456MHz.patch \
-    file://0003-AM18xx-WL1271-Enable-BT.patch \
-    file://0004-PSP03.21.00.04.sdk-activate-wireless-extensions.patch \
-    file://0005-Davinci-da850-Add-Mistral-WL12XX-config-support-to.patch \
-    file://0006-Add-wlan-and-BT-config-switches.patch \
-    file://uio_pruss.patch \
-    file://0007-mmc-davinci-Eliminate-spurious-interrupts.patch \
-    file://0008-mmc-davinci-Poll-for-small-size-transfers.patch \
-    "
-
-# Updated PIO mode for MUSB help description
-PATCHES_OVER_PSP += "file://0001-musb-update-PIO-mode-help-information-in-Kconfig.patch"
-
-# Fix alignment issue with gcc-4.7
-PATCHES_OVER_PSP += " \
-    file://0001-arm-fix-builds-with-gcc-4.7.patch \
-"
-- 
2.0.0



More information about the meta-ti mailing list