From 9d09f266094df49b5aa5d2ca3b563c624129a032 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Tue, 18 Jan 2011 13:00:19 +0100 Subject: TI BSP: sync linux-omap 2.6.37 with OE Signed-off-by: Koen Kooi --- ...wer-on-EHCI-serial-camera-and-DVI-on-beag.patch | 55 -- ...omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch | 44 ++ ...0002-omap-Beagle-detect-new-xM-revision-B.patch | 43 -- .../0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch | 48 ++ ...agleboard-Add-infrastructure-to-do-fixups.patch | 219 ------ .../0003-omap3-beaglexm-fix-power-on-of-DVI.patch | 94 +++ ...agleboard-pre-export-GPIOs-to-userspace-w.patch | 57 -- ...0004-omap-Beagle-detect-new-xM-revision-B.patch | 43 ++ ...agleboard-Add-infrastructure-to-do-fixups.patch | 219 ++++++ .../0005-modedb.c-add-proper-720p60-mode.patch | 28 - ...agleboard-pre-export-GPIOs-to-userspace-w.patch | 57 ++ ...isplay-single-block-read-console-messages.patch | 28 - .../0007-MTD-silence-ecc-errors-on-mtdblock0.patch | 63 -- .../0007-modedb.c-add-proper-720p60-mode.patch | 28 + .../linux/linux-omap/base/0008-Miracle-patch.patch | 504 -------------- ...isplay-single-block-read-console-messages.patch | 28 + .../base/0009-ARM-OMAP-add-omap_rev_-macros.patch | 81 --- .../0009-MTD-silence-ecc-errors-on-mtdblock0.patch | 63 ++ .../linux/linux-omap/base/0010-Miracle-patch.patch | 504 ++++++++++++++ ...enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch | 31 - .../base/0011-ARM-OMAP-add-omap_rev_-macros.patch | 81 +++ ...eboard-add-WIP-support-for-beagleboardtoy.patch | 102 --- ...enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch | 31 + ...-smsc911x-return-ENODEV-if-device-is-not-.patch | 29 - ...ut-touchscreen-ads7846-return-ENODEV-if-d.patch | 47 -- ...eboard-add-WIP-support-for-beagleboardtoy.patch | 102 +++ ...able-audio-capture-by-default-for-twl4030.patch | 27 - ...-smsc911x-return-ENODEV-if-device-is-not-.patch | 29 + .../base/0015-MFD-enable-madc-clock.patch | 51 -- ...ut-touchscreen-ads7846-return-ENODEV-if-d.patch | 47 ++ ...able-audio-capture-by-default-for-twl4030.patch | 27 + .../base/0016-MFD-add-twl4030-madc-driver.patch | 740 --------------------- ...RM-OMAP-Add-twl4030-madc-support-to-Overo.patch | 32 - .../base/0017-MFD-enable-madc-clock.patch | 51 ++ ...M-OMAP-Add-twl4030-madc-support-to-Beagle.patch | 35 - .../base/0018-MFD-add-twl4030-madc-driver.patch | 740 +++++++++++++++++++++ ...RM-OMAP-Add-twl4030-madc-support-to-Overo.patch | 32 + ...dd-support-for-Samsung-LTE430WQ-F0C-panel.patch | 173 ----- ...M-OMAP-Add-twl4030-madc-support-to-Beagle.patch | 35 + ...Add-support-for-LG-Philips-LB035Q02-panel.patch | 299 --------- ...dd-support-for-Samsung-LTE430WQ-F0C-panel.patch | 173 +++++ ...dd-bootarg-for-selecting-svideo-or-compos.patch | 75 --- ...mc-twl4030-move-clock-input-selection-pri.patch | 39 -- ...Add-support-for-LG-Philips-LB035Q02-panel.patch | 299 +++++++++ ...dd-bootarg-for-selecting-svideo-or-compos.patch | 75 +++ ...C-add-support-for-backup-battery-recharge.patch | 55 -- ...tomatically-set-musb-mode-in-platform-dat.patch | 49 -- ...mc-twl4030-move-clock-input-selection-pri.patch | 39 ++ ...heck-for-both-cpu-type-and-revision-rathe.patch | 34 - ...C-add-support-for-backup-battery-recharge.patch | 55 ++ ...tomatically-set-musb-mode-in-platform-dat.patch | 49 ++ ...0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch | 355 ---------- ...heck-for-both-cpu-type-and-revision-rathe.patch | 34 + ...0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch | 355 ++++++++++ ...MAP3-PM-Adding-T2-enabling-of-smartreflex.patch | 4 +- ...0001-omap3-add-support-for-720MHz-MPU-OPP.patch | 38 -- ...q-ensure-driver-initializes-after-cpufreq.patch | 4 +- .../0002-OMAP35x-Add-support-for-720MHz-part.patch | 90 --- ...PUfreq-ensure-policy-is-fully-initialized.patch | 4 +- ...03-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch | 62 -- ...4-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch | 103 --- .../0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch | 4 +- ...AP-PM-CPUFREQ-Fix-conditional-compilation.patch | 4 +- ...uce-a-user-list-for-each-voltage-domain-i.patch | 4 +- ...uce-API-in-the-OPP-layer-to-find-the-opp-.patch | 4 +- ...uce-API-to-register-a-device-with-a-volta.patch | 4 +- ...uce-device-specific-set-rate-and-get-rate.patch | 4 +- ...MAP-Voltage-layer-changes-to-support-DVFS.patch | 4 +- ...ntroduce-dependent-voltage-domain-support.patch | 4 +- .../dvfs/0012-OMAP-Introduce-device-scale.patch | 4 +- ...0013-OMAP-Disable-smartreflex-across-DVFS.patch | 4 +- ...duce-custom-set-rate-and-get-rate-APIs-fo.patch | 4 +- ...e-cpufreq-driver-to-use-the-new-set_rate-.patch | 4 +- ...duce-voltage-domain-info-in-the-hwmod-str.patch | 4 +- ...AP3-Add-voltage-dependency-table-for-VDD1.patch | 4 +- ...map3-4-opp-make-omapx_opp_init-non-static.patch | 4 +- ...0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch | 10 +- ...0-omap3-Add-basic-support-for-720MHz-part.patch | 202 ++++++ ...01-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch | 4 +- ...void-incrementing-mm_users-on-CPU-startup.patch | 4 +- .../0003-ARM-get-rid-of-kmap_high_l1_vipt.patch | 4 +- ...ache-xsc3l2-after-stack-based-kmap_atomic.patch | 4 +- ...he-feroceon-l2-after-stack-based-kmap_ato.patch | 4 +- ...t-the-required-VFMUNIT-clock-gating-disab.patch | 4 +- ...vo-Add-hdmi-connector-properties-after-in.patch | 4 +- ...tel_ips-When-i915-loads-after-IPS-make-IP.patch | 4 +- ...rify-Ironlake-eDP-presence-on-DP_A-using-.patch | 4 +- ...0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch | 4 +- ...update-Nomadik-U300-and-Ux500-maintainers.patch | 6 +- ...40-1-Stop-irqsoff-trace-on-return-to-user.patch | 4 +- ...le-atm-fix-PHY-signal-initialization-race.patch | 4 +- .../0014-ehea-Avoid-changing-vlan-flags.patch | 4 +- ...isabling-multilink-protocol-ID-compressio.patch | 4 +- ...ng-the-wrong-variable-in-skfp_driver_init.patch | 4 +- ...s-Add-missing-control_type-initialization.patch | 4 +- ...s-max98088-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm8523-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm8741-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm8904-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm8955-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm8962-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm9090-Fix-register-cache-incoherency.patch | 4 +- ...ecs-wm8753-Fix-register-cache-incoherency.patch | 4 +- ...-incorrect-direct-gfn-for-unpaged-mode-sh.patch | 4 +- ...027-fix-freeing-user_struct-in-user-cache.patch | 4 +- ...cspi.c-Force-CS-to-be-in-inactive-state-a.patch | 4 +- ...-undesirable-side-effect-of-adding-visibl.patch | 4 +- ...-m68knommu-Coldfire-QSPI-platform-support.patch | 4 +- ...nt-buffer-overflow-in-OSS-load_mixer_volu.patch | 4 +- ...e-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch | 4 +- ...i915-bios-Reverse-order-of-100-120-Mhz-SS.patch | 4 +- ...o-Report-LVDS-attached-to-ch701x-as-conne.patch | 4 +- ...-update-Documentation-filesystems-Locking.patch | 4 +- ...rong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch | 4 +- ...ing-zram-work-around-oops-due-to-startup-.patch | 4 +- ...de-instead-of-kernel-address-for-proc-fil.patch | 4 +- ...aset-Fix-memory-leak-in-do_disconnect_req.patch | 4 +- ...IC-core-network-driver-fix-mem-leak-on-al.patch | 4 +- ...g3-fix-return-value-check-in-tg3_read_vpd.patch | 4 +- ...tarfire-Fix-dma_addr_t-size-test-for-MIPS.patch | 4 +- ...vers-atm-atmtcp.c-add-missing-atm_dev_put.patch | 4 +- .../linus/0044-KVM-i8259-initialize-isr_ack.patch | 4 +- .../0045-hwmon-s3c-hwmon-Fix-compilation.patch | 4 +- ...prove-initialisation-error-message-and-do.patch | 4 +- ...M-6605-1-Add-missing-include-asm-memory.h.patch | 4 +- .../0048-mv_xor-fix-race-in-tasklet-function.patch | 4 +- ...-provide-dummy-functions-for-DMA_ENGINE-n.patch | 4 +- ...vent-device-probe-failure-due-to-volume-c.patch | 52 ++ ...40-Prevent-device-probe-failure-due-to-vo.patch | 52 -- ...5-Revert-changeset-fcb9757333-to-avoid-a-.patch | 518 --------------- ...rt-changeset-fcb9757333-to-avoid-a-regres.patch | 518 +++++++++++++++ ...radio_fops-should-also-use-unlocked_ioctl.patch | 31 + ...x-radio_fops-should-also-use-unlocked_ioc.patch | 31 - ...rofile-op_model_amd.c-Perform-initialisat.patch | 4 +- ...x-callchain-hit-bad-cast-on-ascii-display.patch | 4 +- ...add-IT8152_LAST_IRQ-definition-to-fix-bui.patch | 40 ++ ...55-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch | 29 - ...add-IT8152_LAST_IRQ-definition-to-fix-bui.patch | 40 -- ...M-pxa-fix-page-table-corruption-on-resume.patch | 46 ++ ...M-pxa-fix-page-table-corruption-on-resume.patch | 46 -- ...-fix-oops-when-changing-tx-rx-ring-params.patch | 63 ++ ...-fix-oops-when-changing-tx-rx-ring-params.patch | 63 -- ...-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch | 157 +++++ ...-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 ++ ...0-name_to_dev_t-must-not-call-__init-code.patch | 31 - .../0061-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 + .../linus/0062-ima-fix-add-LSM-rule-bug.patch | 64 -- .../0063-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 ++ ..._fs-method-from-Documentation-filesystems.patch | 38 -- .../linux/linux-omap/linus/0065-Linux-2.6.37.patch | 25 + ...-route.c-respect-prefsrc-for-local-routes.patch | 57 -- .../linux/linux-omap/linus/0066-Linux-2.6.37.patch | 25 - ...-to-set-config-options-in-GPMC-per-CS-con.patch | 4 +- ...01-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch | 62 -- ...ns-to-dma.c-to-set-address-and-length-for.patch | 4 +- ...2-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch | 103 --- ...ed-Add-driver-for-USRP-Embedded-FPGA-inte.patch | 4 +- recipes-bsp/linux/linux-omap_2.6.37.bb | 92 ++- 164 files changed, 4970 insertions(+), 5126 deletions(-) delete mode 100644 recipes-bsp/linux/linux-omap/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0002-omap-Beagle-detect-new-xM-revision-B.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0005-modedb.c-add-proper-720p60-mode.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0006-mmc-don-t-display-single-block-read-console-messages.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0008-Miracle-patch.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0009-ARM-OMAP-add-omap_rev_-macros.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0010-Miracle-patch.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0015-MFD-enable-madc-clock.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0016-MFD-add-twl4030-madc-driver.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0023-RTC-add-support-for-backup-battery-recharge.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch delete mode 100644 recipes-bsp/linux/linux-omap/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch create mode 100644 recipes-bsp/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch delete mode 100644 recipes-bsp/linux/linux-omap/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch delete mode 100644 recipes-bsp/linux/linux-omap/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch delete mode 100644 recipes-bsp/linux/linux-omap/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch delete mode 100644 recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch create mode 100644 recipes-bsp/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0050-media-cx25840-Prevent-device-probe-failure-due-to-vo.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0051-media-wm8775-Revert-changeset-fcb9757333-to-avoid-a-.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0052-media-em28xx-radio_fops-should-also-use-unlocked_ioc.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0055-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0056-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0057-ARM-pxa-fix-page-table-corruption-on-resume.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0058-atl1-fix-oops-when-changing-tx-rx-ring-params.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0059-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0060-name_to_dev_t-must-not-call-__init-code.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0061-bridge-stp-ensure-mac-header-is-set.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0062-ima-fix-add-LSM-rule-bug.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0063-arch-mn10300-kernel-irq.c-fix-build.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0064-remove-trim_fs-method-from-Documentation-filesystems.patch create mode 100644 recipes-bsp/linux/linux-omap/linus/0065-Linux-2.6.37.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0065-ipv4-route.c-respect-prefsrc-for-local-routes.patch delete mode 100644 recipes-bsp/linux/linux-omap/linus/0066-Linux-2.6.37.patch delete mode 100644 recipes-bsp/linux/linux-omap/usrp/0001-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch delete mode 100644 recipes-bsp/linux/linux-omap/usrp/0002-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch diff --git a/recipes-bsp/linux/linux-omap/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch b/recipes-bsp/linux/linux-omap/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch deleted file mode 100644 index 53ef772c2a..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 5bae403e0f66a67c222ce124422d43b8b9307041 Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Thu, 7 Oct 2010 09:25:45 +0200 -Subject: [PATCH 01/26] ARM: OMAP: Power on EHCI, serial, camera and DVI on beagleboard-xM - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-omap3beagle.c | 26 ++++++++++++++++++++++++-- - 1 files changed, 24 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 6c12760..6e8a1b9 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -297,13 +297,35 @@ static int beagle_twl_gpio_setup(struct device *dev, - gpio_request(gpio + 1, "EHCI_nOC"); - gpio_direction_input(gpio + 1); - -- /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ -+ /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active -+ * high / others active low) */ - gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); -- gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); -+ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) -+ gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1); -+ else -+ gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); -+ -+ /* DVI reset GPIO is different between revisions */ -+ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) -+ beagle_dvi_device.reset_gpio = 129; -+ else -+ beagle_dvi_device.reset_gpio = 170; -+ -+ /* Power on DVI, Serial and PWR led */ -+ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { -+ gpio_request(gpio + 1, "nDVI_PWR_EN"); -+ gpio_direction_output(gpio + 1, 0); -+ } - - /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ - gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; - -+ /* Power on camera interface on P7/P8 or DVI on A2 and beyond */ -+ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { -+ gpio_request(gpio + 2, "CAM_EN"); -+ gpio_direction_output(gpio + 2, 1); -+ } -+ - return 0; - } - --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch b/recipes-bsp/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch new file mode 100644 index 0000000000..42bfa4e2f6 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0001-omap3-beaglexm-fix-EHCI-power-up-GPIO-dir.patch @@ -0,0 +1,44 @@ +From 3d2f0e2f29320d9c6a6e4d8d5aeff9127a2106cb Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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@ti.com: split up, added descriptive changelogs] +Signed-off-by: Nishanth Menon +Signed-off-by: Koen Kooi +Signed-off-by: Tony Lindgren +--- + 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-bsp/linux/linux-omap/base/0002-omap-Beagle-detect-new-xM-revision-B.patch b/recipes-bsp/linux/linux-omap/base/0002-omap-Beagle-detect-new-xM-revision-B.patch deleted file mode 100644 index ba1915111c..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0002-omap-Beagle-detect-new-xM-revision-B.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 3258ce5493fd9e603a31cc4156892f08ee1500e9 Mon Sep 17 00:00:00 2001 -From: Robert Nelson -Date: Tue, 9 Nov 2010 08:34:55 -0600 -Subject: [PATCH 02/26] 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 -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-omap3beagle.c | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 6e8a1b9..be8c4ec 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -58,7 +58,8 @@ - * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1 - * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0 - * C4 = GPIO173, GPIO172, GPIO171: 1 0 1 -- * XM = GPIO173, GPIO172, GPIO171: 0 0 0 -+ * XMA = GPIO173, GPIO172, GPIO171: 0 0 0 -+ * XMB = GPIO173, GPIO172, GPIO171: 0 0 1 - */ - enum { - OMAP3BEAGLE_BOARD_UNKN = 0, -@@ -117,7 +118,11 @@ static void __init omap3_beagle_init_rev(void) - omap3_beagle_version = OMAP3BEAGLE_BOARD_C4; - break; - case 0: -- printk(KERN_INFO "OMAP3 Beagle Rev: xM\n"); -+ printk(KERN_INFO "OMAP3 Beagle Rev: xM A\n"); -+ omap3_beagle_version = OMAP3BEAGLE_BOARD_XM; -+ break; -+ case 1: -+ printk(KERN_INFO "OMAP3 Beagle Rev: xM B\n"); - omap3_beagle_version = OMAP3BEAGLE_BOARD_XM; - break; - default: --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch b/recipes-bsp/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch new file mode 100644 index 0000000000..1808a8611f --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0002-omap3-beaglexm-fix-DVI-reset-GPIO.patch @@ -0,0 +1,48 @@ +From e1dd1afba99853083da545f632a1f7c6899ae379 Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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@ti.com: split up, added descriptive changelogs] +Signed-off-by: Nishanth Menon +Signed-off-by: Koen Kooi +Signed-off-by: Tony Lindgren +--- + 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-bsp/linux/linux-omap/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch b/recipes-bsp/linux/linux-omap/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch deleted file mode 100644 index dcbf910a4d..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 116a1ffd21e520b0a6c7a91576605bc6151138cb Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Wed, 6 Oct 2010 10:19:34 +0200 -Subject: [PATCH 03/26] 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 ---- - arch/arm/mach-omap2/board-omap3beagle.c | 142 ++++++++++++++++++++++++++++++- - 1 files changed, 139 insertions(+), 3 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index be8c4ec..495be15 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -143,6 +144,92 @@ fail0: - return; - } - -+char expansionboard_name[16]; -+ -+#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE) -+ -+#include -+#include -+ -+#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 -+#include -+ -+#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157 -+ -+static struct omap2_mcspi_device_config ks8851_spi_chip_info = { -+ .turbo_mode = 0, -+ .single_channel = 1, /* 0: slave, 1: master */ -+}; -+ -+static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = { -+ { -+ .modalias = "ks8851", -+ .bus_num = 4, -+ .chip_select = 0, -+ .max_speed_hz = 36000000, -+ .controller_data = &ks8851_spi_chip_info, -+ }, -+}; -+ -+static void __init omap3beagle_ks8851_init(void) -+{ -+ if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) && -+ (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) { -+ gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0); -+ omap3beagle_zippy2_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_KS8851_IRQ); -+ set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING); -+ } else { -+ printk(KERN_ERR "could not obtain gpio for KS8851_IRQ\n"); -+ return; -+ } -+ -+ spi_register_board_info(omap3beagle_zippy2_spi_board_info, -+ ARRAY_SIZE(omap3beagle_zippy2_spi_board_info)); -+} -+ -+#else -+static inline void __init omap3beagle_ks8851_init(void) { return; } -+#endif -+ - static struct mtd_partition omap3beagle_nand_partitions[] = { - /* All the partition sizes are listed in terms of NAND block size */ - { -@@ -262,6 +349,12 @@ static struct omap2_hsmmc_info mmc[] = { - .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, - .gpio_wp = 29, - }, -+ { -+ .mmc = 2, -+ .caps = MMC_CAP_4_BIT_DATA, -+ .transceiver = true, -+ .ocr_mask = 0x00100000, /* 3.3V */ -+ }, - {} /* Terminator */ - }; - -@@ -431,7 +524,7 @@ static struct twl4030_platform_data beagle_twldata = { - .vpll2 = &beagle_vpll2, - }; - --static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = { -+static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = { - { - I2C_BOARD_INFO("twl4030", 0x48), - .flags = I2C_CLIENT_WAKE, -@@ -446,10 +539,24 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { - }, - }; - -+#if defined(CONFIG_RTC_DRV_DS1307) || \ -+ defined(CONFIG_RTC_DRV_DS1307_MODULE) -+ -+static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = { -+ { -+ I2C_BOARD_INFO("ds1307", 0x68), -+ }, -+}; -+#else -+static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {}; -+#endif -+ - static int __init omap3_beagle_i2c_init(void) - { -- omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo, -- ARRAY_SIZE(beagle_i2c_boardinfo)); -+ omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo, -+ ARRAY_SIZE(beagle_i2c1_boardinfo)); -+ omap_register_i2c_bus(2, 400, beagle_i2c2_boardinfo, -+ ARRAY_SIZE(beagle_i2c2_boardinfo)); - /* Bus 3 is attached to the DVI port where devices like the pico DLP - * projector don't work reliably with 400kHz */ - omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom)); -@@ -583,6 +690,15 @@ static struct omap_musb_board_data musb_board_data = { - .power = 100, - }; - -+static int __init expansionboard_setup(char *str) -+{ -+ if (!str) -+ return -EINVAL; -+ strncpy(expansionboard_name, str, 16); -+ printk(KERN_INFO "Beagle expansionboard: %s\n", expansionboard_name); -+ return 0; -+} -+ - static void __init omap3_beagle_init(void) - { - omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); -@@ -597,6 +713,24 @@ static void __init omap3_beagle_init(void) - /* REVISIT leave DVI powered down until it's needed ... */ - gpio_direction_output(170, true); - -+ if(!strcmp(expansionboard_name, "zippy")) -+ { -+ printk(KERN_INFO "Beagle expansionboard: initializing enc28j60\n"); -+ omap3beagle_enc28j60_init(); -+ printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n"); -+ mmc[1].gpio_wp = 141; -+ mmc[1].gpio_cd = 162; -+ } -+ -+ if(!strcmp(expansionboard_name, "zippy2")) -+ { -+ printk(KERN_INFO "Beagle expansionboard: initializing ks_8851\n"); -+ omap3beagle_ks8851_init(); -+ printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n"); -+ mmc[1].gpio_wp = 141; -+ mmc[1].gpio_cd = 162; -+ } -+ - usb_musb_init(&musb_board_data); - usb_ehci_init(&ehci_pdata); - omap3beagle_flash_init(); -@@ -608,6 +742,8 @@ static void __init omap3_beagle_init(void) - beagle_display_init(); - } - -+early_param("buddy", expansionboard_setup); -+ - MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") - /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ - .boot_params = 0x80000100, --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch b/recipes-bsp/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch new file mode 100644 index 0000000000..90446e4047 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0003-omap3-beaglexm-fix-power-on-of-DVI.patch @@ -0,0 +1,94 @@ +From 4004c3e68b973f4cb736048b1e90ee3b511f5865 Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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@ti.com: split up, added descriptive changelogs] +Signed-off-by: Nishanth Menon +Signed-off-by: Koen Kooi +Signed-off-by: Tony Lindgren +--- + 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-bsp/linux/linux-omap/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch b/recipes-bsp/linux/linux-omap/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch deleted file mode 100644 index 41af353473..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 64215e5d75084b49c490d2aad78c8d3702e6c419 Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Sun, 5 Dec 2010 13:25:00 +0100 -Subject: [PATCH 04/26] 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 ---- - arch/arm/mach-omap2/board-omap3beagle.c | 31 +++++++++++++++++++++++++++++++ - 1 files changed, 31 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 495be15..34f2132 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -731,6 +731,37 @@ static void __init omap3_beagle_init(void) - mmc[1].gpio_cd = 162; - } - -+ if(!strcmp(expansionboard_name, "trainer")) -+ { -+ printk(KERN_INFO "Beagle expansionboard: exporting GPIOs 130-141,162 to userspace\n"); -+ gpio_request(130, "sysfs"); -+ gpio_export(130, 1); -+ gpio_request(131, "sysfs"); -+ gpio_export(131, 1); -+ gpio_request(132, "sysfs"); -+ gpio_export(132, 1); -+ gpio_request(133, "sysfs"); -+ gpio_export(133, 1); -+ gpio_request(134, "sysfs"); -+ gpio_export(134, 1); -+ gpio_request(135, "sysfs"); -+ gpio_export(135, 1); -+ gpio_request(136, "sysfs"); -+ gpio_export(136, 1); -+ gpio_request(137, "sysfs"); -+ gpio_export(137, 1); -+ gpio_request(138, "sysfs"); -+ gpio_export(138, 1); -+ gpio_request(139, "sysfs"); -+ gpio_export(139, 1); -+ gpio_request(140, "sysfs"); -+ gpio_export(140, 1); -+ gpio_request(141, "sysfs"); -+ gpio_export(141, 1); -+ gpio_request(162, "sysfs"); -+ gpio_export(162, 1); -+ } -+ - usb_musb_init(&musb_board_data); - usb_ehci_init(&ehci_pdata); - omap3beagle_flash_init(); --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch b/recipes-bsp/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch new file mode 100644 index 0000000000..43371618dc --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0004-omap-Beagle-detect-new-xM-revision-B.patch @@ -0,0 +1,43 @@ +From 24b7a742b27ed2c05c6bc7800b0299a77af37a82 Mon Sep 17 00:00:00 2001 +From: Robert Nelson +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 +Signed-off-by: Koen Kooi +--- + 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-bsp/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch b/recipes-bsp/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch new file mode 100644 index 0000000000..21d8d8fe37 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0005-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch @@ -0,0 +1,219 @@ +From a564ca287c115928a9e7febf7c99bbab582290e6 Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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 +--- + 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 + #include + #include ++#include + #include + #include + +@@ -143,6 +144,92 @@ fail0: + return; + } + ++char expansionboard_name[16]; ++ ++#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE) ++ ++#include ++#include ++ ++#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 ++#include ++ ++#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-bsp/linux/linux-omap/base/0005-modedb.c-add-proper-720p60-mode.patch b/recipes-bsp/linux/linux-omap/base/0005-modedb.c-add-proper-720p60-mode.patch deleted file mode 100644 index 34e09c02a6..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0005-modedb.c-add-proper-720p60-mode.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 84b16387417976abbba2dd1608147ab0c7692093 Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Mon, 8 Mar 2010 14:38:31 +0100 -Subject: [PATCH 05/26] modedb.c: add proper 720p60 mode - -Signed-off-by: Koen Kooi ---- - drivers/video/modedb.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c -index de450c1..1cd8153 100644 ---- a/drivers/video/modedb.c -+++ b/drivers/video/modedb.c -@@ -46,6 +46,10 @@ static const struct fb_videomode modedb[] = { - NULL, 60, 640, 480, 39721, 40, 24, 32, 11, 96, 2, - 0, FB_VMODE_NONINTERLACED - }, { -+ /* 1280x720 @ 60 Hz, 45 kHz hsync, CEA 681-E Format 4 */ -+ "hd720", 60, 1280, 720, 13468, 220, 110, 20, 5, 40, 5, -+ 0, FB_VMODE_NONINTERLACED -+ }, { - /* 800x600 @ 56 Hz, 35.15 kHz hsync */ - NULL, 56, 800, 600, 27777, 128, 24, 22, 1, 72, 2, - 0, FB_VMODE_NONINTERLACED --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch b/recipes-bsp/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch new file mode 100644 index 0000000000..3c8547a1da --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0006-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch @@ -0,0 +1,57 @@ +From 0c2c9a4d7fd299444b66e08aa34acc868261003f Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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 +--- + 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-bsp/linux/linux-omap/base/0006-mmc-don-t-display-single-block-read-console-messages.patch b/recipes-bsp/linux/linux-omap/base/0006-mmc-don-t-display-single-block-read-console-messages.patch deleted file mode 100644 index 25aa9f867a..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0006-mmc-don-t-display-single-block-read-console-messages.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 11aba6aa87fc0d7c452324d002578aa54d3c9a6b Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Mon, 4 Jan 2010 19:20:25 -0800 -Subject: [PATCH 06/26] mmc: don't display single block read console messages - -mmc: don't display single block read console messages ---- - drivers/mmc/card/block.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c -index 217f820..b0b68cc 100644 ---- a/drivers/mmc/card/block.c -+++ b/drivers/mmc/card/block.c -@@ -434,8 +434,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *req) - if (brq.cmd.error || brq.data.error || brq.stop.error) { - if (brq.data.blocks > 1 && rq_data_dir(req) == READ) { - /* Redo read one sector at a time */ -- printk(KERN_WARNING "%s: retrying using single " -- "block read\n", req->rq_disk->disk_name); -+ /* printk(KERN_WARNING "%s: retrying using single " -+ "block read\n", req->rq_disk->disk_name); */ - disable_multi = 1; - continue; - } --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch b/recipes-bsp/linux/linux-omap/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch deleted file mode 100644 index 9f3623142b..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 7f3e88e66f1dd872ed087372d6cd81fce5d96d24 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Mon, 26 Apr 2010 11:17:26 -0700 -Subject: [PATCH 07/26] MTD: silence ecc errors on mtdblock0 - -mtdblock0 is the x-load partition, which uses hw ecc -this confuses linux, which uses sw ecc -this patch silences ecc error messages when linux peeks into mtdblock0 -* not for upstream submission * ---- - block/blk-core.c | 7 ++++--- - drivers/mtd/nand/nand_ecc.c | 2 +- - fs/buffer.c | 3 ++- - 3 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/block/blk-core.c b/block/blk-core.c -index 4ce953f..1ef9a01 100644 ---- a/block/blk-core.c -+++ b/block/blk-core.c -@@ -2028,9 +2028,10 @@ bool blk_update_request(struct request *req, int error, unsigned int nr_bytes) - - if (error && req->cmd_type == REQ_TYPE_FS && - !(req->cmd_flags & REQ_QUIET)) { -- printk(KERN_ERR "end_request: I/O error, dev %s, sector %llu\n", -- req->rq_disk ? req->rq_disk->disk_name : "?", -- (unsigned long long)blk_rq_pos(req)); -+ if (req->rq_disk && (strcmp(req->rq_disk->disk_name, "mtdblock0") != 0)) -+ printk(KERN_ERR "end_request: I/O error, dev %s, sector %llu\n", -+ req->rq_disk ? req->rq_disk->disk_name : "?", -+ (unsigned long long)blk_rq_pos(req)); - } - - blk_account_io_completion(req, nr_bytes); -diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c -index 271b8e7..5924ba7 100644 ---- a/drivers/mtd/nand/nand_ecc.c -+++ b/drivers/mtd/nand/nand_ecc.c -@@ -507,7 +507,7 @@ int __nand_correct_data(unsigned char *buf, - if ((bitsperbyte[b0] + bitsperbyte[b1] + bitsperbyte[b2]) == 1) - return 1; /* error in ecc data; no action needed */ - -- printk(KERN_ERR "uncorrectable error : "); -+// printk(KERN_ERR "uncorrectable error : "); - return -1; - } - EXPORT_SYMBOL(__nand_correct_data); -diff --git a/fs/buffer.c b/fs/buffer.c -index 5930e38..06a00d5 100644 ---- a/fs/buffer.c -+++ b/fs/buffer.c -@@ -114,7 +114,8 @@ static int quiet_error(struct buffer_head *bh) - static void buffer_io_error(struct buffer_head *bh) - { - char b[BDEVNAME_SIZE]; -- printk(KERN_ERR "Buffer I/O error on device %s, logical block %Lu\n", -+ if (strcmp(bdevname(bh->b_bdev, b), "mtdblock0") != 0) -+ printk(KERN_ERR "Buffer I/O error on device %s, logical block %Lu\n", - bdevname(bh->b_bdev, b), - (unsigned long long)bh->b_blocknr); - } --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch b/recipes-bsp/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch new file mode 100644 index 0000000000..575ee6f5b5 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0007-modedb.c-add-proper-720p60-mode.patch @@ -0,0 +1,28 @@ +From ed12d865de851c5aed3ae7685337551b831bb045 Mon Sep 17 00:00:00 2001 +From: Koen Kooi +Date: Mon, 8 Mar 2010 14:38:31 +0100 +Subject: [PATCH 07/28] modedb.c: add proper 720p60 mode + +Signed-off-by: Koen Kooi +--- + drivers/video/modedb.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c +index de450c1..1cd8153 100644 +--- a/drivers/video/modedb.c ++++ b/drivers/video/modedb.c +@@ -46,6 +46,10 @@ static const struct fb_videomode modedb[] = { + NULL, 60, 640, 480, 39721, 40, 24, 32, 11, 96, 2, + 0, FB_VMODE_NONINTERLACED + }, { ++ /* 1280x720 @ 60 Hz, 45 kHz hsync, CEA 681-E Format 4 */ ++ "hd720", 60, 1280, 720, 13468, 220, 110, 20, 5, 40, 5, ++ 0, FB_VMODE_NONINTERLACED ++ }, { + /* 800x600 @ 56 Hz, 35.15 kHz hsync */ + NULL, 56, 800, 600, 27777, 128, 24, 22, 1, 72, 2, + 0, FB_VMODE_NONINTERLACED +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0008-Miracle-patch.patch b/recipes-bsp/linux/linux-omap/base/0008-Miracle-patch.patch deleted file mode 100644 index 54e3690ab6..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0008-Miracle-patch.patch +++ /dev/null @@ -1,504 +0,0 @@ -From d7dbe93075a4e7b5c0fa2a2b745440a53ad26a72 Mon Sep 17 00:00:00 2001 -From: Mike Galbraith -Date: Fri, 19 Nov 2010 12:52:42 +0100 -Subject: [PATCH 08/26] 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 -> 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 ---- - 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 -@@ -605,11 +606,14 @@ static inline int cpu_of(struct rq *rq) - */ - static inline struct task_group *task_group(struct task_struct *p) - { -+ struct task_group *tg; - struct cgroup_subsys_state *css; - - css = task_subsys_state_check(p, cpu_cgroup_subsys_id, - lockdep_is_held(&task_rq(p)->lock)); -- return container_of(css, struct task_group, css); -+ tg = container_of(css, struct task_group, css); -+ -+ return autogroup_task_group(p, tg); - } - - /* Change a task's cfs_rq and parent entity if it moves across CPUs/groups */ -@@ -2063,6 +2067,7 @@ static void update_rq_clock_task(struct rq *rq, s64 delta) - #include "sched_idletask.c" - #include "sched_fair.c" - #include "sched_rt.c" -+#include "sched_autogroup.c" - #include "sched_stoptask.c" - #ifdef CONFIG_SCHED_DEBUG - # include "sched_debug.c" -@@ -8164,7 +8169,7 @@ void __init sched_init(void) - #ifdef CONFIG_CGROUP_SCHED - list_add(&init_task_group.list, &task_groups); - INIT_LIST_HEAD(&init_task_group.children); -- -+ autogroup_init(&init_task); - #endif /* CONFIG_CGROUP_SCHED */ - - #if defined CONFIG_FAIR_GROUP_SCHED && defined CONFIG_SMP -@@ -8694,15 +8699,11 @@ void sched_destroy_group(struct task_group *tg) - /* change task's runqueue when it moves between groups. - * The caller of this function should have put the task in its new group - * by now. This function just updates tsk->se.cfs_rq and tsk->se.parent to -- * reflect its new group. -+ * reflect its new group. Called with the runqueue lock held. - */ --void sched_move_task(struct task_struct *tsk) -+void __sched_move_task(struct task_struct *tsk, struct rq *rq) - { - int on_rq, running; -- unsigned long flags; -- struct rq *rq; -- -- rq = task_rq_lock(tsk, &flags); - - running = task_current(rq, tsk); - on_rq = tsk->se.on_rq; -@@ -8723,7 +8724,15 @@ void sched_move_task(struct task_struct *tsk) - tsk->sched_class->set_curr_task(rq); - if (on_rq) - enqueue_task(rq, tsk, 0); -+} - -+void sched_move_task(struct task_struct *tsk) -+{ -+ struct rq *rq; -+ unsigned long flags; -+ -+ rq = task_rq_lock(tsk, &flags); -+ __sched_move_task(tsk, rq); - task_rq_unlock(rq, &flags); - } - #endif /* CONFIG_CGROUP_SCHED */ -diff --git a/kernel/sched_autogroup.c b/kernel/sched_autogroup.c -new file mode 100644 -index 0000000..62f1d0e ---- /dev/null -+++ b/kernel/sched_autogroup.c -@@ -0,0 +1,140 @@ -+#ifdef CONFIG_SCHED_AUTOGROUP -+ -+unsigned int __read_mostly sysctl_sched_autogroup_enabled = 1; -+ -+struct autogroup { -+ struct kref kref; -+ struct task_group *tg; -+}; -+ -+static struct autogroup autogroup_default; -+ -+static void autogroup_init(struct task_struct *init_task) -+{ -+ autogroup_default.tg = &init_task_group; -+ kref_init(&autogroup_default.kref); -+ init_task->signal->autogroup = &autogroup_default; -+} -+ -+static inline void autogroup_destroy(struct kref *kref) -+{ -+ struct autogroup *ag = container_of(kref, struct autogroup, kref); -+ struct task_group *tg = ag->tg; -+ -+ kfree(ag); -+ sched_destroy_group(tg); -+} -+ -+static inline void autogroup_kref_put(struct autogroup *ag) -+{ -+ kref_put(&ag->kref, autogroup_destroy); -+} -+ -+static inline struct autogroup *autogroup_kref_get(struct autogroup *ag) -+{ -+ kref_get(&ag->kref); -+ return ag; -+} -+ -+static inline struct autogroup *autogroup_create(void) -+{ -+ struct autogroup *ag = kmalloc(sizeof(*ag), GFP_KERNEL); -+ -+ if (!ag) -+ goto out_fail; -+ -+ ag->tg = sched_create_group(&init_task_group); -+ kref_init(&ag->kref); -+ -+ if (!(IS_ERR(ag->tg))) -+ return ag; -+ -+out_fail: -+ if (ag) { -+ kfree(ag); -+ WARN_ON(1); -+ } else -+ WARN_ON(1); -+ -+ return autogroup_kref_get(&autogroup_default); -+} -+ -+static inline struct task_group * -+autogroup_task_group(struct task_struct *p, struct task_group *tg) -+{ -+ int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); -+ -+ enabled &= (tg == &root_task_group); -+ enabled &= (p->sched_class == &fair_sched_class); -+ enabled &= (!(p->flags & PF_EXITING)); -+ -+ if (enabled) -+ return p->signal->autogroup->tg; -+ -+ return tg; -+} -+ -+static void -+autogroup_move_group(struct task_struct *p, struct autogroup *ag) -+{ -+ struct autogroup *prev; -+ struct task_struct *t; -+ struct rq *rq; -+ unsigned long flags; -+ -+ rq = task_rq_lock(p, &flags); -+ prev = p->signal->autogroup; -+ if (prev == ag) { -+ task_rq_unlock(rq, &flags); -+ return; -+ } -+ -+ p->signal->autogroup = autogroup_kref_get(ag); -+ __sched_move_task(p, rq); -+ task_rq_unlock(rq, &flags); -+ -+ rcu_read_lock(); -+ list_for_each_entry_rcu(t, &p->thread_group, thread_group) { -+ sched_move_task(t); -+ } -+ rcu_read_unlock(); -+ -+ autogroup_kref_put(prev); -+} -+ -+void sched_autogroup_create_attach(struct task_struct *p) -+{ -+ struct autogroup *ag = autogroup_create(); -+ -+ autogroup_move_group(p, ag); -+ /* drop extra refrence added by autogroup_create() */ -+ autogroup_kref_put(ag); -+} -+EXPORT_SYMBOL(sched_autogroup_create_attach); -+ -+/* currently has no users */ -+void sched_autogroup_detach(struct task_struct *p) -+{ -+ autogroup_move_group(p, &autogroup_default); -+} -+EXPORT_SYMBOL(sched_autogroup_detach); -+ -+void sched_autogroup_fork(struct signal_struct *sig) -+{ -+ sig->autogroup = autogroup_kref_get(current->signal->autogroup); -+} -+ -+void sched_autogroup_exit(struct signal_struct *sig) -+{ -+ autogroup_kref_put(sig->autogroup); -+} -+ -+static int __init setup_autogroup(char *str) -+{ -+ sysctl_sched_autogroup_enabled = 0; -+ -+ return 1; -+} -+ -+__setup("noautogroup", setup_autogroup); -+#endif -diff --git a/kernel/sched_autogroup.h b/kernel/sched_autogroup.h -new file mode 100644 -index 0000000..6048f5d ---- /dev/null -+++ b/kernel/sched_autogroup.h -@@ -0,0 +1,18 @@ -+#ifdef CONFIG_SCHED_AUTOGROUP -+ -+static void __sched_move_task(struct task_struct *tsk, struct rq *rq); -+ -+static inline struct task_group * -+autogroup_task_group(struct task_struct *p, struct task_group *tg); -+ -+#else /* !CONFIG_SCHED_AUTOGROUP */ -+ -+static inline void autogroup_init(struct task_struct *init_task) { } -+ -+static inline struct task_group * -+autogroup_task_group(struct task_struct *p, struct task_group *tg) -+{ -+ return tg; -+} -+ -+#endif /* CONFIG_SCHED_AUTOGROUP */ -diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index 5abfa15..b162f65 100644 ---- a/kernel/sysctl.c -+++ b/kernel/sysctl.c -@@ -382,6 +382,17 @@ static struct ctl_table kern_table[] = { - .mode = 0644, - .proc_handler = proc_dointvec, - }, -+#ifdef CONFIG_SCHED_AUTOGROUP -+ { -+ .procname = "sched_autogroup_enabled", -+ .data = &sysctl_sched_autogroup_enabled, -+ .maxlen = sizeof(unsigned int), -+ .mode = 0644, -+ .proc_handler = proc_dointvec, -+ .extra1 = &zero, -+ .extra2 = &one, -+ }, -+#endif - #ifdef CONFIG_PROVE_LOCKING - { - .procname = "prove_locking", --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch b/recipes-bsp/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch new file mode 100644 index 0000000000..7e7764127b --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0008-mmc-don-t-display-single-block-read-console-messages.patch @@ -0,0 +1,28 @@ +From 13235700be3729d183143bdb75ee58742372d6aa Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0009-ARM-OMAP-add-omap_rev_-macros.patch b/recipes-bsp/linux/linux-omap/base/0009-ARM-OMAP-add-omap_rev_-macros.patch deleted file mode 100644 index 12b3f5cba6..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0009-ARM-OMAP-add-omap_rev_-macros.patch +++ /dev/null @@ -1,81 +0,0 @@ -From d378376ed64b5506c352b33085baeb21013e55f2 Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Tue, 23 Nov 2010 11:40:20 +0100 -Subject: [PATCH 09/26] 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 ---- - arch/arm/plat-omap/include/plat/cpu.h | 55 +++++++++++++++++++++++++++++++++ - 1 files changed, 55 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h -index 3fd8b40..1a8c347 100644 ---- a/arch/arm/plat-omap/include/plat/cpu.h -+++ b/arch/arm/plat-omap/include/plat/cpu.h -@@ -394,6 +394,61 @@ IS_OMAP_TYPE(3517, 0x3517) - #define OMAP4430_REV_ES2_0 0x44301044 - - /* -+ * Silicon revisions -+ */ -+#define OMAP_ES_1_0 0x00 -+#define OMAP_ES_2_0 0x10 -+#define OMAP_ES_2_1 0x20 -+#define OMAP_ES_3_0 0x30 -+#define OMAP_ES_3_1 0x40 -+ -+#define OMAP_REV_MASK 0x0000ff00 -+#define OMAP_REV_BITS ((omap_rev() & OMAP_REV_MASK) >> 8) -+ -+#define OMAP_REV_IS(revid) \ -+static inline u8 omap_rev_is_ ##revid (void) \ -+{ \ -+ return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0; \ -+} -+ -+#define OMAP_REV_LT(revid) \ -+static inline u8 omap_rev_lt_ ##revid (void) \ -+{ \ -+ return (OMAP_REV_BITS < OMAP_ES_ ##revid) ? 1 : 0; \ -+} -+ -+#define OMAP_REV_LE(revid) \ -+static inline u8 omap_rev_le_ ##revid (void) \ -+{ \ -+ return (OMAP_REV_BITS <= OMAP_ES_ ##revid) ? 1 : 0; \ -+} -+ -+#define OMAP_REV_GT(revid) \ -+static inline u8 omap_rev_gt_ ##revid (void) \ -+{ \ -+ return (OMAP_REV_BITS > OMAP_ES_ ##revid) ? 1 : 0; \ -+} -+ -+#define OMAP_REV_GE(revid) \ -+static inline u8 omap_rev_ge_ ##revid (void) \ -+{ \ -+ return (OMAP_REV_BITS >= OMAP_ES_ ##revid) ? 1 : 0; \ -+} -+ -+#define OMAP_REV_FUNCTIONS(revid) \ -+ OMAP_REV_IS(revid) \ -+ OMAP_REV_LT(revid) \ -+ OMAP_REV_LE(revid) \ -+ OMAP_REV_GT(revid) \ -+ OMAP_REV_GE(revid) -+ -+OMAP_REV_FUNCTIONS(1_0) -+OMAP_REV_FUNCTIONS(2_0) -+OMAP_REV_FUNCTIONS(2_1) -+OMAP_REV_FUNCTIONS(3_0) -+OMAP_REV_FUNCTIONS(3_1) -+ -+/* - * omap_chip bits - * - * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch b/recipes-bsp/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch new file mode 100644 index 0000000000..e665e23add --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0009-MTD-silence-ecc-errors-on-mtdblock0.patch @@ -0,0 +1,63 @@ +From 8b0c56b910811acd23c15bed273b3dbd959ef96a Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0010-Miracle-patch.patch b/recipes-bsp/linux/linux-omap/base/0010-Miracle-patch.patch new file mode 100644 index 0000000000..c5eba83d35 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0010-Miracle-patch.patch @@ -0,0 +1,504 @@ +From ce4f1f734efd638af01f1849ffffdc2746ad4a55 Mon Sep 17 00:00:00 2001 +From: Mike Galbraith +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 +> 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 +--- + 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 +@@ -605,11 +606,14 @@ static inline int cpu_of(struct rq *rq) + */ + static inline struct task_group *task_group(struct task_struct *p) + { ++ struct task_group *tg; + struct cgroup_subsys_state *css; + + css = task_subsys_state_check(p, cpu_cgroup_subsys_id, + lockdep_is_held(&task_rq(p)->lock)); +- return container_of(css, struct task_group, css); ++ tg = container_of(css, struct task_group, css); ++ ++ return autogroup_task_group(p, tg); + } + + /* Change a task's cfs_rq and parent entity if it moves across CPUs/groups */ +@@ -2063,6 +2067,7 @@ static void update_rq_clock_task(struct rq *rq, s64 delta) + #include "sched_idletask.c" + #include "sched_fair.c" + #include "sched_rt.c" ++#include "sched_autogroup.c" + #include "sched_stoptask.c" + #ifdef CONFIG_SCHED_DEBUG + # include "sched_debug.c" +@@ -8164,7 +8169,7 @@ void __init sched_init(void) + #ifdef CONFIG_CGROUP_SCHED + list_add(&init_task_group.list, &task_groups); + INIT_LIST_HEAD(&init_task_group.children); +- ++ autogroup_init(&init_task); + #endif /* CONFIG_CGROUP_SCHED */ + + #if defined CONFIG_FAIR_GROUP_SCHED && defined CONFIG_SMP +@@ -8694,15 +8699,11 @@ void sched_destroy_group(struct task_group *tg) + /* change task's runqueue when it moves between groups. + * The caller of this function should have put the task in its new group + * by now. This function just updates tsk->se.cfs_rq and tsk->se.parent to +- * reflect its new group. ++ * reflect its new group. Called with the runqueue lock held. + */ +-void sched_move_task(struct task_struct *tsk) ++void __sched_move_task(struct task_struct *tsk, struct rq *rq) + { + int on_rq, running; +- unsigned long flags; +- struct rq *rq; +- +- rq = task_rq_lock(tsk, &flags); + + running = task_current(rq, tsk); + on_rq = tsk->se.on_rq; +@@ -8723,7 +8724,15 @@ void sched_move_task(struct task_struct *tsk) + tsk->sched_class->set_curr_task(rq); + if (on_rq) + enqueue_task(rq, tsk, 0); ++} + ++void sched_move_task(struct task_struct *tsk) ++{ ++ struct rq *rq; ++ unsigned long flags; ++ ++ rq = task_rq_lock(tsk, &flags); ++ __sched_move_task(tsk, rq); + task_rq_unlock(rq, &flags); + } + #endif /* CONFIG_CGROUP_SCHED */ +diff --git a/kernel/sched_autogroup.c b/kernel/sched_autogroup.c +new file mode 100644 +index 0000000..62f1d0e +--- /dev/null ++++ b/kernel/sched_autogroup.c +@@ -0,0 +1,140 @@ ++#ifdef CONFIG_SCHED_AUTOGROUP ++ ++unsigned int __read_mostly sysctl_sched_autogroup_enabled = 1; ++ ++struct autogroup { ++ struct kref kref; ++ struct task_group *tg; ++}; ++ ++static struct autogroup autogroup_default; ++ ++static void autogroup_init(struct task_struct *init_task) ++{ ++ autogroup_default.tg = &init_task_group; ++ kref_init(&autogroup_default.kref); ++ init_task->signal->autogroup = &autogroup_default; ++} ++ ++static inline void autogroup_destroy(struct kref *kref) ++{ ++ struct autogroup *ag = container_of(kref, struct autogroup, kref); ++ struct task_group *tg = ag->tg; ++ ++ kfree(ag); ++ sched_destroy_group(tg); ++} ++ ++static inline void autogroup_kref_put(struct autogroup *ag) ++{ ++ kref_put(&ag->kref, autogroup_destroy); ++} ++ ++static inline struct autogroup *autogroup_kref_get(struct autogroup *ag) ++{ ++ kref_get(&ag->kref); ++ return ag; ++} ++ ++static inline struct autogroup *autogroup_create(void) ++{ ++ struct autogroup *ag = kmalloc(sizeof(*ag), GFP_KERNEL); ++ ++ if (!ag) ++ goto out_fail; ++ ++ ag->tg = sched_create_group(&init_task_group); ++ kref_init(&ag->kref); ++ ++ if (!(IS_ERR(ag->tg))) ++ return ag; ++ ++out_fail: ++ if (ag) { ++ kfree(ag); ++ WARN_ON(1); ++ } else ++ WARN_ON(1); ++ ++ return autogroup_kref_get(&autogroup_default); ++} ++ ++static inline struct task_group * ++autogroup_task_group(struct task_struct *p, struct task_group *tg) ++{ ++ int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled); ++ ++ enabled &= (tg == &root_task_group); ++ enabled &= (p->sched_class == &fair_sched_class); ++ enabled &= (!(p->flags & PF_EXITING)); ++ ++ if (enabled) ++ return p->signal->autogroup->tg; ++ ++ return tg; ++} ++ ++static void ++autogroup_move_group(struct task_struct *p, struct autogroup *ag) ++{ ++ struct autogroup *prev; ++ struct task_struct *t; ++ struct rq *rq; ++ unsigned long flags; ++ ++ rq = task_rq_lock(p, &flags); ++ prev = p->signal->autogroup; ++ if (prev == ag) { ++ task_rq_unlock(rq, &flags); ++ return; ++ } ++ ++ p->signal->autogroup = autogroup_kref_get(ag); ++ __sched_move_task(p, rq); ++ task_rq_unlock(rq, &flags); ++ ++ rcu_read_lock(); ++ list_for_each_entry_rcu(t, &p->thread_group, thread_group) { ++ sched_move_task(t); ++ } ++ rcu_read_unlock(); ++ ++ autogroup_kref_put(prev); ++} ++ ++void sched_autogroup_create_attach(struct task_struct *p) ++{ ++ struct autogroup *ag = autogroup_create(); ++ ++ autogroup_move_group(p, ag); ++ /* drop extra refrence added by autogroup_create() */ ++ autogroup_kref_put(ag); ++} ++EXPORT_SYMBOL(sched_autogroup_create_attach); ++ ++/* currently has no users */ ++void sched_autogroup_detach(struct task_struct *p) ++{ ++ autogroup_move_group(p, &autogroup_default); ++} ++EXPORT_SYMBOL(sched_autogroup_detach); ++ ++void sched_autogroup_fork(struct signal_struct *sig) ++{ ++ sig->autogroup = autogroup_kref_get(current->signal->autogroup); ++} ++ ++void sched_autogroup_exit(struct signal_struct *sig) ++{ ++ autogroup_kref_put(sig->autogroup); ++} ++ ++static int __init setup_autogroup(char *str) ++{ ++ sysctl_sched_autogroup_enabled = 0; ++ ++ return 1; ++} ++ ++__setup("noautogroup", setup_autogroup); ++#endif +diff --git a/kernel/sched_autogroup.h b/kernel/sched_autogroup.h +new file mode 100644 +index 0000000..6048f5d +--- /dev/null ++++ b/kernel/sched_autogroup.h +@@ -0,0 +1,18 @@ ++#ifdef CONFIG_SCHED_AUTOGROUP ++ ++static void __sched_move_task(struct task_struct *tsk, struct rq *rq); ++ ++static inline struct task_group * ++autogroup_task_group(struct task_struct *p, struct task_group *tg); ++ ++#else /* !CONFIG_SCHED_AUTOGROUP */ ++ ++static inline void autogroup_init(struct task_struct *init_task) { } ++ ++static inline struct task_group * ++autogroup_task_group(struct task_struct *p, struct task_group *tg) ++{ ++ return tg; ++} ++ ++#endif /* CONFIG_SCHED_AUTOGROUP */ +diff --git a/kernel/sysctl.c b/kernel/sysctl.c +index 5abfa15..b162f65 100644 +--- a/kernel/sysctl.c ++++ b/kernel/sysctl.c +@@ -382,6 +382,17 @@ static struct ctl_table kern_table[] = { + .mode = 0644, + .proc_handler = proc_dointvec, + }, ++#ifdef CONFIG_SCHED_AUTOGROUP ++ { ++ .procname = "sched_autogroup_enabled", ++ .data = &sysctl_sched_autogroup_enabled, ++ .maxlen = sizeof(unsigned int), ++ .mode = 0644, ++ .proc_handler = proc_dointvec, ++ .extra1 = &zero, ++ .extra2 = &one, ++ }, ++#endif + #ifdef CONFIG_PROVE_LOCKING + { + .procname = "prove_locking", +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch b/recipes-bsp/linux/linux-omap/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch deleted file mode 100644 index c190c1708e..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch +++ /dev/null @@ -1,31 +0,0 @@ -From b5e34d9e5b20b412686f84ea8f4e56245f7d5f7f Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Mon, 10 May 2010 20:44:09 -0700 -Subject: [PATCH 10/26] OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX - -Signed-off-by: Koen Kooi ---- - drivers/video/omap2/dss/dpi.c | 7 ++++++- - 1 files changed, 6 insertions(+), 1 deletions(-) - -diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c -index 960e977..23047b6 100644 ---- a/drivers/video/omap2/dss/dpi.c -+++ b/drivers/video/omap2/dss/dpi.c -@@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev) - - #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL - dss_clk_enable(DSS_CLK_FCK2); -- r = dsi_pll_init(dssdev, 0, 1); -+ -+ if (cpu_is_omap3630()) -+ r = dsi_pll_init(dssdev, 1, 1); -+ else -+ r = dsi_pll_init(dssdev, 0, 1); -+ - if (r) - goto err3; - #endif --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch b/recipes-bsp/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch new file mode 100644 index 0000000000..b89302bca7 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0011-ARM-OMAP-add-omap_rev_-macros.patch @@ -0,0 +1,81 @@ +From 8b34449d7eb89e1ae1c1c84f90ef5ea1e397787e Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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 +--- + arch/arm/plat-omap/include/plat/cpu.h | 55 +++++++++++++++++++++++++++++++++ + 1 files changed, 55 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h +index 3fd8b40..1a8c347 100644 +--- a/arch/arm/plat-omap/include/plat/cpu.h ++++ b/arch/arm/plat-omap/include/plat/cpu.h +@@ -394,6 +394,61 @@ IS_OMAP_TYPE(3517, 0x3517) + #define OMAP4430_REV_ES2_0 0x44301044 + + /* ++ * Silicon revisions ++ */ ++#define OMAP_ES_1_0 0x00 ++#define OMAP_ES_2_0 0x10 ++#define OMAP_ES_2_1 0x20 ++#define OMAP_ES_3_0 0x30 ++#define OMAP_ES_3_1 0x40 ++ ++#define OMAP_REV_MASK 0x0000ff00 ++#define OMAP_REV_BITS ((omap_rev() & OMAP_REV_MASK) >> 8) ++ ++#define OMAP_REV_IS(revid) \ ++static inline u8 omap_rev_is_ ##revid (void) \ ++{ \ ++ return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0; \ ++} ++ ++#define OMAP_REV_LT(revid) \ ++static inline u8 omap_rev_lt_ ##revid (void) \ ++{ \ ++ return (OMAP_REV_BITS < OMAP_ES_ ##revid) ? 1 : 0; \ ++} ++ ++#define OMAP_REV_LE(revid) \ ++static inline u8 omap_rev_le_ ##revid (void) \ ++{ \ ++ return (OMAP_REV_BITS <= OMAP_ES_ ##revid) ? 1 : 0; \ ++} ++ ++#define OMAP_REV_GT(revid) \ ++static inline u8 omap_rev_gt_ ##revid (void) \ ++{ \ ++ return (OMAP_REV_BITS > OMAP_ES_ ##revid) ? 1 : 0; \ ++} ++ ++#define OMAP_REV_GE(revid) \ ++static inline u8 omap_rev_ge_ ##revid (void) \ ++{ \ ++ return (OMAP_REV_BITS >= OMAP_ES_ ##revid) ? 1 : 0; \ ++} ++ ++#define OMAP_REV_FUNCTIONS(revid) \ ++ OMAP_REV_IS(revid) \ ++ OMAP_REV_LT(revid) \ ++ OMAP_REV_LE(revid) \ ++ OMAP_REV_GT(revid) \ ++ OMAP_REV_GE(revid) ++ ++OMAP_REV_FUNCTIONS(1_0) ++OMAP_REV_FUNCTIONS(2_0) ++OMAP_REV_FUNCTIONS(2_1) ++OMAP_REV_FUNCTIONS(3_0) ++OMAP_REV_FUNCTIONS(3_1) ++ ++/* + * omap_chip bits + * + * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch b/recipes-bsp/linux/linux-omap/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch deleted file mode 100644 index 391c01a615..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 7bd039c94c36e206ffeb521e2facab7dc9737eaf Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Mon, 20 Dec 2010 11:57:56 +0100 -Subject: [PATCH 11/26] omap3: beagleboard: add WIP support for beagleboardtoys WL12xx board - -Based on a patch by Luciano Coelho - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-omap3beagle.c | 68 +++++++++++++++++++++++++++++++ - 1 files changed, 68 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 34f2132..073276b 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -146,6 +146,67 @@ fail0: - - char expansionboard_name[16]; - -+#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE) -+#include -+#include -+ -+#define OMAP_BEAGLE_WLAN_EN_GPIO (139) -+#define OMAP_BEAGLE_WLAN_IRQ_GPIO (137) -+ -+struct wl12xx_platform_data omap_beagle_wlan_data __initdata = { -+ .irq = OMAP_GPIO_IRQ(OMAP_BEAGLE_WLAN_IRQ_GPIO), -+ .board_ref_clock = 2, /* 38.4 MHz */ -+}; -+ -+ static struct omap2_hsmmc_info mmcbbt[] = { -+ { -+ .mmc = 1, -+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, -+ .gpio_wp = 29, -+ }, -+ { -+ .name = "wl1271", -+ .mmc = 2, -+ .caps = MMC_CAP_4_BIT_DATA, -+ .gpio_wp = -EINVAL, -+ .gpio_cd = -EINVAL, -+ .nonremovable = true, -+ }, -+ {} /* Terminator */ -+ }; -+ -+static struct regulator_consumer_supply beagle_vmmc2_supply = { -+ .supply = "vmmc", -+ .dev_name = "mmci-omap-hs.1", -+}; -+ -+static struct regulator_init_data beagle_vmmc2 = { -+ .constraints = { -+ .valid_ops_mask = REGULATOR_CHANGE_STATUS, -+ }, -+ .num_consumer_supplies = 1, -+ .consumer_supplies = &beagle_vmmc2_supply, -+}; -+ -+static struct fixed_voltage_config beagle_vwlan = { -+ .supply_name = "vwl1271", -+ .microvolts = 1800000, /* 1.8V */ -+ .gpio = OMAP_BEAGLE_WLAN_EN_GPIO, -+ .startup_delay = 70000, /* 70ms */ -+ .enable_high = 1, -+ .enabled_at_boot = 0, -+ .init_data = &beagle_vmmc2, -+}; -+ -+static struct platform_device omap_vwlan_device = { -+ .name = "reg-fixed-voltage", -+ .id = 1, -+ .dev = { -+ .platform_data = &beagle_vwlan, -+ }, -+}; -+#endif -+ - #if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE) - - #include -@@ -382,7 +443,14 @@ static int beagle_twl_gpio_setup(struct device *dev, - } - /* gpio + 0 is "mmc0_cd" (input/IRQ) */ - mmc[0].gpio_cd = gpio + 0; -+#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE) -+ if(!strcmp(expansionboard_name, "fixme-beagletoy")) -+ omap2_hsmmc_init(mmcbbt); -+ else -+ omap2_hsmmc_init(mmc); -+#else - omap2_hsmmc_init(mmc); -+#endif - - /* link regulators to MMC adapters */ - beagle_vmmc1_supply.dev = mmc[0].dev; --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch b/recipes-bsp/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch new file mode 100644 index 0000000000..7413b5f8ba --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0012-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch @@ -0,0 +1,31 @@ +From cd8a01e55dc674bba0030b99bff4f58d587aaecd Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 +--- + drivers/video/omap2/dss/dpi.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c +index 960e977..23047b6 100644 +--- a/drivers/video/omap2/dss/dpi.c ++++ b/drivers/video/omap2/dss/dpi.c +@@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev) + + #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL + dss_clk_enable(DSS_CLK_FCK2); +- r = dsi_pll_init(dssdev, 0, 1); ++ ++ if (cpu_is_omap3630()) ++ r = dsi_pll_init(dssdev, 1, 1); ++ else ++ r = dsi_pll_init(dssdev, 0, 1); ++ + if (r) + goto err3; + #endif +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch b/recipes-bsp/linux/linux-omap/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch deleted file mode 100644 index e7c84adb20..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 9eb52cc853ca5aae2cf2b8c4df8ecfd3b666d560 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Tue, 15 Dec 2009 15:17:44 -0800 -Subject: [PATCH 12/26] drivers: net: smsc911x: return ENODEV if device is not found - -Signed-off-by: Steve Sakoman ---- - drivers/net/smsc911x.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c -index 64bfdae..ba2a00e 100644 ---- a/drivers/net/smsc911x.c -+++ b/drivers/net/smsc911x.c -@@ -2019,8 +2019,10 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) - } - - retval = smsc911x_init(dev); -- if (retval < 0) -+ if (retval < 0) { -+ retval = -ENODEV; - goto out_unmap_io_3; -+ } - - /* configure irq polarity and type before connecting isr */ - if (pdata->config.irq_polarity == SMSC911X_IRQ_POLARITY_ACTIVE_HIGH) --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch b/recipes-bsp/linux/linux-omap/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch deleted file mode 100644 index 7e49d72690..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 090cbb4e522ea0a7e31508435fa1852eecef2fea Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Tue, 15 Dec 2009 15:24:10 -0800 -Subject: [PATCH 13/26] drivers: input: touchscreen: ads7846: return ENODEV if device is not found - -Signed-off-by: Steve Sakoman ---- - drivers/input/touchscreen/ads7846.c | 13 ++++++++++--- - 1 files changed, 10 insertions(+), 3 deletions(-) - -diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c -index 14ea54b..c775e38 100644 ---- a/drivers/input/touchscreen/ads7846.c -+++ b/drivers/input/touchscreen/ads7846.c -@@ -1325,11 +1325,18 @@ static int __devinit ads7846_probe(struct spi_device *spi) - * the touchscreen, in case it's not connected. - */ - if (ts->model == 7845) -- ads7845_read12_ser(&spi->dev, PWRDOWN); -+ err = ads7845_read12_ser(&spi->dev, PWRDOWN); - else -- (void) ads7846_read12_ser(&spi->dev, -+ err = ads7846_read12_ser(&spi->dev, - READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON); - -+ /* if sample is all 0's or all 1's then there is no device on spi */ -+ if ( (err == 0x000) || (err == 0xfff)) { -+ dev_info(&spi->dev, "no device detected, test read result was 0x%08X\n", err); -+ err = -ENODEV; -+ goto err_free_irq; -+ } -+ - err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group); - if (err) - goto err_remove_hwmon; -@@ -1353,7 +1360,7 @@ static int __devinit ads7846_probe(struct spi_device *spi) - err_put_regulator: - regulator_put(ts->reg); - err_free_gpio: -- if (ts->gpio_pendown != -1) -+ if (!ts->get_pendown_state && ts->gpio_pendown != -1) - gpio_free(ts->gpio_pendown); - err_cleanup_filter: - if (ts->filter_cleanup) --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch b/recipes-bsp/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch new file mode 100644 index 0000000000..017a0248df --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0013-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch @@ -0,0 +1,102 @@ +From 92cbd878f5b92d915dadb5bed412eb013141fdfe Mon Sep 17 00:00:00 2001 +From: Koen Kooi +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 + +Signed-off-by: Koen Kooi +--- + arch/arm/mach-omap2/board-omap3beagle.c | 68 +++++++++++++++++++++++++++++++ + 1 files changed, 68 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 64a181e..f699701 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 ++#include ++ ++#define OMAP_BEAGLE_WLAN_EN_GPIO (139) ++#define OMAP_BEAGLE_WLAN_IRQ_GPIO (137) ++ ++struct wl12xx_platform_data omap_beagle_wlan_data __initdata = { ++ .irq = OMAP_GPIO_IRQ(OMAP_BEAGLE_WLAN_IRQ_GPIO), ++ .board_ref_clock = 2, /* 38.4 MHz */ ++}; ++ ++ static struct omap2_hsmmc_info mmcbbt[] = { ++ { ++ .mmc = 1, ++ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, ++ .gpio_wp = 29, ++ }, ++ { ++ .name = "wl1271", ++ .mmc = 2, ++ .caps = MMC_CAP_4_BIT_DATA, ++ .gpio_wp = -EINVAL, ++ .gpio_cd = -EINVAL, ++ .nonremovable = true, ++ }, ++ {} /* Terminator */ ++ }; ++ ++static struct regulator_consumer_supply beagle_vmmc2_supply = { ++ .supply = "vmmc", ++ .dev_name = "mmci-omap-hs.1", ++}; ++ ++static struct regulator_init_data beagle_vmmc2 = { ++ .constraints = { ++ .valid_ops_mask = REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &beagle_vmmc2_supply, ++}; ++ ++static struct fixed_voltage_config beagle_vwlan = { ++ .supply_name = "vwl1271", ++ .microvolts = 1800000, /* 1.8V */ ++ .gpio = OMAP_BEAGLE_WLAN_EN_GPIO, ++ .startup_delay = 70000, /* 70ms */ ++ .enable_high = 1, ++ .enabled_at_boot = 0, ++ .init_data = &beagle_vmmc2, ++}; ++ ++static struct platform_device omap_vwlan_device = { ++ .name = "reg-fixed-voltage", ++ .id = 1, ++ .dev = { ++ .platform_data = &beagle_vwlan, ++ }, ++}; ++#endif ++ + #if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE) + + #include +@@ -384,7 +445,14 @@ static int beagle_twl_gpio_setup(struct device *dev, + } + /* gpio + 0 is "mmc0_cd" (input/IRQ) */ + mmc[0].gpio_cd = gpio + 0; ++#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE) ++ if(!strcmp(expansionboard_name, "fixme-beagletoy")) ++ omap2_hsmmc_init(mmcbbt); ++ else ++ omap2_hsmmc_init(mmc); ++#else + omap2_hsmmc_init(mmc); ++#endif + + /* link regulators to MMC adapters */ + beagle_vmmc1_supply.dev = mmc[0].dev; +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch b/recipes-bsp/linux/linux-omap/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch deleted file mode 100644 index 37bf75ef1e..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 3afe141cc65d54db2bfc82683d7ac5e142d48dad Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Thu, 17 Dec 2009 12:45:20 -0800 -Subject: [PATCH 14/26] ASoC: enable audio capture by default for twl4030 - ---- - sound/soc/codecs/twl4030.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c -index cbebec6..430cd10 100644 ---- a/sound/soc/codecs/twl4030.c -+++ b/sound/soc/codecs/twl4030.c -@@ -56,8 +56,8 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = { - 0x00, /* REG_OPTION (0x2) */ - 0x00, /* REG_UNKNOWN (0x3) */ - 0x00, /* REG_MICBIAS_CTL (0x4) */ -- 0x00, /* REG_ANAMICL (0x5) */ -- 0x00, /* REG_ANAMICR (0x6) */ -+ 0x34, /* REG_ANAMICL (0x5) */ -+ 0x14, /* REG_ANAMICR (0x6) */ - 0x00, /* REG_AVADC_CTL (0x7) */ - 0x00, /* REG_ADCMICSEL (0x8) */ - 0x00, /* REG_DIGMIXING (0x9) */ --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch b/recipes-bsp/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch new file mode 100644 index 0000000000..2eac323ba1 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0014-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch @@ -0,0 +1,29 @@ +From a47bbc5c9742e4ce250ee3bfba62732f3fea40b7 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 +--- + drivers/net/smsc911x.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c +index 64bfdae..ba2a00e 100644 +--- a/drivers/net/smsc911x.c ++++ b/drivers/net/smsc911x.c +@@ -2019,8 +2019,10 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev) + } + + retval = smsc911x_init(dev); +- if (retval < 0) ++ if (retval < 0) { ++ retval = -ENODEV; + goto out_unmap_io_3; ++ } + + /* configure irq polarity and type before connecting isr */ + if (pdata->config.irq_polarity == SMSC911X_IRQ_POLARITY_ACTIVE_HIGH) +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0015-MFD-enable-madc-clock.patch b/recipes-bsp/linux/linux-omap/base/0015-MFD-enable-madc-clock.patch deleted file mode 100644 index 57619585d8..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0015-MFD-enable-madc-clock.patch +++ /dev/null @@ -1,51 +0,0 @@ -From f749aa37992fe966db530bd1d3ff00ea0eb8e13f Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Sat, 23 Jan 2010 06:26:54 -0800 -Subject: [PATCH 15/26] MFD: enable madc clock - ---- - drivers/mfd/twl-core.c | 8 ++++++++ - include/linux/i2c/twl.h | 1 + - 2 files changed, 9 insertions(+), 0 deletions(-) - -diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c -index 35275ba..5aa7358 100644 ---- a/drivers/mfd/twl-core.c -+++ b/drivers/mfd/twl-core.c -@@ -208,6 +208,11 @@ - - /* Few power values */ - #define R_CFG_BOOT 0x05 -+#define R_GPBR1 0x0C -+ -+/* MADC clock values for R_GPBR1 */ -+#define MADC_HFCLK_EN 0x80 -+#define DEFAULT_MADC_CLK_EN 0x10 - - /* some fields in R_CFG_BOOT */ - #define HFCLK_FREQ_19p2_MHZ (1 << 0) -@@ -929,6 +934,9 @@ static void clocks_init(struct device *dev, - - e |= unprotect_pm_master(); - /* effect->MADC+USB ck en */ -+ if (twl_has_madc()) -+ e |= twl_i2c_write_u8(TWL_MODULE_INTBR, -+ MADC_HFCLK_EN | DEFAULT_MADC_CLK_EN, R_GPBR1); - e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, ctrl, R_CFG_BOOT); - e |= protect_pm_master(); - -diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h -index c760991..cfdfdd3 100644 ---- a/include/linux/i2c/twl.h -+++ b/include/linux/i2c/twl.h -@@ -74,6 +74,7 @@ - - #define TWL_MODULE_USB TWL4030_MODULE_USB - #define TWL_MODULE_AUDIO_VOICE TWL4030_MODULE_AUDIO_VOICE -+#define TWL_MODULE_INTBR TWL4030_MODULE_INTBR - #define TWL_MODULE_PIH TWL4030_MODULE_PIH - #define TWL_MODULE_MADC TWL4030_MODULE_MADC - #define TWL_MODULE_MAIN_CHARGE TWL4030_MODULE_MAIN_CHARGE --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch b/recipes-bsp/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch new file mode 100644 index 0000000000..74691ab889 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0015-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch @@ -0,0 +1,47 @@ +From 713eb96dd137e1436198aa07094049ae0e0f9f1f Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 +--- + drivers/input/touchscreen/ads7846.c | 13 ++++++++++--- + 1 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c +index 14ea54b..c775e38 100644 +--- a/drivers/input/touchscreen/ads7846.c ++++ b/drivers/input/touchscreen/ads7846.c +@@ -1325,11 +1325,18 @@ static int __devinit ads7846_probe(struct spi_device *spi) + * the touchscreen, in case it's not connected. + */ + if (ts->model == 7845) +- ads7845_read12_ser(&spi->dev, PWRDOWN); ++ err = ads7845_read12_ser(&spi->dev, PWRDOWN); + else +- (void) ads7846_read12_ser(&spi->dev, ++ err = ads7846_read12_ser(&spi->dev, + READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON); + ++ /* if sample is all 0's or all 1's then there is no device on spi */ ++ if ( (err == 0x000) || (err == 0xfff)) { ++ dev_info(&spi->dev, "no device detected, test read result was 0x%08X\n", err); ++ err = -ENODEV; ++ goto err_free_irq; ++ } ++ + err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group); + if (err) + goto err_remove_hwmon; +@@ -1353,7 +1360,7 @@ static int __devinit ads7846_probe(struct spi_device *spi) + err_put_regulator: + regulator_put(ts->reg); + err_free_gpio: +- if (ts->gpio_pendown != -1) ++ if (!ts->get_pendown_state && ts->gpio_pendown != -1) + gpio_free(ts->gpio_pendown); + err_cleanup_filter: + if (ts->filter_cleanup) +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch b/recipes-bsp/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch new file mode 100644 index 0000000000..081aa5b929 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0016-ASoC-enable-audio-capture-by-default-for-twl4030.patch @@ -0,0 +1,27 @@ +From de63bf4fdf6c64e543c207792cb2d8ebcd089342 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0016-MFD-add-twl4030-madc-driver.patch b/recipes-bsp/linux/linux-omap/base/0016-MFD-add-twl4030-madc-driver.patch deleted file mode 100644 index 84aff8f2fc..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0016-MFD-add-twl4030-madc-driver.patch +++ /dev/null @@ -1,740 +0,0 @@ -From bd8ef0fcbab561b010735e12e18946da7a2d81f4 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Thu, 17 Dec 2009 14:19:34 -0800 -Subject: [PATCH 16/26] 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 -+ * -+ * 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 -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#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<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<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, -+ ®val, 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, -+ ®val, 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, -+ ®val, 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 -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * version 2 as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -+ * 02110-1301 USA -+ * -+ */ -+ -+#ifndef _TWL4030_MADC_H -+#define _TWL4030_MADC_H -+ -+struct twl4030_madc_conversion_method { -+ u8 sel; -+ u8 avg; -+ u8 rbase; -+ u8 ctrl; -+}; -+ -+#define TWL4030_MADC_MAX_CHANNELS 16 -+ -+struct twl4030_madc_request { -+ u16 channels; -+ u16 do_avg; -+ u16 method; -+ u16 type; -+ int active; -+ int result_pending; -+ int rbuf[TWL4030_MADC_MAX_CHANNELS]; -+ void (*func_cb)(int len, int channels, int *buf); -+}; -+ -+enum conversion_methods { -+ TWL4030_MADC_RT, -+ TWL4030_MADC_SW1, -+ TWL4030_MADC_SW2, -+ TWL4030_MADC_NUM_METHODS -+}; -+ -+enum sample_type { -+ TWL4030_MADC_WAIT, -+ TWL4030_MADC_IRQ_ONESHOT, -+ TWL4030_MADC_IRQ_REARM -+}; -+ -+#define TWL4030_MADC_CTRL1 0x00 -+#define TWL4030_MADC_CTRL2 0x01 -+ -+#define TWL4030_MADC_RTSELECT_LSB 0x02 -+#define TWL4030_MADC_SW1SELECT_LSB 0x06 -+#define TWL4030_MADC_SW2SELECT_LSB 0x0A -+ -+#define TWL4030_MADC_RTAVERAGE_LSB 0x04 -+#define TWL4030_MADC_SW1AVERAGE_LSB 0x08 -+#define TWL4030_MADC_SW2AVERAGE_LSB 0x0C -+ -+#define TWL4030_MADC_CTRL_SW1 0x12 -+#define TWL4030_MADC_CTRL_SW2 0x13 -+ -+#define TWL4030_MADC_RTCH0_LSB 0x17 -+#define TWL4030_MADC_GPCH0_LSB 0x37 -+ -+#define TWL4030_MADC_MADCON (1<<0) /* MADC power on */ -+#define TWL4030_MADC_BUSY (1<<0) /* MADC busy */ -+#define TWL4030_MADC_EOC_SW (1<<1) /* MADC conversion completion */ -+#define TWL4030_MADC_SW_START (1<<5) /* MADC SWx start conversion */ -+ -+#define TWL4030_MADC_ADCIN0 (1<<0) -+#define TWL4030_MADC_ADCIN1 (1<<1) -+#define TWL4030_MADC_ADCIN2 (1<<2) -+#define TWL4030_MADC_ADCIN3 (1<<3) -+#define TWL4030_MADC_ADCIN4 (1<<4) -+#define TWL4030_MADC_ADCIN5 (1<<5) -+#define TWL4030_MADC_ADCIN6 (1<<6) -+#define TWL4030_MADC_ADCIN7 (1<<7) -+#define TWL4030_MADC_ADCIN8 (1<<8) -+#define TWL4030_MADC_ADCIN9 (1<<9) -+#define TWL4030_MADC_ADCIN10 (1<<10) -+#define TWL4030_MADC_ADCIN11 (1<<11) -+#define TWL4030_MADC_ADCIN12 (1<<12) -+#define TWL4030_MADC_ADCIN13 (1<<13) -+#define TWL4030_MADC_ADCIN14 (1<<14) -+#define TWL4030_MADC_ADCIN15 (1<<15) -+ -+/* Fixed channels */ -+#define TWL4030_MADC_BTEMP TWL4030_MADC_ADCIN1 -+#define TWL4030_MADC_VBUS TWL4030_MADC_ADCIN8 -+#define TWL4030_MADC_VBKB TWL4030_MADC_ADCIN9 -+#define TWL4030_MADC_ICHG TWL4030_MADC_ADCIN10 -+#define TWL4030_MADC_VCHG TWL4030_MADC_ADCIN11 -+#define TWL4030_MADC_VBAT TWL4030_MADC_ADCIN12 -+ -+/* BCI related - XXX To be moved elsewhere */ -+#define TWL4030_BCI_BCICTL1 0x23 -+#define TWL4030_BCI_MESBAT (1<<1) -+#define TWL4030_BCI_TYPEN (1<<4) -+#define TWL4030_BCI_ITHEN (1<<3) -+ -+/* USB related - XXX To be moved elsewhere */ -+#define TWL4030_USB_CARKIT_ANA_CTRL 0xBB -+#define TWL4030_USB_SEL_MADC_MCPC (1<<3) -+ -+#define TWL4030_MADC_IOC_MAGIC '`' -+#define TWL4030_MADC_IOCX_ADC_RAW_READ _IO(TWL4030_MADC_IOC_MAGIC, 0) -+ -+struct twl4030_madc_user_parms { -+ int channel; -+ int average; -+ int status; -+ u16 result; -+}; -+ -+int twl4030_madc_conversion(struct twl4030_madc_request *conv); -+ -+#endif --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch b/recipes-bsp/linux/linux-omap/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch deleted file mode 100644 index fe1f651b71..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch +++ /dev/null @@ -1,32 +0,0 @@ -From e8f9b322f40b10dbd947281203411c9b0c9cb458 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Thu, 17 Dec 2009 14:27:15 -0800 -Subject: [PATCH 17/26] ARM: OMAP: Add twl4030 madc support to Overo - ---- - arch/arm/mach-omap2/board-overo.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c -index cb26e5d..17f066a 100644 ---- a/arch/arm/mach-omap2/board-overo.c -+++ b/arch/arm/mach-omap2/board-overo.c -@@ -369,10 +369,15 @@ static struct twl4030_codec_data overo_codec_data = { - - /* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ - -+static struct twl4030_madc_platform_data overo_madc_data = { -+ .irq_line = 1, -+}; -+ - static struct twl4030_platform_data overo_twldata = { - .irq_base = TWL4030_IRQ_BASE, - .irq_end = TWL4030_IRQ_END, - .gpio = &overo_gpio_data, -+ .madc = &overo_madc_data, - .usb = &overo_usb_data, - .codec = &overo_codec_data, - .vmmc1 = &overo_vmmc1, --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch b/recipes-bsp/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch new file mode 100644 index 0000000000..2f3d1a4318 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0017-MFD-enable-madc-clock.patch @@ -0,0 +1,51 @@ +From 18934b05f81025c1254d64c1774832e95187cbd9 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch b/recipes-bsp/linux/linux-omap/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch deleted file mode 100644 index 2960c4b49a..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d37c0152c00ea15b488b2274544dcb30758fb8ca Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Thu, 17 Dec 2009 14:32:36 -0800 -Subject: [PATCH 18/26] ARM: OMAP: Add twl4030 madc support to Beagle - ---- - arch/arm/mach-omap2/board-omap3beagle.c | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 073276b..781844c 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -578,6 +578,10 @@ static struct twl4030_codec_data beagle_codec_data = { - .audio = &beagle_audio_data, - }; - -+static struct twl4030_madc_platform_data beagle_madc_data = { -+ .irq_line = 1, -+}; -+ - static struct twl4030_platform_data beagle_twldata = { - .irq_base = TWL4030_IRQ_BASE, - .irq_end = TWL4030_IRQ_END, -@@ -586,6 +590,7 @@ static struct twl4030_platform_data beagle_twldata = { - .usb = &beagle_usb_data, - .gpio = &beagle_gpio_data, - .codec = &beagle_codec_data, -+ .madc = &beagle_madc_data, - .vmmc1 = &beagle_vmmc1, - .vsim = &beagle_vsim, - .vdac = &beagle_vdac, --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch b/recipes-bsp/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch new file mode 100644 index 0000000000..a55136dbed --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0018-MFD-add-twl4030-madc-driver.patch @@ -0,0 +1,740 @@ +From 562dc52ebe3df1e5d23416e78306db7c568dc427 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#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<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<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, ++ ®val, 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, ++ ®val, 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, ++ ®val, 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 ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * version 2 as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ * ++ */ ++ ++#ifndef _TWL4030_MADC_H ++#define _TWL4030_MADC_H ++ ++struct twl4030_madc_conversion_method { ++ u8 sel; ++ u8 avg; ++ u8 rbase; ++ u8 ctrl; ++}; ++ ++#define TWL4030_MADC_MAX_CHANNELS 16 ++ ++struct twl4030_madc_request { ++ u16 channels; ++ u16 do_avg; ++ u16 method; ++ u16 type; ++ int active; ++ int result_pending; ++ int rbuf[TWL4030_MADC_MAX_CHANNELS]; ++ void (*func_cb)(int len, int channels, int *buf); ++}; ++ ++enum conversion_methods { ++ TWL4030_MADC_RT, ++ TWL4030_MADC_SW1, ++ TWL4030_MADC_SW2, ++ TWL4030_MADC_NUM_METHODS ++}; ++ ++enum sample_type { ++ TWL4030_MADC_WAIT, ++ TWL4030_MADC_IRQ_ONESHOT, ++ TWL4030_MADC_IRQ_REARM ++}; ++ ++#define TWL4030_MADC_CTRL1 0x00 ++#define TWL4030_MADC_CTRL2 0x01 ++ ++#define TWL4030_MADC_RTSELECT_LSB 0x02 ++#define TWL4030_MADC_SW1SELECT_LSB 0x06 ++#define TWL4030_MADC_SW2SELECT_LSB 0x0A ++ ++#define TWL4030_MADC_RTAVERAGE_LSB 0x04 ++#define TWL4030_MADC_SW1AVERAGE_LSB 0x08 ++#define TWL4030_MADC_SW2AVERAGE_LSB 0x0C ++ ++#define TWL4030_MADC_CTRL_SW1 0x12 ++#define TWL4030_MADC_CTRL_SW2 0x13 ++ ++#define TWL4030_MADC_RTCH0_LSB 0x17 ++#define TWL4030_MADC_GPCH0_LSB 0x37 ++ ++#define TWL4030_MADC_MADCON (1<<0) /* MADC power on */ ++#define TWL4030_MADC_BUSY (1<<0) /* MADC busy */ ++#define TWL4030_MADC_EOC_SW (1<<1) /* MADC conversion completion */ ++#define TWL4030_MADC_SW_START (1<<5) /* MADC SWx start conversion */ ++ ++#define TWL4030_MADC_ADCIN0 (1<<0) ++#define TWL4030_MADC_ADCIN1 (1<<1) ++#define TWL4030_MADC_ADCIN2 (1<<2) ++#define TWL4030_MADC_ADCIN3 (1<<3) ++#define TWL4030_MADC_ADCIN4 (1<<4) ++#define TWL4030_MADC_ADCIN5 (1<<5) ++#define TWL4030_MADC_ADCIN6 (1<<6) ++#define TWL4030_MADC_ADCIN7 (1<<7) ++#define TWL4030_MADC_ADCIN8 (1<<8) ++#define TWL4030_MADC_ADCIN9 (1<<9) ++#define TWL4030_MADC_ADCIN10 (1<<10) ++#define TWL4030_MADC_ADCIN11 (1<<11) ++#define TWL4030_MADC_ADCIN12 (1<<12) ++#define TWL4030_MADC_ADCIN13 (1<<13) ++#define TWL4030_MADC_ADCIN14 (1<<14) ++#define TWL4030_MADC_ADCIN15 (1<<15) ++ ++/* Fixed channels */ ++#define TWL4030_MADC_BTEMP TWL4030_MADC_ADCIN1 ++#define TWL4030_MADC_VBUS TWL4030_MADC_ADCIN8 ++#define TWL4030_MADC_VBKB TWL4030_MADC_ADCIN9 ++#define TWL4030_MADC_ICHG TWL4030_MADC_ADCIN10 ++#define TWL4030_MADC_VCHG TWL4030_MADC_ADCIN11 ++#define TWL4030_MADC_VBAT TWL4030_MADC_ADCIN12 ++ ++/* BCI related - XXX To be moved elsewhere */ ++#define TWL4030_BCI_BCICTL1 0x23 ++#define TWL4030_BCI_MESBAT (1<<1) ++#define TWL4030_BCI_TYPEN (1<<4) ++#define TWL4030_BCI_ITHEN (1<<3) ++ ++/* USB related - XXX To be moved elsewhere */ ++#define TWL4030_USB_CARKIT_ANA_CTRL 0xBB ++#define TWL4030_USB_SEL_MADC_MCPC (1<<3) ++ ++#define TWL4030_MADC_IOC_MAGIC '`' ++#define TWL4030_MADC_IOCX_ADC_RAW_READ _IO(TWL4030_MADC_IOC_MAGIC, 0) ++ ++struct twl4030_madc_user_parms { ++ int channel; ++ int average; ++ int status; ++ u16 result; ++}; ++ ++int twl4030_madc_conversion(struct twl4030_madc_request *conv); ++ ++#endif +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch b/recipes-bsp/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch new file mode 100644 index 0000000000..b24e4dd25f --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch @@ -0,0 +1,32 @@ +From a33c4e0fb917ca059e900c2851849ba604758ff9 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch b/recipes-bsp/linux/linux-omap/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch deleted file mode 100644 index 84e19a5651..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch +++ /dev/null @@ -1,173 +0,0 @@ -From b8983a303fe84ba5a2ff5075edee0071c0b982ae Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Tue, 23 Feb 2010 14:40:27 -0800 -Subject: [PATCH 19/26] 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 -+ * -+ * 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 . -+ */ -+ -+#include -+#include -+ -+#include -+ -+static struct omap_video_timings samsung_lte_timings = { -+ .x_res = 480, -+ .y_res = 272, -+ -+ .pixel_clock = 9200, -+ -+ .hsw = 41, -+ .hfp = 8, -+ .hbp = 45-41, -+ -+ .vsw = 10, -+ .vfp = 4, -+ .vbp = 12-10, -+}; -+ -+static int samsung_lte_panel_power_on(struct omap_dss_device *dssdev) -+{ -+ int r; -+ -+ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) -+ return 0; -+ -+ r = omapdss_dpi_display_enable(dssdev); -+ if (r) -+ goto err0; -+ -+ if (dssdev->platform_enable) { -+ r = dssdev->platform_enable(dssdev); -+ if (r) -+ goto err1; -+ } -+ -+ return 0; -+err1: -+ omapdss_dpi_display_disable(dssdev); -+err0: -+ return r; -+} -+ -+static void samsung_lte_panel_power_off(struct omap_dss_device *dssdev) -+{ -+ if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) -+ return; -+ -+ if (dssdev->platform_disable) -+ dssdev->platform_disable(dssdev); -+ -+ omapdss_dpi_display_disable(dssdev); -+} -+ -+static int samsung_lte_panel_probe(struct omap_dss_device *dssdev) -+{ -+ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | -+ OMAP_DSS_LCD_IHS; -+ dssdev->panel.timings = samsung_lte_timings; -+ -+ return 0; -+} -+ -+static void samsung_lte_panel_remove(struct omap_dss_device *dssdev) -+{ -+} -+ -+static int samsung_lte_panel_enable(struct omap_dss_device *dssdev) -+{ -+ int r = 0; -+ -+ r = samsung_lte_panel_power_on(dssdev); -+ if (r) -+ return r; -+ -+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; -+ -+ return 0; -+} -+ -+static void samsung_lte_panel_disable(struct omap_dss_device *dssdev) -+{ -+ samsung_lte_panel_power_off(dssdev); -+ -+ dssdev->state = OMAP_DSS_DISPLAY_DISABLED; -+} -+ -+static int samsung_lte_panel_suspend(struct omap_dss_device *dssdev) -+{ -+ samsung_lte_panel_disable(dssdev); -+ dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED; -+ return 0; -+} -+ -+static int samsung_lte_panel_resume(struct omap_dss_device *dssdev) -+{ -+ int r; -+ -+ r = samsung_lte_panel_enable(dssdev); -+ if (r) -+ return r; -+ -+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; -+ -+ return 0; -+} -+ -+static struct omap_dss_driver samsung_lte_driver = { -+ .probe = samsung_lte_panel_probe, -+ .remove = samsung_lte_panel_remove, -+ -+ .enable = samsung_lte_panel_enable, -+ .disable = samsung_lte_panel_disable, -+ .suspend = samsung_lte_panel_suspend, -+ .resume = samsung_lte_panel_resume, -+ -+ .driver = { -+ .name = "samsung_lte_panel", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init samsung_lte_panel_drv_init(void) -+{ -+ return omap_dss_register_driver(&samsung_lte_driver); -+} -+ -+static void __exit samsung_lte_panel_drv_exit(void) -+{ -+ omap_dss_unregister_driver(&samsung_lte_driver); -+} -+ -+module_init(samsung_lte_panel_drv_init); -+module_exit(samsung_lte_panel_drv_exit); -+MODULE_LICENSE("GPL"); --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch b/recipes-bsp/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch new file mode 100644 index 0000000000..7028c17bed --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0020-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch @@ -0,0 +1,35 @@ +From fe51c97f26f8d6798909b1f22a5fb4ca84684f36 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch b/recipes-bsp/linux/linux-omap/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch deleted file mode 100644 index 42bb5d1e80..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch +++ /dev/null @@ -1,299 +0,0 @@ -From 571cdd24aee8cd6091bcc4dac0d8a0affc3500bf Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Thu, 17 Dec 2009 15:05:30 -0800 -Subject: [PATCH 20/26] 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 -+ * -+ * 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 . -+ */ -+ -+#include -+#include -+#include -+ -+#include -+ -+static struct spi_device *spidev; -+ -+static struct omap_video_timings lb035q02_timings = { -+ .x_res = 320, -+ .y_res = 240, -+ -+ .pixel_clock = 6500, -+ -+ .hsw = 2, -+ .hfp = 20, -+ .hbp = 68, -+ -+ .vsw = 2, -+ .vfp = 4, -+ .vbp = 18, -+}; -+ -+static int lb035q02_write_reg(u8 reg, u16 val) -+{ -+ struct spi_message msg; -+ struct spi_transfer index_xfer = { -+ .len = 3, -+ .cs_change = 1, -+ }; -+ struct spi_transfer value_xfer = { -+ .len = 3, -+ }; -+ u8 buffer[16]; -+ -+ spi_message_init(&msg); -+ -+ /* register index */ -+ buffer[0] = 0x70; -+ buffer[1] = 0x00; -+ buffer[2] = reg & 0x7f; -+ index_xfer.tx_buf = buffer; -+ spi_message_add_tail(&index_xfer, &msg); -+ -+ /* register value */ -+ buffer[4] = 0x72; -+ buffer[5] = val >> 8; -+ buffer[6] = val; -+ value_xfer.tx_buf = buffer + 4; -+ spi_message_add_tail(&value_xfer, &msg); -+ -+ return spi_sync(spidev, &msg); -+} -+ -+static int lb035q02_panel_power_on(struct omap_dss_device *dssdev) -+{ -+ int r; -+ -+ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) -+ return 0; -+ -+ r = omapdss_dpi_display_enable(dssdev); -+ if (r) -+ goto err0; -+ -+ if (dssdev->platform_enable) { -+ r = dssdev->platform_enable(dssdev); -+ if (r) -+ goto err1; -+ } -+ -+ /* Panel init sequence from page 28 of the spec */ -+ lb035q02_write_reg(0x01, 0x6300); -+ lb035q02_write_reg(0x02, 0x0200); -+ lb035q02_write_reg(0x03, 0x0177); -+ lb035q02_write_reg(0x04, 0x04c7); -+ lb035q02_write_reg(0x05, 0xffc0); -+ lb035q02_write_reg(0x06, 0xe806); -+ lb035q02_write_reg(0x0a, 0x4008); -+ lb035q02_write_reg(0x0b, 0x0000); -+ lb035q02_write_reg(0x0d, 0x0030); -+ lb035q02_write_reg(0x0e, 0x2800); -+ lb035q02_write_reg(0x0f, 0x0000); -+ lb035q02_write_reg(0x16, 0x9f80); -+ lb035q02_write_reg(0x17, 0x0a0f); -+ lb035q02_write_reg(0x1e, 0x00c1); -+ lb035q02_write_reg(0x30, 0x0300); -+ lb035q02_write_reg(0x31, 0x0007); -+ lb035q02_write_reg(0x32, 0x0000); -+ lb035q02_write_reg(0x33, 0x0000); -+ lb035q02_write_reg(0x34, 0x0707); -+ lb035q02_write_reg(0x35, 0x0004); -+ lb035q02_write_reg(0x36, 0x0302); -+ lb035q02_write_reg(0x37, 0x0202); -+ lb035q02_write_reg(0x3a, 0x0a0d); -+ lb035q02_write_reg(0x3b, 0x0806); -+ -+ return 0; -+err1: -+ omapdss_dpi_display_disable(dssdev); -+err0: -+ return r; -+} -+ -+static void lb035q02_panel_power_off(struct omap_dss_device *dssdev) -+{ -+ if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) -+ return; -+ -+ if (dssdev->platform_disable) -+ dssdev->platform_disable(dssdev); -+ -+ omapdss_dpi_display_disable(dssdev); -+} -+ -+static int lb035q02_panel_probe(struct omap_dss_device *dssdev) -+{ -+ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | -+ OMAP_DSS_LCD_IHS; -+ dssdev->panel.timings = lb035q02_timings; -+ -+ return 0; -+} -+ -+static void lb035q02_panel_remove(struct omap_dss_device *dssdev) -+{ -+} -+ -+static int lb035q02_panel_enable(struct omap_dss_device *dssdev) -+{ -+ int r = 0; -+ -+ r = lb035q02_panel_power_on(dssdev); -+ if (r) -+ return r; -+ -+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; -+ -+ return 0; -+} -+ -+static void lb035q02_panel_disable(struct omap_dss_device *dssdev) -+{ -+ lb035q02_panel_power_off(dssdev); -+ -+ dssdev->state = OMAP_DSS_DISPLAY_DISABLED; -+} -+ -+static int lb035q02_panel_suspend(struct omap_dss_device *dssdev) -+{ -+ lb035q02_panel_disable(dssdev); -+ dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED; -+ return 0; -+} -+ -+static int lb035q02_panel_resume(struct omap_dss_device *dssdev) -+{ -+ int r; -+ -+ r = lb035q02_panel_power_on(dssdev); -+ if (r) -+ return r; -+ -+ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; -+ -+ return 0; -+} -+ -+static struct omap_dss_driver lb035q02_driver = { -+ .probe = lb035q02_panel_probe, -+ .remove = lb035q02_panel_remove, -+ -+ .enable = lb035q02_panel_enable, -+ .disable = lb035q02_panel_disable, -+ .suspend = lb035q02_panel_suspend, -+ .resume = lb035q02_panel_resume, -+ -+ .driver = { -+ .name = "lgphilips_lb035q02_panel", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __devinit lb035q02_panel_spi_probe(struct spi_device *spi) -+{ -+ spidev = spi; -+ return 0; -+} -+ -+static int __devexit lb035q02_panel_spi_remove(struct spi_device *spi) -+{ -+ return 0; -+} -+ -+static struct spi_driver lb035q02_spi_driver = { -+ .driver = { -+ .name = "lgphilips_lb035q02_panel-spi", -+ .owner = THIS_MODULE, -+ }, -+ .probe = lb035q02_panel_spi_probe, -+ .remove = __devexit_p (lb035q02_panel_spi_remove), -+}; -+ -+static int __init lb035q02_panel_drv_init(void) -+{ -+ int r; -+ r = spi_register_driver(&lb035q02_spi_driver); -+ if (r != 0) -+ pr_err("lgphilips_lb035q02: Unable to register SPI driver: %d\n", r); -+ -+ r = omap_dss_register_driver(&lb035q02_driver); -+ if (r != 0) -+ pr_err("lgphilips_lb035q02: Unable to register panel driver: %d\n", r); -+ -+ return r; -+} -+ -+static void __exit lb035q02_panel_drv_exit(void) -+{ -+ spi_unregister_driver(&lb035q02_spi_driver); -+ omap_dss_unregister_driver(&lb035q02_driver); -+} -+ -+module_init(lb035q02_panel_drv_init); -+module_exit(lb035q02_panel_drv_exit); -+MODULE_LICENSE("GPL"); --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch b/recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch new file mode 100644 index 0000000000..823ab9f366 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch @@ -0,0 +1,173 @@ +From f8049ce6302904c1d08d8813f8a60b10b8a476e7 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 ++ * ++ * 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 . ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct omap_video_timings samsung_lte_timings = { ++ .x_res = 480, ++ .y_res = 272, ++ ++ .pixel_clock = 9200, ++ ++ .hsw = 41, ++ .hfp = 8, ++ .hbp = 45-41, ++ ++ .vsw = 10, ++ .vfp = 4, ++ .vbp = 12-10, ++}; ++ ++static int samsung_lte_panel_power_on(struct omap_dss_device *dssdev) ++{ ++ int r; ++ ++ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) ++ return 0; ++ ++ r = omapdss_dpi_display_enable(dssdev); ++ if (r) ++ goto err0; ++ ++ if (dssdev->platform_enable) { ++ r = dssdev->platform_enable(dssdev); ++ if (r) ++ goto err1; ++ } ++ ++ return 0; ++err1: ++ omapdss_dpi_display_disable(dssdev); ++err0: ++ return r; ++} ++ ++static void samsung_lte_panel_power_off(struct omap_dss_device *dssdev) ++{ ++ if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) ++ return; ++ ++ if (dssdev->platform_disable) ++ dssdev->platform_disable(dssdev); ++ ++ omapdss_dpi_display_disable(dssdev); ++} ++ ++static int samsung_lte_panel_probe(struct omap_dss_device *dssdev) ++{ ++ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | ++ OMAP_DSS_LCD_IHS; ++ dssdev->panel.timings = samsung_lte_timings; ++ ++ return 0; ++} ++ ++static void samsung_lte_panel_remove(struct omap_dss_device *dssdev) ++{ ++} ++ ++static int samsung_lte_panel_enable(struct omap_dss_device *dssdev) ++{ ++ int r = 0; ++ ++ r = samsung_lte_panel_power_on(dssdev); ++ if (r) ++ return r; ++ ++ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; ++ ++ return 0; ++} ++ ++static void samsung_lte_panel_disable(struct omap_dss_device *dssdev) ++{ ++ samsung_lte_panel_power_off(dssdev); ++ ++ dssdev->state = OMAP_DSS_DISPLAY_DISABLED; ++} ++ ++static int samsung_lte_panel_suspend(struct omap_dss_device *dssdev) ++{ ++ samsung_lte_panel_disable(dssdev); ++ dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED; ++ return 0; ++} ++ ++static int samsung_lte_panel_resume(struct omap_dss_device *dssdev) ++{ ++ int r; ++ ++ r = samsung_lte_panel_enable(dssdev); ++ if (r) ++ return r; ++ ++ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; ++ ++ return 0; ++} ++ ++static struct omap_dss_driver samsung_lte_driver = { ++ .probe = samsung_lte_panel_probe, ++ .remove = samsung_lte_panel_remove, ++ ++ .enable = samsung_lte_panel_enable, ++ .disable = samsung_lte_panel_disable, ++ .suspend = samsung_lte_panel_suspend, ++ .resume = samsung_lte_panel_resume, ++ ++ .driver = { ++ .name = "samsung_lte_panel", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __init samsung_lte_panel_drv_init(void) ++{ ++ return omap_dss_register_driver(&samsung_lte_driver); ++} ++ ++static void __exit samsung_lte_panel_drv_exit(void) ++{ ++ omap_dss_unregister_driver(&samsung_lte_driver); ++} ++ ++module_init(samsung_lte_panel_drv_init); ++module_exit(samsung_lte_panel_drv_exit); ++MODULE_LICENSE("GPL"); +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch b/recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch deleted file mode 100644 index b3b2d12dcc..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch +++ /dev/null @@ -1,75 +0,0 @@ -From d4ae1b11c94e268467ff6cb6143b934733ed762a Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Tue, 19 Jan 2010 21:19:15 -0800 -Subject: [PATCH 21/26] OMAP: DSS2: add bootarg for selecting svideo or composite for tv output - -also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp ---- - drivers/video/omap2/dss/venc.c | 22 ++++++++++++++++++++++ - drivers/video/omap2/omapfb/omapfb-main.c | 10 +++++++++- - 2 files changed, 31 insertions(+), 1 deletions(-) - -diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c -index eff3505..e1f4aab 100644 ---- a/drivers/video/omap2/dss/venc.c -+++ b/drivers/video/omap2/dss/venc.c -@@ -87,6 +87,11 @@ - #define VENC_OUTPUT_TEST 0xC8 - #define VENC_DAC_B__DAC_C 0xC8 - -+static char *tv_connection; -+ -+module_param_named(tvcable, tv_connection, charp, 0); -+MODULE_PARM_DESC(tvcable, "TV connection type (svideo, composite)"); -+ - struct venc_config { - u32 f_control; - u32 vidout_ctrl; -@@ -459,6 +464,23 @@ static int venc_panel_probe(struct omap_dss_device *dssdev) - { - dssdev->panel.timings = omap_dss_pal_timings; - -+ /* Allow the TV output to be overriden */ -+ if (tv_connection) { -+ if (strcmp(tv_connection, "svideo") == 0) { -+ printk(KERN_INFO -+ "omapdss: tv output is svideo.\n"); -+ dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO; -+ } else if (strcmp(tv_connection, "composite") == 0) { -+ printk(KERN_INFO -+ "omapdss: tv output is composite.\n"); -+ dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_COMPOSITE; -+ } else { -+ printk(KERN_INFO -+ "omapdss: unsupported output type'%s'.\n", -+ tv_connection); -+ } -+ } -+ - return 0; - } - -diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c -index 6a704f1..7ee833f 100644 ---- a/drivers/video/omap2/omapfb/omapfb-main.c -+++ b/drivers/video/omap2/omapfb/omapfb-main.c -@@ -2036,7 +2036,15 @@ static int omapfb_mode_to_timings(const char *mode_str, - int r; - - #ifdef CONFIG_OMAP2_DSS_VENC -- if (strcmp(mode_str, "pal") == 0) { -+ if (strcmp(mode_str, "pal-16") == 0) { -+ *timings = omap_dss_pal_timings; -+ *bpp = 16; -+ return 0; -+ } else if (strcmp(mode_str, "ntsc-16") == 0) { -+ *timings = omap_dss_ntsc_timings; -+ *bpp = 16; -+ return 0; -+ } else if (strcmp(mode_str, "pal") == 0) { - *timings = omap_dss_pal_timings; - *bpp = 24; - return 0; --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch b/recipes-bsp/linux/linux-omap/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch deleted file mode 100644 index d0462fc32d..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch +++ /dev/null @@ -1,39 +0,0 @@ -From d0f67e031cd9eb514bbcff3147bf6644b92c5ee4 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Sun, 24 Jan 2010 09:33:56 -0800 -Subject: [PATCH 22/26] ARM: OMAP2: mmc-twl4030: move clock input selection prior to vcc test - -otherwise it is not executed on systems that use non-twl regulators ---- - arch/arm/mach-omap2/hsmmc.c | 14 ++++++-------- - 1 files changed, 6 insertions(+), 8 deletions(-) - -diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c -index 34272e4..a74631d 100644 ---- a/arch/arm/mach-omap2/hsmmc.c -+++ b/arch/arm/mach-omap2/hsmmc.c -@@ -186,15 +186,13 @@ static void hsmmc23_before_set_reg(struct device *dev, int slot, - if (mmc->slots[0].remux) - mmc->slots[0].remux(dev, slot, power_on); - -- if (power_on) { -- /* Only MMC2 supports a CLKIN */ -- if (mmc->slots[0].internal_clock) { -- u32 reg; -+ /* Only MMC2 supports a CLKIN */ -+ if (mmc->slots[0].internal_clock) { -+ u32 reg; - -- reg = omap_ctrl_readl(control_devconf1_offset); -- reg |= OMAP2_MMCSDIO2ADPCLKISEL; -- omap_ctrl_writel(reg, control_devconf1_offset); -- } -+ reg = omap_ctrl_readl(control_devconf1_offset); -+ reg |= OMAP2_MMCSDIO2ADPCLKISEL; -+ omap_ctrl_writel(reg, control_devconf1_offset); - } - } - --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch b/recipes-bsp/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch new file mode 100644 index 0000000000..c30294239e --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0022-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch @@ -0,0 +1,299 @@ +From 93032782a4803072d7ab1e22da029325f8f3cf44 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 ++ * ++ * 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 . ++ */ ++ ++#include ++#include ++#include ++ ++#include ++ ++static struct spi_device *spidev; ++ ++static struct omap_video_timings lb035q02_timings = { ++ .x_res = 320, ++ .y_res = 240, ++ ++ .pixel_clock = 6500, ++ ++ .hsw = 2, ++ .hfp = 20, ++ .hbp = 68, ++ ++ .vsw = 2, ++ .vfp = 4, ++ .vbp = 18, ++}; ++ ++static int lb035q02_write_reg(u8 reg, u16 val) ++{ ++ struct spi_message msg; ++ struct spi_transfer index_xfer = { ++ .len = 3, ++ .cs_change = 1, ++ }; ++ struct spi_transfer value_xfer = { ++ .len = 3, ++ }; ++ u8 buffer[16]; ++ ++ spi_message_init(&msg); ++ ++ /* register index */ ++ buffer[0] = 0x70; ++ buffer[1] = 0x00; ++ buffer[2] = reg & 0x7f; ++ index_xfer.tx_buf = buffer; ++ spi_message_add_tail(&index_xfer, &msg); ++ ++ /* register value */ ++ buffer[4] = 0x72; ++ buffer[5] = val >> 8; ++ buffer[6] = val; ++ value_xfer.tx_buf = buffer + 4; ++ spi_message_add_tail(&value_xfer, &msg); ++ ++ return spi_sync(spidev, &msg); ++} ++ ++static int lb035q02_panel_power_on(struct omap_dss_device *dssdev) ++{ ++ int r; ++ ++ if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) ++ return 0; ++ ++ r = omapdss_dpi_display_enable(dssdev); ++ if (r) ++ goto err0; ++ ++ if (dssdev->platform_enable) { ++ r = dssdev->platform_enable(dssdev); ++ if (r) ++ goto err1; ++ } ++ ++ /* Panel init sequence from page 28 of the spec */ ++ lb035q02_write_reg(0x01, 0x6300); ++ lb035q02_write_reg(0x02, 0x0200); ++ lb035q02_write_reg(0x03, 0x0177); ++ lb035q02_write_reg(0x04, 0x04c7); ++ lb035q02_write_reg(0x05, 0xffc0); ++ lb035q02_write_reg(0x06, 0xe806); ++ lb035q02_write_reg(0x0a, 0x4008); ++ lb035q02_write_reg(0x0b, 0x0000); ++ lb035q02_write_reg(0x0d, 0x0030); ++ lb035q02_write_reg(0x0e, 0x2800); ++ lb035q02_write_reg(0x0f, 0x0000); ++ lb035q02_write_reg(0x16, 0x9f80); ++ lb035q02_write_reg(0x17, 0x0a0f); ++ lb035q02_write_reg(0x1e, 0x00c1); ++ lb035q02_write_reg(0x30, 0x0300); ++ lb035q02_write_reg(0x31, 0x0007); ++ lb035q02_write_reg(0x32, 0x0000); ++ lb035q02_write_reg(0x33, 0x0000); ++ lb035q02_write_reg(0x34, 0x0707); ++ lb035q02_write_reg(0x35, 0x0004); ++ lb035q02_write_reg(0x36, 0x0302); ++ lb035q02_write_reg(0x37, 0x0202); ++ lb035q02_write_reg(0x3a, 0x0a0d); ++ lb035q02_write_reg(0x3b, 0x0806); ++ ++ return 0; ++err1: ++ omapdss_dpi_display_disable(dssdev); ++err0: ++ return r; ++} ++ ++static void lb035q02_panel_power_off(struct omap_dss_device *dssdev) ++{ ++ if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE) ++ return; ++ ++ if (dssdev->platform_disable) ++ dssdev->platform_disable(dssdev); ++ ++ omapdss_dpi_display_disable(dssdev); ++} ++ ++static int lb035q02_panel_probe(struct omap_dss_device *dssdev) ++{ ++ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | ++ OMAP_DSS_LCD_IHS; ++ dssdev->panel.timings = lb035q02_timings; ++ ++ return 0; ++} ++ ++static void lb035q02_panel_remove(struct omap_dss_device *dssdev) ++{ ++} ++ ++static int lb035q02_panel_enable(struct omap_dss_device *dssdev) ++{ ++ int r = 0; ++ ++ r = lb035q02_panel_power_on(dssdev); ++ if (r) ++ return r; ++ ++ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; ++ ++ return 0; ++} ++ ++static void lb035q02_panel_disable(struct omap_dss_device *dssdev) ++{ ++ lb035q02_panel_power_off(dssdev); ++ ++ dssdev->state = OMAP_DSS_DISPLAY_DISABLED; ++} ++ ++static int lb035q02_panel_suspend(struct omap_dss_device *dssdev) ++{ ++ lb035q02_panel_disable(dssdev); ++ dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED; ++ return 0; ++} ++ ++static int lb035q02_panel_resume(struct omap_dss_device *dssdev) ++{ ++ int r; ++ ++ r = lb035q02_panel_power_on(dssdev); ++ if (r) ++ return r; ++ ++ dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; ++ ++ return 0; ++} ++ ++static struct omap_dss_driver lb035q02_driver = { ++ .probe = lb035q02_panel_probe, ++ .remove = lb035q02_panel_remove, ++ ++ .enable = lb035q02_panel_enable, ++ .disable = lb035q02_panel_disable, ++ .suspend = lb035q02_panel_suspend, ++ .resume = lb035q02_panel_resume, ++ ++ .driver = { ++ .name = "lgphilips_lb035q02_panel", ++ .owner = THIS_MODULE, ++ }, ++}; ++ ++static int __devinit lb035q02_panel_spi_probe(struct spi_device *spi) ++{ ++ spidev = spi; ++ return 0; ++} ++ ++static int __devexit lb035q02_panel_spi_remove(struct spi_device *spi) ++{ ++ return 0; ++} ++ ++static struct spi_driver lb035q02_spi_driver = { ++ .driver = { ++ .name = "lgphilips_lb035q02_panel-spi", ++ .owner = THIS_MODULE, ++ }, ++ .probe = lb035q02_panel_spi_probe, ++ .remove = __devexit_p (lb035q02_panel_spi_remove), ++}; ++ ++static int __init lb035q02_panel_drv_init(void) ++{ ++ int r; ++ r = spi_register_driver(&lb035q02_spi_driver); ++ if (r != 0) ++ pr_err("lgphilips_lb035q02: Unable to register SPI driver: %d\n", r); ++ ++ r = omap_dss_register_driver(&lb035q02_driver); ++ if (r != 0) ++ pr_err("lgphilips_lb035q02: Unable to register panel driver: %d\n", r); ++ ++ return r; ++} ++ ++static void __exit lb035q02_panel_drv_exit(void) ++{ ++ spi_unregister_driver(&lb035q02_spi_driver); ++ omap_dss_unregister_driver(&lb035q02_driver); ++} ++ ++module_init(lb035q02_panel_drv_init); ++module_exit(lb035q02_panel_drv_exit); ++MODULE_LICENSE("GPL"); +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch b/recipes-bsp/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch new file mode 100644 index 0000000000..12f7d7b095 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0023-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch @@ -0,0 +1,75 @@ +From f046a207183e3e338c7e851085265f0df95f4cc2 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0023-RTC-add-support-for-backup-battery-recharge.patch b/recipes-bsp/linux/linux-omap/base/0023-RTC-add-support-for-backup-battery-recharge.patch deleted file mode 100644 index 9754c7419a..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0023-RTC-add-support-for-backup-battery-recharge.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 27f251ad46eeda205c220f89b4f9fbeaf930ae54 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Thu, 4 Feb 2010 12:26:22 -0800 -Subject: [PATCH 23/26] 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 - -+/* -+ * PM_RECEIVER block register offsets (use TWL4030_MODULE_PM_RECEIVER) -+ */ -+#define REG_BB_CFG 0x12 -+ -+/* PM_RECEIVER BB_CFG bitfields */ -+#define BIT_PM_RECEIVER_BB_CFG_BBCHEN 0x10 -+#define BIT_PM_RECEIVER_BB_CFG_BBSEL 0x0C -+#define BIT_PM_RECEIVER_BB_CFG_BBSEL_2V5 0x00 -+#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3V0 0x04 -+#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3V1 0x08 -+#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3v2 0x0c -+#define BIT_PM_RECEIVER_BB_CFG_BBISEL 0x03 -+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA 0x00 -+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_150UA 0x01 -+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_500UA 0x02 -+#define BIT_PM_RECEIVER_BB_CFG_BBISEL_1MA 0x03 - - /* - * RTC block register offsets (use TWL_MODULE_RTC) -@@ -508,6 +525,14 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev) - if (ret < 0) - goto out2; - -+ /* enable backup battery charging */ -+ /* use a conservative 25uA @ 3.1V */ -+ ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, -+ BIT_PM_RECEIVER_BB_CFG_BBCHEN | -+ BIT_PM_RECEIVER_BB_CFG_BBSEL_3V1 | -+ BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA, -+ REG_BB_CFG); -+ - return ret; - - out2: --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch b/recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch deleted file mode 100644 index 37a15ced9c..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 4eedcb7fb5101a042102355463a213fa51e52e4f Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Wed, 24 Feb 2010 10:37:22 -0800 -Subject: [PATCH 24/26] ARM: OMAP: automatically set musb mode in platform data based on CONFIG options - ---- - arch/arm/mach-omap2/board-omap3beagle.c | 6 ++++++ - arch/arm/mach-omap2/board-overo.c | 6 ++++++ - 2 files changed, 12 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 781844c..006dc26 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -759,7 +759,13 @@ static struct omap_board_mux board_mux[] __initdata = { - - static struct omap_musb_board_data musb_board_data = { - .interface_type = MUSB_INTERFACE_ULPI, -+#if defined(CONFIG_USB_MUSB_OTG) - .mode = MUSB_OTG, -+#elif defined(CONFIG_USB_GADGET_MUSB_HDRC) -+ .mode = MUSB_PERIPHERAL, -+#else -+ .mode = MUSB_HOST, -+#endif - .power = 100, - }; - -diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c -index 17f066a..b28a9d5 100644 ---- a/arch/arm/mach-omap2/board-overo.c -+++ b/arch/arm/mach-omap2/board-overo.c -@@ -447,7 +447,13 @@ static struct omap_board_mux board_mux[] __initdata = { - - static struct omap_musb_board_data musb_board_data = { - .interface_type = MUSB_INTERFACE_ULPI, -+#if defined(CONFIG_USB_MUSB_OTG) - .mode = MUSB_OTG, -+#elif defined(CONFIG_USB_GADGET_MUSB_HDRC) -+ .mode = MUSB_PERIPHERAL, -+#else -+ .mode = MUSB_HOST, -+#endif - .power = 100, - }; - --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch b/recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch new file mode 100644 index 0000000000..f012a91a3f --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0024-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch @@ -0,0 +1,39 @@ +From 66bba5baf225a1420c734aa0268e7dd37fc3f73b Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch b/recipes-bsp/linux/linux-omap/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch deleted file mode 100644 index 7805899237..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 3e9463eb0f8c54286c086f259a598415ba28c28f Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Mon, 10 May 2010 13:59:14 -0700 -Subject: [PATCH 25/26] OMAP: DSS2: check for both cpu type and revision, rather than just revision - ---- - drivers/video/omap2/dss/dispc.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c -index fa40fa5..133916a 100644 ---- a/drivers/video/omap2/dss/dispc.c -+++ b/drivers/video/omap2/dss/dispc.c -@@ -2101,7 +2101,7 @@ void dispc_set_parallel_interface_mode(enum omap_parallel_interface_mode mode) - static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp, - int vsw, int vfp, int vbp) - { -- if (cpu_is_omap24xx() || omap_rev() < OMAP3430_REV_ES3_0) { -+ if (cpu_is_omap24xx() || (cpu_is_omap34xx() && omap_rev_lt_3_0())) { - if (hsw < 1 || hsw > 64 || - hfp < 1 || hfp > 256 || - hbp < 1 || hbp > 256 || -@@ -2134,7 +2134,7 @@ static void _dispc_set_lcd_timings(int hsw, int hfp, int hbp, - { - u32 timing_h, timing_v; - -- if (cpu_is_omap24xx() || omap_rev() < OMAP3430_REV_ES3_0) { -+ if (cpu_is_omap24xx() || (cpu_is_omap34xx() && omap_rev_lt_3_0())) { - timing_h = FLD_VAL(hsw-1, 5, 0) | FLD_VAL(hfp-1, 15, 8) | - FLD_VAL(hbp-1, 27, 20); - --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch b/recipes-bsp/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch new file mode 100644 index 0000000000..419e76483e --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0025-RTC-add-support-for-backup-battery-recharge.patch @@ -0,0 +1,55 @@ +From ae08111e55d17183382dd06d161066adf9f80f3c Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 + ++/* ++ * PM_RECEIVER block register offsets (use TWL4030_MODULE_PM_RECEIVER) ++ */ ++#define REG_BB_CFG 0x12 ++ ++/* PM_RECEIVER BB_CFG bitfields */ ++#define BIT_PM_RECEIVER_BB_CFG_BBCHEN 0x10 ++#define BIT_PM_RECEIVER_BB_CFG_BBSEL 0x0C ++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_2V5 0x00 ++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3V0 0x04 ++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3V1 0x08 ++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3v2 0x0c ++#define BIT_PM_RECEIVER_BB_CFG_BBISEL 0x03 ++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA 0x00 ++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_150UA 0x01 ++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_500UA 0x02 ++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_1MA 0x03 + + /* + * RTC block register offsets (use TWL_MODULE_RTC) +@@ -508,6 +525,14 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev) + if (ret < 0) + goto out2; + ++ /* enable backup battery charging */ ++ /* use a conservative 25uA @ 3.1V */ ++ ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, ++ BIT_PM_RECEIVER_BB_CFG_BBCHEN | ++ BIT_PM_RECEIVER_BB_CFG_BBSEL_3V1 | ++ BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA, ++ REG_BB_CFG); ++ + return ret; + + out2: +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch b/recipes-bsp/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch new file mode 100644 index 0000000000..b002f28875 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0026-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch @@ -0,0 +1,49 @@ +From dd53a7c1ab8addfd2a943ea44b5ccc5700648323 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch b/recipes-bsp/linux/linux-omap/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch deleted file mode 100644 index 56a73345a1..0000000000 --- a/recipes-bsp/linux/linux-omap/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch +++ /dev/null @@ -1,355 +0,0 @@ -From 5ac69358c0af66eadb86561fb99a661280f61f78 Mon Sep 17 00:00:00 2001 -From: Steve Sakoman -Date: Fri, 18 Dec 2009 06:39:24 -0800 -Subject: [PATCH 26/26] 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 - #include - #include -+#include - - #include - #include -@@ -41,10 +42,13 @@ - - #include - #include -+#include - #include - #include - #include - #include -+#include -+#include - #include - - #include "mux.h" -@@ -68,8 +72,6 @@ - #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ - defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) - --#include --#include - #include - - static struct omap2_mcspi_device_config ads7846_mcspi_config = { -@@ -94,18 +96,6 @@ static struct ads7846_platform_data ads7846_config = { - .keep_vref_on = 1, - }; - --static struct spi_board_info overo_spi_board_info[] __initdata = { -- { -- .modalias = "ads7846", -- .bus_num = 1, -- .chip_select = 0, -- .max_speed_hz = 1500000, -- .controller_data = &ads7846_mcspi_config, -- .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), -- .platform_data = &ads7846_config, -- } --}; -- - static void __init overo_ads7846_init(void) - { - if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) && -@@ -115,9 +105,6 @@ static void __init overo_ads7846_init(void) - printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n"); - return; - } -- -- spi_register_board_info(overo_spi_board_info, -- ARRAY_SIZE(overo_spi_board_info)); - } - - #else -@@ -233,6 +220,139 @@ static inline void __init overo_init_smsc911x(void) - static inline void __init overo_init_smsc911x(void) { return; } - #endif - -+/* DSS */ -+static int lcd_enabled; -+static int dvi_enabled; -+ -+#define OVERO_GPIO_LCD_EN 144 -+#define OVERO_GPIO_LCD_BL 145 -+ -+static void __init overo_display_init(void) -+{ -+ if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) && -+ (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0)) -+ gpio_export(OVERO_GPIO_LCD_EN, 0); -+ else -+ printk(KERN_ERR "could not obtain gpio for " -+ "OVERO_GPIO_LCD_EN\n"); -+ -+ if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) && -+ (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0)) -+ gpio_export(OVERO_GPIO_LCD_BL, 0); -+ else -+ printk(KERN_ERR "could not obtain gpio for " -+ "OVERO_GPIO_LCD_BL\n"); -+} -+ -+static int overo_panel_enable_dvi(struct omap_dss_device *dssdev) -+{ -+ if (lcd_enabled) { -+ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n"); -+ return -EINVAL; -+ } -+ dvi_enabled = 1; -+ -+ return 0; -+} -+ -+static void overo_panel_disable_dvi(struct omap_dss_device *dssdev) -+{ -+ dvi_enabled = 0; -+} -+ -+static struct omap_dss_device overo_dvi_device = { -+ .type = OMAP_DISPLAY_TYPE_DPI, -+ .name = "dvi", -+ .driver_name = "generic_panel", -+ .phy.dpi.data_lines = 24, -+ .platform_enable = overo_panel_enable_dvi, -+ .platform_disable = overo_panel_disable_dvi, -+}; -+ -+static struct omap_dss_device overo_tv_device = { -+ .name = "tv", -+ .driver_name = "venc", -+ .type = OMAP_DISPLAY_TYPE_VENC, -+ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, -+}; -+ -+static int overo_panel_enable_lcd(struct omap_dss_device *dssdev) -+{ -+ if (dvi_enabled) { -+ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); -+ return -EINVAL; -+ } -+ -+ gpio_set_value(OVERO_GPIO_LCD_EN, 1); -+ gpio_set_value(OVERO_GPIO_LCD_BL, 1); -+ lcd_enabled = 1; -+ return 0; -+} -+ -+static void overo_panel_disable_lcd(struct omap_dss_device *dssdev) -+{ -+ gpio_set_value(OVERO_GPIO_LCD_EN, 0); -+ gpio_set_value(OVERO_GPIO_LCD_BL, 0); -+ lcd_enabled = 0; -+} -+ -+#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ -+ defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) -+static struct omap_dss_device overo_lcd35_device = { -+ .type = OMAP_DISPLAY_TYPE_DPI, -+ .name = "lcd35", -+ .driver_name = "lgphilips_lb035q02_panel", -+ .phy.dpi.data_lines = 24, -+ .platform_enable = overo_panel_enable_lcd, -+ .platform_disable = overo_panel_disable_lcd, -+}; -+#endif -+ -+#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \ -+ defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE) -+static struct omap_dss_device overo_lcd43_device = { -+ .type = OMAP_DISPLAY_TYPE_DPI, -+ .name = "lcd43", -+ .driver_name = "samsung_lte_panel", -+ .phy.dpi.data_lines = 24, -+ .platform_enable = overo_panel_enable_lcd, -+ .platform_disable = overo_panel_disable_lcd, -+}; -+#endif -+ -+static struct omap_dss_device *overo_dss_devices[] = { -+ &overo_dvi_device, -+ &overo_tv_device, -+#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ -+ defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) -+ &overo_lcd35_device, -+#endif -+#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \ -+ defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE) -+ &overo_lcd43_device, -+#endif -+}; -+ -+static struct omap_dss_board_info overo_dss_data = { -+ .num_devices = ARRAY_SIZE(overo_dss_devices), -+ .devices = overo_dss_devices, -+ .default_device = &overo_dvi_device, -+}; -+ -+static struct platform_device overo_dss_device = { -+ .name = "omapdss", -+ .id = -1, -+ .dev = { -+ .platform_data = &overo_dss_data, -+ }, -+}; -+ -+static struct regulator_consumer_supply overo_vdda_dac_supply = -+ REGULATOR_SUPPLY("vdda_dac", "omapdss"); -+ -+static struct regulator_consumer_supply overo_vdds_dsi_supply = -+ REGULATOR_SUPPLY("vdds_dsi", "omapdss"); -+ - static struct mtd_partition overo_nand_partitions[] = { - { - .name = "xloader", -@@ -358,6 +478,37 @@ static struct regulator_init_data overo_vmmc1 = { - .consumer_supplies = &overo_vmmc1_supply, - }; - -+/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */ -+static struct regulator_init_data overo_vdac = { -+ .constraints = { -+ .min_uV = 1800000, -+ .max_uV = 1800000, -+ .valid_modes_mask = REGULATOR_MODE_NORMAL -+ | REGULATOR_MODE_STANDBY, -+ .valid_ops_mask = REGULATOR_CHANGE_MODE -+ | REGULATOR_CHANGE_STATUS, -+ }, -+ .num_consumer_supplies = 1, -+ .consumer_supplies = &overo_vdda_dac_supply, -+}; -+ -+/* VPLL2 for digital video outputs */ -+static struct regulator_init_data overo_vpll2 = { -+ .constraints = { -+ .name = "VDVI", -+ .min_uV = 1800000, -+ .max_uV = 1800000, -+ .valid_modes_mask = REGULATOR_MODE_NORMAL -+ | REGULATOR_MODE_STANDBY, -+ .valid_ops_mask = REGULATOR_CHANGE_MODE -+ | REGULATOR_CHANGE_STATUS, -+ }, -+ .num_consumer_supplies = 1, -+ .consumer_supplies = &overo_vdds_dsi_supply, -+}; -+ -+/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ -+ - static struct twl4030_codec_audio_data overo_audio_data = { - .audio_mclk = 26000000, - }; -@@ -367,8 +518,6 @@ static struct twl4030_codec_data overo_codec_data = { - .audio = &overo_audio_data, - }; - --/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ -- - static struct twl4030_madc_platform_data overo_madc_data = { - .irq_line = 1, - }; -@@ -381,6 +530,8 @@ static struct twl4030_platform_data overo_twldata = { - .usb = &overo_usb_data, - .codec = &overo_codec_data, - .vmmc1 = &overo_vmmc1, -+ .vdac = &overo_vdac, -+ .vpll2 = &overo_vpll2, - }; - - static struct i2c_board_info __initdata overo_i2c_boardinfo[] = { -@@ -401,23 +552,41 @@ static int __init overo_i2c_init(void) - return 0; - } - --static struct platform_device overo_lcd_device = { -- .name = "overo_lcd", -- .id = -1, --}; -- --static struct omap_lcd_config overo_lcd_config __initdata = { -- .ctrl_name = "internal", -+static struct spi_board_info overo_spi_board_info[] __initdata = { -+#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ -+ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) -+ { -+ .modalias = "ads7846", -+ .bus_num = 1, -+ .chip_select = 0, -+ .max_speed_hz = 1500000, -+ .controller_data = &ads7846_mcspi_config, -+ .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), -+ .platform_data = &ads7846_config, -+ }, -+#endif -+#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ -+ defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) -+ { -+ .modalias = "lgphilips_lb035q02_panel-spi", -+ .bus_num = 1, -+ .chip_select = 1, -+ .max_speed_hz = 500000, -+ .mode = SPI_MODE_3, -+ }, -+#endif - }; - --static struct omap_board_config_kernel overo_config[] __initdata = { -- { OMAP_TAG_LCD, &overo_lcd_config }, --}; -+static int __init overo_spi_init(void) -+{ -+ overo_ads7846_init(); -+ spi_register_board_info(overo_spi_board_info, -+ ARRAY_SIZE(overo_spi_board_info)); -+ return 0; -+} - - static void __init overo_init_irq(void) - { -- omap_board_config = overo_config; -- omap_board_config_size = ARRAY_SIZE(overo_config); - omap2_init_common_infrastructure(); - omap2_init_common_devices(mt46h32m32lf6_sdrc_params, - mt46h32m32lf6_sdrc_params); -@@ -425,7 +594,7 @@ static void __init overo_init_irq(void) - } - - static struct platform_device *overo_devices[] __initdata = { -- &overo_lcd_device, -+ &overo_dss_device, - }; - - static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { -@@ -466,8 +635,9 @@ static void __init overo_init(void) - overo_flash_init(); - usb_musb_init(&musb_board_data); - usb_ehci_init(&ehci_pdata); -- overo_ads7846_init(); -+ overo_spi_init(); - overo_init_smsc911x(); -+ overo_display_init(); - - /* Ensure SDRC pins are mux'd for self-refresh */ - omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); -@@ -510,7 +680,7 @@ static void __init overo_init(void) - "OVERO_GPIO_USBH_CPEN\n"); - } - --MACHINE_START(OVERO, "Gumstix Overo") -+MACHINE_START(OVERO, "Gumstsix Overo") - .boot_params = 0x80000100, - .map_io = omap3_map_io, - .reserve = omap_reserve, --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch b/recipes-bsp/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch new file mode 100644 index 0000000000..8f672d9a8e --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch @@ -0,0 +1,34 @@ +From ec3e66ef2e222feb0408f16a3498be1ea9b6a9c0 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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-bsp/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch b/recipes-bsp/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch new file mode 100644 index 0000000000..ff2ab55633 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/base/0028-OMAP-DSS2-Add-DSS2-support-for-Overo.patch @@ -0,0 +1,355 @@ +From 9b2bfa418f2e1b7ed3e210cb7cba3cdd67f9925f Mon Sep 17 00:00:00 2001 +From: Steve Sakoman +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 + #include + #include ++#include + + #include + #include +@@ -41,10 +42,13 @@ + + #include + #include ++#include + #include + #include + #include + #include ++#include ++#include + #include + + #include "mux.h" +@@ -68,8 +72,6 @@ + #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ + defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) + +-#include +-#include + #include + + static struct omap2_mcspi_device_config ads7846_mcspi_config = { +@@ -94,18 +96,6 @@ static struct ads7846_platform_data ads7846_config = { + .keep_vref_on = 1, + }; + +-static struct spi_board_info overo_spi_board_info[] __initdata = { +- { +- .modalias = "ads7846", +- .bus_num = 1, +- .chip_select = 0, +- .max_speed_hz = 1500000, +- .controller_data = &ads7846_mcspi_config, +- .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), +- .platform_data = &ads7846_config, +- } +-}; +- + static void __init overo_ads7846_init(void) + { + if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) && +@@ -115,9 +105,6 @@ static void __init overo_ads7846_init(void) + printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n"); + return; + } +- +- spi_register_board_info(overo_spi_board_info, +- ARRAY_SIZE(overo_spi_board_info)); + } + + #else +@@ -233,6 +220,139 @@ static inline void __init overo_init_smsc911x(void) + static inline void __init overo_init_smsc911x(void) { return; } + #endif + ++/* DSS */ ++static int lcd_enabled; ++static int dvi_enabled; ++ ++#define OVERO_GPIO_LCD_EN 144 ++#define OVERO_GPIO_LCD_BL 145 ++ ++static void __init overo_display_init(void) ++{ ++ if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) && ++ (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0)) ++ gpio_export(OVERO_GPIO_LCD_EN, 0); ++ else ++ printk(KERN_ERR "could not obtain gpio for " ++ "OVERO_GPIO_LCD_EN\n"); ++ ++ if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) && ++ (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0)) ++ gpio_export(OVERO_GPIO_LCD_BL, 0); ++ else ++ printk(KERN_ERR "could not obtain gpio for " ++ "OVERO_GPIO_LCD_BL\n"); ++} ++ ++static int overo_panel_enable_dvi(struct omap_dss_device *dssdev) ++{ ++ if (lcd_enabled) { ++ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n"); ++ return -EINVAL; ++ } ++ dvi_enabled = 1; ++ ++ return 0; ++} ++ ++static void overo_panel_disable_dvi(struct omap_dss_device *dssdev) ++{ ++ dvi_enabled = 0; ++} ++ ++static struct omap_dss_device overo_dvi_device = { ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .name = "dvi", ++ .driver_name = "generic_panel", ++ .phy.dpi.data_lines = 24, ++ .platform_enable = overo_panel_enable_dvi, ++ .platform_disable = overo_panel_disable_dvi, ++}; ++ ++static struct omap_dss_device overo_tv_device = { ++ .name = "tv", ++ .driver_name = "venc", ++ .type = OMAP_DISPLAY_TYPE_VENC, ++ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, ++}; ++ ++static int overo_panel_enable_lcd(struct omap_dss_device *dssdev) ++{ ++ if (dvi_enabled) { ++ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); ++ return -EINVAL; ++ } ++ ++ gpio_set_value(OVERO_GPIO_LCD_EN, 1); ++ gpio_set_value(OVERO_GPIO_LCD_BL, 1); ++ lcd_enabled = 1; ++ return 0; ++} ++ ++static void overo_panel_disable_lcd(struct omap_dss_device *dssdev) ++{ ++ gpio_set_value(OVERO_GPIO_LCD_EN, 0); ++ gpio_set_value(OVERO_GPIO_LCD_BL, 0); ++ lcd_enabled = 0; ++} ++ ++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ ++ defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) ++static struct omap_dss_device overo_lcd35_device = { ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .name = "lcd35", ++ .driver_name = "lgphilips_lb035q02_panel", ++ .phy.dpi.data_lines = 24, ++ .platform_enable = overo_panel_enable_lcd, ++ .platform_disable = overo_panel_disable_lcd, ++}; ++#endif ++ ++#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \ ++ defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE) ++static struct omap_dss_device overo_lcd43_device = { ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .name = "lcd43", ++ .driver_name = "samsung_lte_panel", ++ .phy.dpi.data_lines = 24, ++ .platform_enable = overo_panel_enable_lcd, ++ .platform_disable = overo_panel_disable_lcd, ++}; ++#endif ++ ++static struct omap_dss_device *overo_dss_devices[] = { ++ &overo_dvi_device, ++ &overo_tv_device, ++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ ++ defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) ++ &overo_lcd35_device, ++#endif ++#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \ ++ defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE) ++ &overo_lcd43_device, ++#endif ++}; ++ ++static struct omap_dss_board_info overo_dss_data = { ++ .num_devices = ARRAY_SIZE(overo_dss_devices), ++ .devices = overo_dss_devices, ++ .default_device = &overo_dvi_device, ++}; ++ ++static struct platform_device overo_dss_device = { ++ .name = "omapdss", ++ .id = -1, ++ .dev = { ++ .platform_data = &overo_dss_data, ++ }, ++}; ++ ++static struct regulator_consumer_supply overo_vdda_dac_supply = ++ REGULATOR_SUPPLY("vdda_dac", "omapdss"); ++ ++static struct regulator_consumer_supply overo_vdds_dsi_supply = ++ REGULATOR_SUPPLY("vdds_dsi", "omapdss"); ++ + static struct mtd_partition overo_nand_partitions[] = { + { + .name = "xloader", +@@ -358,6 +478,37 @@ static struct regulator_init_data overo_vmmc1 = { + .consumer_supplies = &overo_vmmc1_supply, + }; + ++/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */ ++static struct regulator_init_data overo_vdac = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &overo_vdda_dac_supply, ++}; ++ ++/* VPLL2 for digital video outputs */ ++static struct regulator_init_data overo_vpll2 = { ++ .constraints = { ++ .name = "VDVI", ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &overo_vdds_dsi_supply, ++}; ++ ++/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ ++ + static struct twl4030_codec_audio_data overo_audio_data = { + .audio_mclk = 26000000, + }; +@@ -367,8 +518,6 @@ static struct twl4030_codec_data overo_codec_data = { + .audio = &overo_audio_data, + }; + +-/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ +- + static struct twl4030_madc_platform_data overo_madc_data = { + .irq_line = 1, + }; +@@ -381,6 +530,8 @@ static struct twl4030_platform_data overo_twldata = { + .usb = &overo_usb_data, + .codec = &overo_codec_data, + .vmmc1 = &overo_vmmc1, ++ .vdac = &overo_vdac, ++ .vpll2 = &overo_vpll2, + }; + + static struct i2c_board_info __initdata overo_i2c_boardinfo[] = { +@@ -401,23 +552,41 @@ static int __init overo_i2c_init(void) + return 0; + } + +-static struct platform_device overo_lcd_device = { +- .name = "overo_lcd", +- .id = -1, +-}; +- +-static struct omap_lcd_config overo_lcd_config __initdata = { +- .ctrl_name = "internal", ++static struct spi_board_info overo_spi_board_info[] __initdata = { ++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ ++ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) ++ { ++ .modalias = "ads7846", ++ .bus_num = 1, ++ .chip_select = 0, ++ .max_speed_hz = 1500000, ++ .controller_data = &ads7846_mcspi_config, ++ .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN), ++ .platform_data = &ads7846_config, ++ }, ++#endif ++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \ ++ defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) ++ { ++ .modalias = "lgphilips_lb035q02_panel-spi", ++ .bus_num = 1, ++ .chip_select = 1, ++ .max_speed_hz = 500000, ++ .mode = SPI_MODE_3, ++ }, ++#endif + }; + +-static struct omap_board_config_kernel overo_config[] __initdata = { +- { OMAP_TAG_LCD, &overo_lcd_config }, +-}; ++static int __init overo_spi_init(void) ++{ ++ overo_ads7846_init(); ++ spi_register_board_info(overo_spi_board_info, ++ ARRAY_SIZE(overo_spi_board_info)); ++ return 0; ++} + + static void __init overo_init_irq(void) + { +- omap_board_config = overo_config; +- omap_board_config_size = ARRAY_SIZE(overo_config); + omap2_init_common_infrastructure(); + omap2_init_common_devices(mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params); +@@ -425,7 +594,7 @@ static void __init overo_init_irq(void) + } + + static struct platform_device *overo_devices[] __initdata = { +- &overo_lcd_device, ++ &overo_dss_device, + }; + + static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { +@@ -466,8 +635,9 @@ static void __init overo_init(void) + overo_flash_init(); + usb_musb_init(&musb_board_data); + usb_ehci_init(&ehci_pdata); +- overo_ads7846_init(); ++ overo_spi_init(); + overo_init_smsc911x(); ++ overo_display_init(); + + /* Ensure SDRC pins are mux'd for self-refresh */ + omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); +@@ -510,7 +680,7 @@ static void __init overo_init(void) + "OVERO_GPIO_USBH_CPEN\n"); + } + +-MACHINE_START(OVERO, "Gumstix Overo") ++MACHINE_START(OVERO, "Gumstsix Overo") + .boot_params = 0x80000100, + .map_io = omap3_map_io, + .reserve = omap_reserve, +-- +1.6.6.1 + diff --git a/recipes-bsp/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch b/recipes-bsp/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch index 868906c9ad..eafc4d30c6 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch @@ -1,7 +1,7 @@ -From 405be95c4b7c397815b20052dbaa43ce36c1a724 Mon Sep 17 00:00:00 2001 +From 8548db6d3cf115b29142f803d701122dc4cbb775 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 31 Dec 2010 13:35:02 +0530 -Subject: [PATCH 01/19] OMAP3: PM: Adding T2 enabling of smartreflex +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. diff --git a/recipes-bsp/linux/linux-omap/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch b/recipes-bsp/linux/linux-omap/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch deleted file mode 100644 index f9236394a7..0000000000 --- a/recipes-bsp/linux/linux-omap/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch +++ /dev/null @@ -1,38 +0,0 @@ -From fe693a9d05c58aa7e5157f695b9af00688a2b91d Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Thu, 6 Jan 2011 13:05:55 +0100 -Subject: [PATCH 1/4] omap3: add support for 720MHz MPU OPP - -The 720MHz capability can be probed run-time by reading the -PRODID.SKUID[3:0] at 0x4830A20C. - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/opp3xxx_data.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c -index fd3a1af..a861f5e 100644 ---- a/arch/arm/mach-omap2/opp3xxx_data.c -+++ b/arch/arm/mach-omap2/opp3xxx_data.c -@@ -34,6 +34,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 +61,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[] = { --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch b/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch index cf3cae6241..b6512a5eec 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch @@ -1,7 +1,7 @@ -From a1df976c51e22bed9d95fcb07832571ef3520f2a Mon Sep 17 00:00:00 2001 +From e446cbf4aa8359d58180a81282df70045b8a41c1 Mon Sep 17 00:00:00 2001 From: Peter 'p2' De Schrijver Date: Wed, 11 Aug 2010 17:02:43 -0700 -Subject: [PATCH 02/19] OMAP: CPUfreq: ensure driver initializes after cpufreq framework and governors +Subject: [PATCH 02/20] OMAP: CPUfreq: ensure driver initializes after cpufreq framework and governors Signed-off-by: Peter 'p2' De Schrijver Signed-off-by: Kevin Hilman diff --git a/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch b/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch deleted file mode 100644 index c771b09159..0000000000 --- a/recipes-bsp/linux/linux-omap/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch +++ /dev/null @@ -1,90 +0,0 @@ -From 154571d1620731a3207da126eb4f139a1534f293 Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Thu, 6 Jan 2011 13:13:18 +0100 -Subject: [PATCH 2/4] OMAP35x: Add support for 720MHz part - -This patch adds support for ARM running at 720MHz part. - -The 720MHz capability can be probed run-time by reading the -PRODID.SKUID[3:0] at 0x4830A20C. - - [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf - -This is a forward port of https://patchwork.kernel.org/patch/53125/ - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/control.h | 7 +++++++ - arch/arm/mach-omap2/id.c | 10 ++++++++++ - arch/arm/plat-omap/include/plat/cpu.h | 2 ++ - 3 files changed, 19 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h -index f0629ae..b9671d3 100644 ---- a/arch/arm/mach-omap2/control.h -+++ b/arch/arm/mach-omap2/control.h -@@ -365,7 +365,14 @@ - #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 - extern void __iomem *omap_ctrl_base_get(void); -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/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-bsp/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch b/recipes-bsp/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch index 61486e824d..c6826e3c4e 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch @@ -1,7 +1,7 @@ -From fe6bc036ebf31ca377051ff0ea99da3cdc66854f Mon Sep 17 00:00:00 2001 +From 647691beb64312327646a84dc161faf35935e7f7 Mon Sep 17 00:00:00 2001 From: Kevin Hilman Date: Wed, 11 Aug 2010 17:05:38 -0700 -Subject: [PATCH 03/19] OMAP: CPUfreq: ensure policy is fully initialized +Subject: [PATCH 03/20] OMAP: CPUfreq: ensure policy is fully initialized Ensure policy min/max/cur values are initialized when OMAP CPUfreq driver starts. diff --git a/recipes-bsp/linux/linux-omap/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch b/recipes-bsp/linux/linux-omap/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch deleted file mode 100644 index a2141bb841..0000000000 --- a/recipes-bsp/linux/linux-omap/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 1a97a3600227fd0b52ee3bfd67bac6dde034af0d Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Thu, 6 Jan 2011 13:23:45 +0100 -Subject: [PATCH 3/4] OMAP3: beagle C4: enable upto 720MHz OPP - -Beagle C4 uses a recent 3530 and the board design allows enabling 720MHz -OPP. tweak the default table to allow for higher OPP tables - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-omap3beagle.c | 35 +++++++++++++++++++++++++++++++ - 1 files changed, 35 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 9393e75..a0462b9 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -829,6 +829,41 @@ static void __init beagle_opp_init(void) - pr_err("%s: turbo OPPs enabled!\n", __func__); - } - } -+ /* Custom OPP enabled for C4 */ -+ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4) { -+ 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 720MHz */ -+ dev = &mh->od->pdev.dev; -+ r = opp_enable(dev, 720000000); -+ -+ /* Enable IVA 520MHz and lower opps */ -+ dev = &dh->od->pdev.dev; -+ r |= opp_enable(dev, 520000000); -+ } -+ 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, 720000000); -+ dev = &dh->od->pdev.dev; -+ opp_disable(dev, 520000000); -+ } else { -+ pr_err("%s: 720MHz MPU OPPs enabled!\n", __func__); -+ } -+ } -+ - } - - static void __init omap3_beagle_init(void) --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch b/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch deleted file mode 100644 index 11cc95fd4d..0000000000 --- a/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch +++ /dev/null @@ -1,103 +0,0 @@ -From ba484e6276ba5089a0397aad845ae5be80850bac Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Wed, 12 Jan 2011 17:04:04 +0100 -Subject: [PATCH 4/4] OMAP3: Overo Tide: enable upto 720MHz OPP - -Overo Tide uses a recent 3530 and the board design allows enabling 720MHz -OPP. tweak the default table to allow for higher OPP tables - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-overo.c | 51 +++++++++++++++++++++++++++++++++++++ - 1 files changed, 51 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c -index 8a44c17..d6d8619 100644 ---- a/arch/arm/mach-omap2/board-overo.c -+++ b/arch/arm/mach-omap2/board-overo.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -50,10 +51,12 @@ - #include - #include - #include -+#include - - #include "mux.h" - #include "sdram-micron-mt46h32m32lf-6.h" - #include "hsmmc.h" -+#include "pm.h" - - #define OVERO_GPIO_BT_XGATE 15 - #define OVERO_GPIO_W2W_NRESET 16 -@@ -626,6 +629,53 @@ static struct omap_musb_board_data musb_board_data = { - .power = 100, - }; - -+static void __init overo_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 Tide */ -+ if (omap3_has_720mhz()) { -+ 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 720MHz */ -+ dev = &mh->od->pdev.dev; -+ r = opp_enable(dev, 720000000); -+ -+ /* Enable IVA 520MHz and lower opps */ -+ dev = &dh->od->pdev.dev; -+ r |= opp_enable(dev, 520000000); -+ } -+ 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, 720000000); -+ dev = &dh->od->pdev.dev; -+ opp_disable(dev, 520000000); -+ } else { -+ pr_err("%s: 720MHz MPU OPPs enabled!\n", __func__); -+ } -+ } -+ -+} -+ - static void __init overo_init(void) - { - omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); -@@ -678,6 +728,7 @@ static void __init overo_init(void) - else - printk(KERN_ERR "could not obtain gpio for " - "OVERO_GPIO_USBH_CPEN\n"); -+ overo_opp_init(); - } - - MACHINE_START(OVERO, "Gumstsix Overo") --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch b/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch index c4eb1a09b6..0371bc3aa2 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch @@ -1,7 +1,7 @@ -From f7580811a6d3ac015a8401388124e746651ab64c Mon Sep 17 00:00:00 2001 +From f6b96e3b9e31da193189d92320b3dd9fac7c9ba9 Mon Sep 17 00:00:00 2001 From: Rajendra Nayak Date: Mon, 10 Nov 2008 17:00:25 +0530 -Subject: [PATCH 04/19] OMAP3 PM: CPUFreq driver for OMAP3 +Subject: [PATCH 04/20] OMAP3 PM: CPUFreq driver for OMAP3 CPUFreq driver for OMAP3 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch b/recipes-bsp/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch index e0c5da39db..b843704e57 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch @@ -1,7 +1,7 @@ -From 3a51f3ffe8299bcc28a6be1bdcd0e0ea39af2042 Mon Sep 17 00:00:00 2001 +From 25ea605d0aaf1d60030b4df122a3384c7878d86e Mon Sep 17 00:00:00 2001 From: Silesh C V Date: Wed, 29 Sep 2010 14:52:54 +0530 -Subject: [PATCH 05/19] OMAP: PM: CPUFREQ: Fix conditional compilation +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch b/recipes-bsp/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch index 31c57d76ea..516c7cb0bd 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch @@ -1,7 +1,7 @@ -From c37bb21e4f82e5d88af21f7dbcef407e7a9d5306 Mon Sep 17 00:00:00 2001 +From a4107498616e8dafa2a0155a6d45a990766b161b Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 29 Oct 2010 20:43:07 +0530 -Subject: [PATCH 06/19] OMAP: Introduce a user list for each voltage domain instance in the voltage driver. +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch b/recipes-bsp/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch index b7ea04a3c1..58842f25b4 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch @@ -1,7 +1,7 @@ -From 717bd73868e57fde49a25104af9bb8b9c6400b67 Mon Sep 17 00:00:00 2001 +From dac6c4c03140835b758e32c72eb004d379c35fec Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 29 Oct 2010 20:43:10 +0530 -Subject: [PATCH 07/19] OMAP: Introduce API in the OPP layer to find the opp entry corresponding to a voltage. +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. diff --git a/recipes-bsp/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch b/recipes-bsp/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch index b69e6f6af9..d00751d46c 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch @@ -1,7 +1,7 @@ -From be5bdabb6206f106f0dcf91b0e90474d23773416 Mon Sep 17 00:00:00 2001 +From 3fcad983e7df504ecb1d0db79e3fe2e3abc44850 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 29 Oct 2010 20:43:24 +0530 -Subject: [PATCH 08/19] OMAP: Introduce API to register a device with a voltagedomain +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch b/recipes-bsp/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch index 308710af14..f5914aa313 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch @@ -1,7 +1,7 @@ -From 50f4db415d1ee9ee5100214cc89cf5df1ee1c1e2 Mon Sep 17 00:00:00 2001 +From 6ec7cf889c9a8ddf97fbbcbda4888b0f17930e04 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 29 Oct 2010 20:43:29 +0530 -Subject: [PATCH 09/19] OMAP: Introduce device specific set rate and get rate in omap_device structure +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch b/recipes-bsp/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch index f50aedd9d6..ead9cbba0d 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch @@ -1,7 +1,7 @@ -From 3a9b78f58772645a9e1337454faed4e313e55368 Mon Sep 17 00:00:00 2001 +From 96ee5b07e3162056169689b363f4c0edae7d7303 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 29 Oct 2010 20:43:34 +0530 -Subject: [PATCH 10/19] OMAP: Voltage layer changes to support DVFS. +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch b/recipes-bsp/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch index 814643f79d..6c4ca2ab97 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch @@ -1,7 +1,7 @@ -From 444b19e90ae45ccd68c84285fe8339d797a08911 Mon Sep 17 00:00:00 2001 +From b1b41c78d5a19260605fcb259a51ca7cd71c097a Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 2 Jul 2010 13:06:57 +0530 -Subject: [PATCH 11/19] OMAP: Introduce dependent voltage domain support. +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch b/recipes-bsp/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch index e96d064b54..a6d35bd6ec 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0012-OMAP-Introduce-device-scale.patch @@ -1,7 +1,7 @@ -From 40c41b250b9430b9d9998751fdf7e03201d1784e Mon Sep 17 00:00:00 2001 +From b461bd17384c73bbb243c54bf1d6466c94e594c3 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 2 Jul 2010 13:07:35 +0530 -Subject: [PATCH 12/19] OMAP: Introduce device scale +Subject: [PATCH 12/20] OMAP: Introduce device scale This patch adds omap_device_scale API which can be used to generic device rate scaling. diff --git a/recipes-bsp/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch b/recipes-bsp/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch index 3be289dcbb..89384a8e6b 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch @@ -1,7 +1,7 @@ -From 72eb0b4978e15f56c99900ec8da10b91864eda98 Mon Sep 17 00:00:00 2001 +From 4c68660aa69a5eaeaff7fda7e2297e2d31de0333 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 2 Jul 2010 13:06:57 +0530 -Subject: [PATCH 13/19] OMAP: Disable smartreflex across DVFS +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch b/recipes-bsp/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch index 20e03866fd..16335ccb44 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch @@ -1,7 +1,7 @@ -From 42e395f0dcc618300267f440f613572635eb2e55 Mon Sep 17 00:00:00 2001 +From 6fb7bd2b3da02e6e799d3c7661a1acb6572f9add Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Wed, 18 Aug 2010 16:22:32 +0530 -Subject: [PATCH 14/19] OMAP3: Introduce custom set rate and get rate APIs for scalable devices +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, diff --git a/recipes-bsp/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch b/recipes-bsp/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch index 90e29e7aeb..4b9ff5d894 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch @@ -1,7 +1,7 @@ -From 0c5c41f6bcf77b388f49615ac28ccde294e7a5bd Mon Sep 17 00:00:00 2001 +From d8fae1dcedb636a37096ee92e6b81b112d5f32a5 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Fri, 2 Jul 2010 13:07:49 +0530 -Subject: [PATCH 15/19] OMAP3: Update cpufreq driver to use the new set_rate API +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. diff --git a/recipes-bsp/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch b/recipes-bsp/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch index e8b9e51ab6..fe856527e8 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch @@ -1,7 +1,7 @@ -From a66e4a5a5ee1d98fafab60935bddd28bbd440628 Mon Sep 17 00:00:00 2001 +From b54b316174e1d59a820e68c45c4abfc1336d8e09 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Wed, 18 Aug 2010 16:22:43 +0530 -Subject: [PATCH 16/19] OMAP3: Introduce voltage domain info in the hwmod structures. +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch b/recipes-bsp/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch index e1e4a0ec80..6899939166 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch @@ -1,7 +1,7 @@ -From 6e99ca0e5780932988471f106099c98595cb0aa3 Mon Sep 17 00:00:00 2001 +From c196a4ac3941fb9af4654d5d028ad21f4b91d721 Mon Sep 17 00:00:00 2001 From: Thara Gopinath Date: Wed, 18 Aug 2010 16:22:49 +0530 -Subject: [PATCH 17/19] OMAP3: Add voltage dependency table for VDD1. +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch b/recipes-bsp/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch index d60222e027..e21fe96490 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch @@ -1,7 +1,7 @@ -From 53d08ca85f9b623e25ba9a976bc3315f3784a3a7 Mon Sep 17 00:00:00 2001 +From 16c7667d2908631149ef38b7b6dd7b08d6d5502e Mon Sep 17 00:00:00 2001 From: Nishanth Menon Date: Wed, 5 Jan 2011 14:14:55 -0600 -Subject: [PATCH 18/19] omap3|4: opp: make omapx_opp_init non-static +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 diff --git a/recipes-bsp/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch b/recipes-bsp/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch index 27104c33e5..9d1fa917bb 100644 --- a/recipes-bsp/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch +++ b/recipes-bsp/linux/linux-omap/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch @@ -1,7 +1,7 @@ -From 1f77cf1150d5e0205ab3f588ab25cbdf65acdc40 Mon Sep 17 00:00:00 2001 +From 897e90138695dccac0dca1601542fd5f4c85b657 Mon Sep 17 00:00:00 2001 From: Nishanth Menon Date: Wed, 5 Jan 2011 14:16:59 -0600 -Subject: [PATCH 19/19] OMAP3: beagle xm: enable upto 1GHz OPP +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 @@ -13,7 +13,7 @@ Signed-off-by: Nishanth Menon 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 006dc26..9393e75 100644 +index ad0c1d8..1e0870e 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -24,6 +24,7 @@ @@ -37,7 +37,7 @@ index 006dc26..9393e75 100644 #define NAND_BLOCK_SIZE SZ_128K -@@ -778,6 +781,56 @@ static int __init expansionboard_setup(char *str) +@@ -804,6 +807,56 @@ static int __init expansionboard_setup(char *str) return 0; } @@ -94,7 +94,7 @@ index 006dc26..9393e75 100644 static void __init omap3_beagle_init(void) { omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); -@@ -850,6 +903,7 @@ static void __init omap3_beagle_init(void) +@@ -876,6 +929,7 @@ static void __init omap3_beagle_init(void) omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); beagle_display_init(); diff --git a/recipes-bsp/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch b/recipes-bsp/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch new file mode 100644 index 0000000000..107e11622c --- /dev/null +++ b/recipes-bsp/linux/linux-omap/dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch @@ -0,0 +1,202 @@ +From bb655c594a2f77b17d0747116795f46e00d5ffcb Mon Sep 17 00:00:00 2001 +From: Sanjeev Premi +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 +--- + 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 ++#include + + #include ++#include + + #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@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@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-bsp/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch b/recipes-bsp/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch index 25952cc44a..845a4f9ce9 100644 --- a/recipes-bsp/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch +++ b/recipes-bsp/linux/linux-omap/linus/0001-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch @@ -1,7 +1,7 @@ -From a74b74a5555c741ed3df896096e33b853995631e Mon Sep 17 00:00:00 2001 +From 679fd7bc2af7980a4b9360ff42f515c3cc4e3674 Mon Sep 17 00:00:00 2001 From: Lennert Buytenhek Date: Wed, 15 Dec 2010 07:20:16 +0800 -Subject: [PATCH 01/66] ARM: pxa: PXA_ESERIES depends on FB_W100. +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch b/recipes-bsp/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch index 18a31eec6d..19b1a6c679 100644 --- a/recipes-bsp/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch +++ b/recipes-bsp/linux/linux-omap/linus/0002-ARM-smp-avoid-incrementing-mm_users-on-CPU-startup.patch @@ -1,7 +1,7 @@ -From 1ae1b5f053cf36bd0f913e83f3b136fec8152d4d Mon Sep 17 00:00:00 2001 +From d7bbfe094baebc1515d3919a1e886fcfa655ff5a Mon Sep 17 00:00:00 2001 From: Russell King Date: Sat, 18 Dec 2010 13:57:00 +0000 -Subject: [PATCH 02/66] ARM: smp: avoid incrementing mm_users on CPU startup +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch b/recipes-bsp/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch index 1e3e26b538..d31b0e69af 100644 --- a/recipes-bsp/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch +++ b/recipes-bsp/linux/linux-omap/linus/0003-ARM-get-rid-of-kmap_high_l1_vipt.patch @@ -1,7 +1,7 @@ -From 39af22a79232373764904576f31572f1db76af10 Mon Sep 17 00:00:00 2001 +From b4edc88b911049a85162600f579d0364ee311d4e Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Wed, 15 Dec 2010 15:14:45 -0500 -Subject: [PATCH 03/66] ARM: get rid of kmap_high_l1_vipt() +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch b/recipes-bsp/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch index 8dccad065d..32643f67a3 100644 --- a/recipes-bsp/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch +++ b/recipes-bsp/linux/linux-omap/linus/0004-ARM-fix-cache-xsc3l2-after-stack-based-kmap_atomic.patch @@ -1,7 +1,7 @@ -From 25cbe45440ea89a3b0f6f7ed326d3d476d53068b Mon Sep 17 00:00:00 2001 +From fc077c0fbb09ca255691d05789076d121ae11789 Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Wed, 15 Dec 2010 23:29:04 -0500 -Subject: [PATCH 04/66] ARM: fix cache-xsc3l2 after stack based kmap_atomic() +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch b/recipes-bsp/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch index 03cb474182..a9fd1f02a3 100644 --- a/recipes-bsp/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch +++ b/recipes-bsp/linux/linux-omap/linus/0005-ARM-fix-cache-feroceon-l2-after-stack-based-kmap_ato.patch @@ -1,7 +1,7 @@ -From 6d3e6d3640052cac958d61c44597cc216f6ee09f Mon Sep 17 00:00:00 2001 +From ccb2858c9bd5fff216feab665db14ca32be8d6fe Mon Sep 17 00:00:00 2001 From: Nicolas Pitre Date: Thu, 16 Dec 2010 14:56:34 -0500 -Subject: [PATCH 05/66] ARM: fix cache-feroceon-l2 after stack based kmap_atomic() +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch b/recipes-bsp/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch index 6abd601e84..8302e6c08a 100644 --- a/recipes-bsp/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch +++ b/recipes-bsp/linux/linux-omap/linus/0006-drm-i915-Set-the-required-VFMUNIT-clock-gating-disab.patch @@ -1,7 +1,7 @@ -From 06f37751af77192b424b2b0ff17dc08de65faba0 Mon Sep 17 00:00:00 2001 +From b4defd15cd77597734bab7089fa721fde6e3cfd5 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 14 Dec 2010 10:06:46 -0800 -Subject: [PATCH 06/66] drm/i915: Set the required VFMUNIT clock gating disable on Ironlake. +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch b/recipes-bsp/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch index 98012d6758..4e5120a11b 100644 --- a/recipes-bsp/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch +++ b/recipes-bsp/linux/linux-omap/linus/0007-drm-i915-sdvo-Add-hdmi-connector-properties-after-in.patch @@ -1,7 +1,7 @@ -From f797d22121404eac7b63f1291409f96bcab51c11 Mon Sep 17 00:00:00 2001 +From 184e12ee6bca758bee292970ed045d7a0405168c Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 23 Dec 2010 09:43:48 +0000 -Subject: [PATCH 07/66] drm/i915/sdvo: Add hdmi connector properties after initing the connector +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch b/recipes-bsp/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch index f28473b519..9fecb7b839 100644 --- a/recipes-bsp/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch +++ b/recipes-bsp/linux/linux-omap/linus/0008-drm-i915-intel_ips-When-i915-loads-after-IPS-make-IP.patch @@ -1,7 +1,7 @@ -From 63ee41d794d9c555f84205517a68509848988760 Mon Sep 17 00:00:00 2001 +From 38684934e58030113d3e89a3f60472e22e2e1ea6 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Mon, 20 Dec 2010 18:40:06 -0800 -Subject: [PATCH 08/66] drm/i915, intel_ips: When i915 loads after IPS, make IPS relink to i915. +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch b/recipes-bsp/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch index 7a9caf6e0f..e0f4515ea1 100644 --- a/recipes-bsp/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch +++ b/recipes-bsp/linux/linux-omap/linus/0009-drm-i915-Verify-Ironlake-eDP-presence-on-DP_A-using-.patch @@ -1,7 +1,7 @@ -From 4d3024428f5c3ef5295e6f6fb257ae118b3f93a1 Mon Sep 17 00:00:00 2001 +From b3ae260de2254a0aed982b5964396a9914859c0e Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 14 Dec 2010 19:21:29 +0000 -Subject: [PATCH 09/66] drm/i915: Verify Ironlake eDP presence on DP_A using the capability fuse +Subject: [PATCH 09/65] drm/i915: Verify Ironlake eDP presence on DP_A using the capability fuse Signed-off-by: Chris Wilson --- diff --git a/recipes-bsp/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch b/recipes-bsp/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch index 11d6a44d95..1eeffc28d5 100644 --- a/recipes-bsp/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch +++ b/recipes-bsp/linux/linux-omap/linus/0010-ARM-6536-1-Add-missing-SZ_-32-64-128.patch @@ -1,7 +1,7 @@ -From 537de3a67c0c86586eacffde40673b727242dc3a Mon Sep 17 00:00:00 2001 +From 233828cbb5d2331e47cba932130428ea5f915f91 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Wed, 22 Dec 2010 04:52:05 +0100 -Subject: [PATCH 10/66] ARM: 6536/1: Add missing SZ_{32,64,128} +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch b/recipes-bsp/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch index 8d7500307d..99a9ce2af5 100644 --- a/recipes-bsp/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch +++ b/recipes-bsp/linux/linux-omap/linus/0011-ARM-6537-1-update-Nomadik-U300-and-Ux500-maintainers.patch @@ -1,7 +1,7 @@ -From 875728807ff001b67a1e0535de5ad2cd3c41d47c Mon Sep 17 00:00:00 2001 +From 1efad2ad25ed60a4d90a87f7e77babb808b3052f Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Wed, 22 Dec 2010 09:18:29 +0100 -Subject: [PATCH 11/66] ARM: 6537/1: update Nomadik, U300 and Ux500 maintainers +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 @@ -16,7 +16,7 @@ Signed-off-by: Russell King 1 files changed, 16 insertions(+), 1 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS -index 6a58887..4323f8f 100644 +index 4607f18..1c15602 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -792,11 +792,14 @@ S: Maintained diff --git a/recipes-bsp/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch b/recipes-bsp/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch index f2d4a0d420..0e55c525dc 100644 --- a/recipes-bsp/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch +++ b/recipes-bsp/linux/linux-omap/linus/0012-ARM-6540-1-Stop-irqsoff-trace-on-return-to-user.patch @@ -1,7 +1,7 @@ -From d13e5edd7284bedcf5952e1b6490e39ad843cb91 Mon Sep 17 00:00:00 2001 +From d0427fe2982e2f4f644b936fe39636916b69fee1 Mon Sep 17 00:00:00 2001 From: Todd Android Poynor Date: Thu, 23 Dec 2010 01:52:44 +0100 -Subject: [PATCH 12/66] ARM: 6540/1: Stop irqsoff trace on return to user +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch b/recipes-bsp/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch index 00ddde54e4..e62a9d8c8b 100644 --- a/recipes-bsp/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch +++ b/recipes-bsp/linux/linux-omap/linus/0013-ueagle-atm-fix-PHY-signal-initialization-race.patch @@ -1,7 +1,7 @@ -From 12f188f2e59394ec1f1c8c0a4439f48ec16bc336 Mon Sep 17 00:00:00 2001 +From c23a13703fb00384d49a00875fc12a5e00f1946a Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sun, 19 Dec 2010 08:17:50 +0000 -Subject: [PATCH 13/66] ueagle-atm: fix PHY signal initialization race +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch b/recipes-bsp/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch index d3258e10a5..24557a3ef9 100644 --- a/recipes-bsp/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch +++ b/recipes-bsp/linux/linux-omap/linus/0014-ehea-Avoid-changing-vlan-flags.patch @@ -1,7 +1,7 @@ -From c4711786986af0cce654f493426ee0a1055e4b17 Mon Sep 17 00:00:00 2001 +From a6b08e88ed5a716b2f27989c949cdfa0704c1dfd Mon Sep 17 00:00:00 2001 From: Breno Leitao Date: Mon, 20 Dec 2010 09:02:37 +0000 -Subject: [PATCH 14/66] ehea: Avoid changing vlan flags +Subject: [PATCH 14/65] ehea: Avoid changing vlan flags This patch avoids disabling the vlan flags using ethtool. diff --git a/recipes-bsp/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch b/recipes-bsp/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch index cfcac457e1..b06d2c56da 100644 --- a/recipes-bsp/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch +++ b/recipes-bsp/linux/linux-omap/linus/0015-ppp-allow-disabling-multilink-protocol-ID-compressio.patch @@ -1,7 +1,7 @@ -From d39cd5e99a0ad88aba6793fb5e5f34e29cda6e6f Mon Sep 17 00:00:00 2001 +From 3b4878d988f13c50a8a6d68e9359eb28cc432a4f Mon Sep 17 00:00:00 2001 From: stephen hemminger Date: Mon, 20 Dec 2010 17:58:33 +0000 -Subject: [PATCH 15/66] ppp: allow disabling multilink protocol ID compression +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch b/recipes-bsp/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch index 55b887a78f..951a281315 100644 --- a/recipes-bsp/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch +++ b/recipes-bsp/linux/linux-omap/linus/0016-skfp-testing-the-wrong-variable-in-skfp_driver_init.patch @@ -1,7 +1,7 @@ -From 4a5fc4e179d79c79ad87bfc12a2d7e9b2371e40c Mon Sep 17 00:00:00 2001 +From 276d3ef4021021959540cdb7a5041c477432d29e Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 23 Dec 2010 19:17:34 +0000 -Subject: [PATCH 16/66] skfp: testing the wrong variable in skfp_driver_init() +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch b/recipes-bsp/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch index 59adbc736a..bb5a944fe4 100644 --- a/recipes-bsp/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch +++ b/recipes-bsp/linux/linux-omap/linus/0017-ASoC-codecs-Add-missing-control_type-initialization.patch @@ -1,7 +1,7 @@ -From 7f984b55acb6530bf854bfcac13104228f3336c1 Mon Sep 17 00:00:00 2001 +From d03eac98a7ae4af982f3c19161f850effbfd0f57 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:08:57 +0100 -Subject: [PATCH 17/66] ASoC: codecs: Add missing control_type initialization +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch index 5080cc6737..5c139ab509 100644 --- a/recipes-bsp/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0018-ASoC-codecs-max98088-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From d24eb0db9c8a7ceecae860bdc636ed1e8a86943a Mon Sep 17 00:00:00 2001 +From 0ff8217bd7272d8aef1e58250d84cf5680b16b2d Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:37:56 +0100 -Subject: [PATCH 18/66] ASoC: codecs: max98088: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch index 6d40a00458..6ef2360a8b 100644 --- a/recipes-bsp/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0019-ASoC-codecs-wm8523-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From beebca312009e9567d5e0229ea6b82bdf9a864cf Mon Sep 17 00:00:00 2001 +From 50e75c326e4d3278b73385a3baf78fc4660d3610 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:37:57 +0100 -Subject: [PATCH 19/66] ASoC: codecs: wm8523: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch index 160440c69a..f4ee49ebf9 100644 --- a/recipes-bsp/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0020-ASoC-codecs-wm8741-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From 52ca353bc8597dcc1d6d7abc03eecc1b452d79c9 Mon Sep 17 00:00:00 2001 +From ed4250725ac617b420d25e2b4ca0958818a7cde9 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:37:58 +0100 -Subject: [PATCH 20/66] ASoC: codecs: wm8741: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch index 932f529da5..51363a40d0 100644 --- a/recipes-bsp/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0021-ASoC-codecs-wm8904-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From f578a188e8b21be623b48bb0eb3a92174c2e5b82 Mon Sep 17 00:00:00 2001 +From 2f369c65cdd41f8eda535cd4065edd63346a016b Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:37:59 +0100 -Subject: [PATCH 21/66] ASoC: codecs: wm8904: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch index e3b620f392..420b4cc218 100644 --- a/recipes-bsp/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0022-ASoC-codecs-wm8955-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From 715920d04c787ed718327da53cf51689e51ef3ce Mon Sep 17 00:00:00 2001 +From 8febc5cbe3b8d4a4a056df364e4a82958a6eb1df Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:38:00 +0100 -Subject: [PATCH 22/66] ASoC: codecs: wm8955: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch index 378668533a..3e7aa10c98 100644 --- a/recipes-bsp/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0023-ASoC-codecs-wm8962-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From 7f87e30ef29951f4509a7f86acf00e1ba48af54a Mon Sep 17 00:00:00 2001 +From 9760063610bb4890c0f88c1dd839ec1531706f33 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:38:01 +0100 -Subject: [PATCH 23/66] ASoC: codecs: wm8962: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch index c107a1dd5f..ad5aedd173 100644 --- a/recipes-bsp/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0024-ASoC-codecs-wm9090-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From da280f51d0b341282b4181eb3235f774b0446584 Mon Sep 17 00:00:00 2001 +From 2f2f23c75c1c055ca6274b04bd2dc71d0a6e8c62 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:38:02 +0100 -Subject: [PATCH 24/66] ASoC: codecs: wm9090: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch b/recipes-bsp/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch index bb8ca72cea..574c76ea98 100644 --- a/recipes-bsp/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch +++ b/recipes-bsp/linux/linux-omap/linus/0025-ASoC-codecs-wm8753-Fix-register-cache-incoherency.patch @@ -1,7 +1,7 @@ -From 776065e36de1d5eb9e33ff908352fef4050ab38d Mon Sep 17 00:00:00 2001 +From 0e07d2db08fa60b3e1bbc9837775feaf1cb8a381 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Tue, 28 Dec 2010 21:38:03 +0100 -Subject: [PATCH 25/66] ASoC: codecs: wm8753: Fix register cache incoherency +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch b/recipes-bsp/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch index dd2c9b32be..9372cf0595 100644 --- a/recipes-bsp/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch +++ b/recipes-bsp/linux/linux-omap/linus/0026-KVM-MMU-Fix-incorrect-direct-gfn-for-unpaged-mode-sh.patch @@ -1,7 +1,7 @@ -From 649497d1a3676020802ebba04a3d9bb31253adb5 Mon Sep 17 00:00:00 2001 +From 22c5ed7018eb4157e317c8513fe2ced2c8ec5e0c Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Tue, 28 Dec 2010 12:09:07 +0200 -Subject: [PATCH 26/66] KVM: MMU: Fix incorrect direct gfn for unpaged mode shadow +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch b/recipes-bsp/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch index 636f86ac1a..8ddca9c16d 100644 --- a/recipes-bsp/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch +++ b/recipes-bsp/linux/linux-omap/linus/0027-fix-freeing-user_struct-in-user-cache.patch @@ -1,7 +1,7 @@ -From 4ef9e11d6867f88951e30db910fa015300e31871 Mon Sep 17 00:00:00 2001 +From 2bffbb04acdf2e58726ba8192d468f2bda528fdf Mon Sep 17 00:00:00 2001 From: Hillf Danton Date: Wed, 29 Dec 2010 21:55:28 +0800 -Subject: [PATCH 27/66] fix freeing user_struct in user cache +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch b/recipes-bsp/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch index 467265eeb4..4c3acd7cc1 100644 --- a/recipes-bsp/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch +++ b/recipes-bsp/linux/linux-omap/linus/0028-spi-omap2_mcspi.c-Force-CS-to-be-in-inactive-state-a.patch @@ -1,7 +1,7 @@ -From 42ce7fd6319bed8ecb26d656c476365da46b29e9 Mon Sep 17 00:00:00 2001 +From 72ce69f5fe32170f9662b5c87b0226d6ba19462f Mon Sep 17 00:00:00 2001 From: Gregory CLEMENT Date: Wed, 29 Dec 2010 11:52:53 +0100 -Subject: [PATCH 28/66] spi/omap2_mcspi.c: Force CS to be in inactive state after off-mode transition +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch b/recipes-bsp/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch index 2e282cd882..c1af011240 100644 --- a/recipes-bsp/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch +++ b/recipes-bsp/linux/linux-omap/linus/0029-kconfig-fix-undesirable-side-effect-of-adding-visibl.patch @@ -1,7 +1,7 @@ -From 7ad1227818f09242cfe9bf1845fd24211f5f99bd Mon Sep 17 00:00:00 2001 +From 38f5b0c391281eded0e6e5b2bc75a28ae72d0abe Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Thu, 9 Dec 2010 08:11:38 +0000 -Subject: [PATCH 29/66] kconfig: fix undesirable side effect of adding "visible" menu attribute +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch b/recipes-bsp/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch index c911a2dc94..c6dcff2cec 100644 --- a/recipes-bsp/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch +++ b/recipes-bsp/linux/linux-omap/linus/0030-spi-m68knommu-Coldfire-QSPI-platform-support.patch @@ -1,7 +1,7 @@ -From 0bc463426ab5eb39e76df637b29a4f191d01b8a0 Mon Sep 17 00:00:00 2001 +From 806e90c4e5253095f9576113edc6fc78b2d5fec1 Mon Sep 17 00:00:00 2001 From: Jate Sujjavanich Date: Wed, 29 Sep 2010 09:44:32 -0400 -Subject: [PATCH 30/66] spi/m68knommu: Coldfire QSPI platform support +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch b/recipes-bsp/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch index 6f8bccee71..473a408d44 100644 --- a/recipes-bsp/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch +++ b/recipes-bsp/linux/linux-omap/linus/0031-sound-Prevent-buffer-overflow-in-OSS-load_mixer_volu.patch @@ -1,7 +1,7 @@ -From d81a12bc29ae4038770e05dce4ab7f26fd5880fb Mon Sep 17 00:00:00 2001 +From 6540a62434750fe29b877293e54dbf05c0fb54c4 Mon Sep 17 00:00:00 2001 From: Dan Rosenberg Date: Sat, 25 Dec 2010 16:23:40 -0500 -Subject: [PATCH 31/66] sound: Prevent buffer overflow in OSS load_mixer_volumes +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch b/recipes-bsp/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch index 51b8ceba69..048a3db1a0 100644 --- a/recipes-bsp/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch +++ b/recipes-bsp/linux/linux-omap/linus/0032-ALSA-hda-Use-LPIB-quirk-for-Dell-Inspiron-m101z-1120.patch @@ -1,7 +1,7 @@ -From e03fa055bc126e536c7f65862e08a9b143138ea9 Mon Sep 17 00:00:00 2001 +From 927b580b918babc2ecc22a1ae1b6deef428d933f Mon Sep 17 00:00:00 2001 From: Daniel T Chen Date: Tue, 28 Dec 2010 17:20:02 -0500 -Subject: [PATCH 32/66] ALSA: hda: Use LPIB quirk for Dell Inspiron m101z/1120 +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch b/recipes-bsp/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch index 1b33453388..ffffd87e16 100644 --- a/recipes-bsp/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch +++ b/recipes-bsp/linux/linux-omap/linus/0033-Revert-drm-i915-bios-Reverse-order-of-100-120-Mhz-SS.patch @@ -1,7 +1,7 @@ -From bcfbbce822d219eb587acaba8a6e062bbeae4761 Mon Sep 17 00:00:00 2001 +From 5cd3371a75c27fe5b105037b1a9a53b661a3624e Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 30 Dec 2010 09:07:15 +0000 -Subject: [PATCH 33/66] Revert "drm/i915/bios: Reverse order of 100/120 Mhz SSC clocks" +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch b/recipes-bsp/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch index 6c3d9105ee..8747c9f293 100644 --- a/recipes-bsp/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch +++ b/recipes-bsp/linux/linux-omap/linus/0034-drm-i915-dvo-Report-LVDS-attached-to-ch701x-as-conne.patch @@ -1,7 +1,7 @@ -From cc6455f82edd3f9da3b03870d41cde3cb22ad40d Mon Sep 17 00:00:00 2001 +From a5cbe1d2c6eede52b1773eefcff8e3c1c171b99b Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 30 Dec 2010 12:54:00 +0000 -Subject: [PATCH 34/66] drm/i915/dvo: Report LVDS attached to ch701x as connected +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch b/recipes-bsp/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch index 3f09d91a2e..5a5610b5eb 100644 --- a/recipes-bsp/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch +++ b/recipes-bsp/linux/linux-omap/linus/0035-update-Documentation-filesystems-Locking.patch @@ -1,7 +1,7 @@ -From b83be6f20a0e468f715b14225c9f897538dfe5ad Mon Sep 17 00:00:00 2001 +From 84a03bcb1f1fb5b6a9f6f508fa0a1fae41a5827a Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Thu, 16 Dec 2010 12:04:54 +0100 -Subject: [PATCH 35/66] update Documentation/filesystems/Locking +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch b/recipes-bsp/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch index d883d08f55..cbdc9bea6b 100644 --- a/recipes-bsp/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch +++ b/recipes-bsp/linux/linux-omap/linus/0036-memcg-fix-wrong-VM_BUG_ON-in-try_charge-s-mm-owner-c.patch @@ -1,7 +1,7 @@ -From ebb76ce16daf6908dc030dec1c00827d37129fe5 Mon Sep 17 00:00:00 2001 +From 06410121f430702f9f482331a1f6d9ba3ebe5911 Mon Sep 17 00:00:00 2001 From: KAMEZAWA Hiroyuki Date: Wed, 29 Dec 2010 14:07:11 -0800 -Subject: [PATCH 36/66] memcg: fix wrong VM_BUG_ON() in try_charge()'s mm->owner check +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch b/recipes-bsp/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch index 60dcf07e8a..03e390eb6e 100644 --- a/recipes-bsp/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch +++ b/recipes-bsp/linux/linux-omap/linus/0037-Revert-Staging-zram-work-around-oops-due-to-startup-.patch @@ -1,7 +1,7 @@ -From e983dc2428164698571e1dd1b25c4322181adbac Mon Sep 17 00:00:00 2001 +From 9214e9d423fea726c5497ae5be07d3069246e6bd Mon Sep 17 00:00:00 2001 From: Nitin Gupta Date: Thu, 30 Dec 2010 04:07:58 -0500 -Subject: [PATCH 37/66] Revert "Staging: zram: work around oops due to startup ordering snafu" +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch b/recipes-bsp/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch index 41d0192d5a..130a640750 100644 --- a/recipes-bsp/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch +++ b/recipes-bsp/linux/linux-omap/linus/0038-CAN-Use-inode-instead-of-kernel-address-for-proc-fil.patch @@ -1,7 +1,7 @@ -From 9f260e0efa4766e56d0ac14f1aeea6ee5eb8fe83 Mon Sep 17 00:00:00 2001 +From 177f55e48f91842a6e33e896d64ebb9a44db298b Mon Sep 17 00:00:00 2001 From: Dan Rosenberg Date: Sun, 26 Dec 2010 06:54:53 +0000 -Subject: [PATCH 38/66] CAN: Use inode instead of kernel address for /proc file +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch b/recipes-bsp/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch index 64f6d6605e..24fdff6cb3 100644 --- a/recipes-bsp/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch +++ b/recipes-bsp/linux/linux-omap/linus/0039-ISDN-Gigaset-Fix-memory-leak-in-do_disconnect_req.patch @@ -1,7 +1,7 @@ -From 2393c944d5d60eedaede80273ede8a816b5fa3e0 Mon Sep 17 00:00:00 2001 +From 7b63a1b5eed2e8f4c90cef7ba893dd95ab1d71ae Mon Sep 17 00:00:00 2001 From: Jesper Juhl Date: Sun, 26 Dec 2010 09:59:58 +0000 -Subject: [PATCH 39/66] ISDN, Gigaset: Fix memory leak in do_disconnect_req() +Subject: [PATCH 39/65] ISDN, Gigaset: Fix memory leak in do_disconnect_req() Hi, diff --git a/recipes-bsp/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch b/recipes-bsp/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch index 3117d390c1..b9be4132a5 100644 --- a/recipes-bsp/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch +++ b/recipes-bsp/linux/linux-omap/linus/0040-Broadcom-CNIC-core-network-driver-fix-mem-leak-on-al.patch @@ -1,7 +1,7 @@ -From f7e4c9775ea648deed4a8193951e50d0c7706173 Mon Sep 17 00:00:00 2001 +From dcb64d3c0d57e8bc674ec4ca6bf7f4812f49f7b2 Mon Sep 17 00:00:00 2001 From: Jesper Juhl Date: Fri, 31 Dec 2010 11:18:48 -0800 -Subject: [PATCH 40/66] Broadcom CNIC core network driver: fix mem leak on allocation failures in cnic_alloc_uio_rings() +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch b/recipes-bsp/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch index 5f93a97617..c77fb8578a 100644 --- a/recipes-bsp/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch +++ b/recipes-bsp/linux/linux-omap/linus/0041-tg3-fix-return-value-check-in-tg3_read_vpd.patch @@ -1,7 +1,7 @@ -From 824f5f38d3005c346a043dedcfe8b048b699b81a Mon Sep 17 00:00:00 2001 +From 8742365f4de2afdd0168366b49a3118e67354a21 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Wed, 29 Dec 2010 03:40:31 +0000 -Subject: [PATCH 41/66] tg3: fix return value check in tg3_read_vpd() +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch b/recipes-bsp/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch index 3ed2eb8e9b..c2ed56ea90 100644 --- a/recipes-bsp/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch +++ b/recipes-bsp/linux/linux-omap/linus/0042-starfire-Fix-dma_addr_t-size-test-for-MIPS.patch @@ -1,7 +1,7 @@ -From f4d5900a99dbc354ef1ba384d445ff80ae4d77b4 Mon Sep 17 00:00:00 2001 +From f6a826af05cb9de0de0218f3cd05af203170fd12 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Wed, 29 Dec 2010 04:26:17 +0000 -Subject: [PATCH 42/66] starfire: Fix dma_addr_t size test for MIPS +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch b/recipes-bsp/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch index b989cd3c06..20077bf99a 100644 --- a/recipes-bsp/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch +++ b/recipes-bsp/linux/linux-omap/linus/0043-drivers-atm-atmtcp.c-add-missing-atm_dev_put.patch @@ -1,7 +1,7 @@ -From b9556f9a1abdc56a179ac7ba6053469373b6de0f Mon Sep 17 00:00:00 2001 +From 0af81f1e48cd0f4a1cdce5939408e1d9ad508190 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Wed, 29 Dec 2010 04:01:03 +0000 -Subject: [PATCH 43/66] drivers/atm/atmtcp.c: add missing atm_dev_put +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch b/recipes-bsp/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch index c491d36562..0f47f868b7 100644 --- a/recipes-bsp/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch +++ b/recipes-bsp/linux/linux-omap/linus/0044-KVM-i8259-initialize-isr_ack.patch @@ -1,7 +1,7 @@ -From d0dfc6b74a0c6e9ee46b62713256e2b025244d3c Mon Sep 17 00:00:00 2001 +From 1e144569ab9d311fa5e08efc9a7fb35853d697d9 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Fri, 31 Dec 2010 10:52:15 +0200 -Subject: [PATCH 44/66] KVM: i8259: initialize isr_ack +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch b/recipes-bsp/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch index 820ec792fa..c322f9c91d 100644 --- a/recipes-bsp/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch +++ b/recipes-bsp/linux/linux-omap/linus/0045-hwmon-s3c-hwmon-Fix-compilation.patch @@ -1,7 +1,7 @@ -From b518a64983cbf2ff31aed530898de2d80e4573d5 Mon Sep 17 00:00:00 2001 +From cdca50978acd2a0be9ef675b8cdd3b77fadab492 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Sun, 2 Jan 2011 14:48:16 -0500 -Subject: [PATCH 45/66] hwmon: (s3c-hwmon) Fix compilation +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch b/recipes-bsp/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch index c07fa41c49..b490dc079c 100644 --- a/recipes-bsp/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch +++ b/recipes-bsp/linux/linux-omap/linus/0046-watchdog-Improve-initialisation-error-message-and-do.patch @@ -1,7 +1,7 @@ -From 551423748a4eba55f2eb0fc250d757986471f187 Mon Sep 17 00:00:00 2001 +From 358160309eeeb8e29b74240874267ea9f7e43d36 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sun, 2 Jan 2011 23:02:42 +0000 -Subject: [PATCH 46/66] watchdog: Improve initialisation error message and documentation +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch b/recipes-bsp/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch index bd1e892d2c..1b0838822e 100644 --- a/recipes-bsp/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch +++ b/recipes-bsp/linux/linux-omap/linus/0047-ARM-6605-1-Add-missing-include-asm-memory.h.patch @@ -1,7 +1,7 @@ -From 7c0ab43e6ab09d72dc8dbac2521b2f819ccc4026 Mon Sep 17 00:00:00 2001 +From ff3df95843c9713d7b7247c461b955b1f794db76 Mon Sep 17 00:00:00 2001 From: Axel Lin Date: Mon, 3 Jan 2011 02:26:53 +0100 -Subject: [PATCH 47/66] ARM: 6605/1: Add missing include "asm/memory.h" +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(). diff --git a/recipes-bsp/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch b/recipes-bsp/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch index db13a16408..6c1d8467ab 100644 --- a/recipes-bsp/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch +++ b/recipes-bsp/linux/linux-omap/linus/0048-mv_xor-fix-race-in-tasklet-function.patch @@ -1,7 +1,7 @@ -From 8333f65ef094e47020cd01452b4637e7daf5a77f Mon Sep 17 00:00:00 2001 +From b4c914578637d1d92b92842c50b02a98f2a7357d Mon Sep 17 00:00:00 2001 From: Saeed Bishara Date: Tue, 21 Dec 2010 16:53:39 +0200 -Subject: [PATCH 48/66] mv_xor: fix race in tasklet function +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch b/recipes-bsp/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch index 442c5a1672..a5a0850cd1 100644 --- a/recipes-bsp/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch +++ b/recipes-bsp/linux/linux-omap/linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch @@ -1,7 +1,7 @@ -From 8f33d5277fada0291ea495f7fd44a3e7b7aa41d3 Mon Sep 17 00:00:00 2001 +From 8948bfb494b67389d7ea6249b3d6e765f4500d88 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Wed, 22 Dec 2010 14:46:46 +0100 -Subject: [PATCH 49/66] dmaengine: provide dummy functions for DMA_ENGINE=n +Subject: [PATCH 49/65] dmaengine: provide dummy functions for DMA_ENGINE=n This lets drivers, optionally using the dmaengine, build with DMA_ENGINE unselected. diff --git a/recipes-bsp/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch b/recipes-bsp/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch new file mode 100644 index 0000000000..b1b840186e --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0050-cx25840-Prevent-device-probe-failure-due-to-volume-c.patch @@ -0,0 +1,52 @@ +From 99ce7fb9211326fed836b7dee035f8a4b1df0250 Mon Sep 17 00:00:00 2001 +From: Andy Walls +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 +Cc: Hans Verkuil +Signed-off-by: Mauro Carvalho Chehab +--- + 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-bsp/linux/linux-omap/linus/0050-media-cx25840-Prevent-device-probe-failure-due-to-vo.patch b/recipes-bsp/linux/linux-omap/linus/0050-media-cx25840-Prevent-device-probe-failure-due-to-vo.patch deleted file mode 100644 index 115575aa7f..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0050-media-cx25840-Prevent-device-probe-failure-due-to-vo.patch +++ /dev/null @@ -1,52 +0,0 @@ -From f23b7952d37c69c0caa6c8dfb85dbf2eb9e5fcaa Mon Sep 17 00:00:00 2001 -From: Andy Walls -Date: Sun, 5 Dec 2010 19:42:30 -0300 -Subject: [PATCH 50/66] [media] 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 -Cc: Hans Verkuil -Signed-off-by: Mauro Carvalho Chehab ---- - 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-bsp/linux/linux-omap/linus/0051-media-wm8775-Revert-changeset-fcb9757333-to-avoid-a-.patch b/recipes-bsp/linux/linux-omap/linus/0051-media-wm8775-Revert-changeset-fcb9757333-to-avoid-a-.patch deleted file mode 100644 index 7d88bb0c65..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0051-media-wm8775-Revert-changeset-fcb9757333-to-avoid-a-.patch +++ /dev/null @@ -1,518 +0,0 @@ -From 46e67acd5d4cacda758e871eebd15cef4e2c2665 Mon Sep 17 00:00:00 2001 -From: Mauro Carvalho Chehab -Date: Mon, 3 Jan 2011 09:09:56 -0200 -Subject: [PATCH 51/66] [media] 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 -Reported-by: Eric Sharkey -Reported-by: Auric -Reported by: David Gesswein -Signed-off-by: Mauro Carvalho Chehab ---- - 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 - #include - #include --#include - - #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 - #include --#include - - MODULE_DESCRIPTION("v4l2 driver module for cx2388x based TV cards"); - MODULE_AUTHOR("Gerd Knorr [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 - #include - #include --#include - - 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-bsp/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch b/recipes-bsp/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch new file mode 100644 index 0000000000..792fe44099 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0051-wm8775-Revert-changeset-fcb9757333-to-avoid-a-regres.patch @@ -0,0 +1,518 @@ +From 2d2e6426126f420da1df0e4c2b37069e00aefdb8 Mon Sep 17 00:00:00 2001 +From: Mauro Carvalho Chehab +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 +Reported-by: Eric Sharkey +Reported-by: Auric +Reported by: David Gesswein +Signed-off-by: Mauro Carvalho Chehab +--- + 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 + #include + #include +-#include + + #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 + #include +-#include + + MODULE_DESCRIPTION("v4l2 driver module for cx2388x based TV cards"); + MODULE_AUTHOR("Gerd Knorr [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 + #include + #include +-#include + + 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-bsp/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch b/recipes-bsp/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch new file mode 100644 index 0000000000..f8070990da --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0052-em28xx-radio_fops-should-also-use-unlocked_ioctl.patch @@ -0,0 +1,31 @@ +From 002eb3b2ab46fef443a2e40c52255e1c30b83704 Mon Sep 17 00:00:00 2001 +From: Hans Verkuil +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 +Signed-off-by: Mauro Carvalho Chehab +--- + 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-bsp/linux/linux-omap/linus/0052-media-em28xx-radio_fops-should-also-use-unlocked_ioc.patch b/recipes-bsp/linux/linux-omap/linus/0052-media-em28xx-radio_fops-should-also-use-unlocked_ioc.patch deleted file mode 100644 index 5fe35438fd..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0052-media-em28xx-radio_fops-should-also-use-unlocked_ioc.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 8fd0bda511406ef0e9dcce9be055d7ab931e92ba Mon Sep 17 00:00:00 2001 -From: Hans Verkuil -Date: Sat, 18 Dec 2010 09:59:51 -0300 -Subject: [PATCH 52/66] [media] 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 -Signed-off-by: Mauro Carvalho Chehab ---- - 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-bsp/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch b/recipes-bsp/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch index d38d77a04e..dc5522d0e3 100644 --- a/recipes-bsp/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch +++ b/recipes-bsp/linux/linux-omap/linus/0053-arch-x86-oprofile-op_model_amd.c-Perform-initialisat.patch @@ -1,7 +1,7 @@ -From c7c25802b39c443b3745cfa973dc49a97a3491f8 Mon Sep 17 00:00:00 2001 +From b376276870006eabba46427b79a3f3be70b3e3ea Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Mon, 3 Jan 2011 12:15:14 +0100 -Subject: [PATCH 53/66] arch/x86/oprofile/op_model_amd.c: Perform initialisation on a single CPU +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 diff --git a/recipes-bsp/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch b/recipes-bsp/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch index d98849e51a..09ed27c3bb 100644 --- a/recipes-bsp/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch +++ b/recipes-bsp/linux/linux-omap/linus/0054-perf-Fix-callchain-hit-bad-cast-on-ascii-display.patch @@ -1,7 +1,7 @@ -From d425de5436a620de506f9e4119bf8daa1cb93718 Mon Sep 17 00:00:00 2001 +From ef44b2900e7bfd255e56ae9bd2ec03d2c13b780c Mon Sep 17 00:00:00 2001 From: Frederic Weisbecker Date: Mon, 3 Jan 2011 16:13:11 +0100 -Subject: [PATCH 54/66] perf: Fix callchain hit bad cast on ascii display +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. diff --git a/recipes-bsp/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch b/recipes-bsp/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch new file mode 100644 index 0000000000..9a1f006b44 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0055-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch @@ -0,0 +1,40 @@ +From 83c04c29567a2f57c4881c8c11bce2bd4bc0b0ab Mon Sep 17 00:00:00 2001 +From: Mike Rapoport +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 +Signed-off-by: Eric Miao +--- + 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-bsp/linux/linux-omap/linus/0055-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch b/recipes-bsp/linux/linux-omap/linus/0055-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch deleted file mode 100644 index c1b62385a1..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0055-ARM-pxa-PXA_ESERIES-depends-on-FB_W100.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 82427de2c7c39ee7bcaa4cb0260b4e9b9ab19eb8 Mon Sep 17 00:00:00 2001 -From: Lennert Buytenhek -Date: Wed, 15 Dec 2010 07:20:16 +0800 -Subject: [PATCH 55/66] 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 -Signed-off-by: Eric Miao ---- - 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-bsp/linux/linux-omap/linus/0056-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch b/recipes-bsp/linux/linux-omap/linus/0056-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch deleted file mode 100644 index fadc8226de..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0056-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 823a2df258627b80df2e75056b850424a8eb5fed Mon Sep 17 00:00:00 2001 -From: Mike Rapoport -Date: Wed, 29 Dec 2010 09:06:26 +0200 -Subject: [PATCH 56/66] 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 -Signed-off-by: Eric Miao ---- - 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-bsp/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch b/recipes-bsp/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch new file mode 100644 index 0000000000..5ae9609ee7 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0056-ARM-pxa-fix-page-table-corruption-on-resume.patch @@ -0,0 +1,46 @@ +From b7072ddc2682868372d060e1e25447e5c1aee007 Mon Sep 17 00:00:00 2001 +From: Aric D. Blumer +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 +Signed-off-by: Eric Miao +--- + 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-bsp/linux/linux-omap/linus/0057-ARM-pxa-fix-page-table-corruption-on-resume.patch b/recipes-bsp/linux/linux-omap/linus/0057-ARM-pxa-fix-page-table-corruption-on-resume.patch deleted file mode 100644 index d8b784dbf9..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0057-ARM-pxa-fix-page-table-corruption-on-resume.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 24c78557741395e038e83f25367cf2bfd7f582b8 Mon Sep 17 00:00:00 2001 -From: Aric D. Blumer -Date: Wed, 29 Dec 2010 11:18:29 -0500 -Subject: [PATCH 57/66] 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 -Signed-off-by: Eric Miao ---- - 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-bsp/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch b/recipes-bsp/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch new file mode 100644 index 0000000000..9db691b148 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0057-atl1-fix-oops-when-changing-tx-rx-ring-params.patch @@ -0,0 +1,63 @@ +From f14284bb4ad057377b4944bb3985352fe1079c60 Mon Sep 17 00:00:00 2001 +From: J. K. Cliburn +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@kernel.org +Signed-off-by: Jay Cliburn +Reported-by: Tõnu Raitviir +Signed-off-by: David S. Miller +--- + 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-bsp/linux/linux-omap/linus/0058-atl1-fix-oops-when-changing-tx-rx-ring-params.patch b/recipes-bsp/linux/linux-omap/linus/0058-atl1-fix-oops-when-changing-tx-rx-ring-params.patch deleted file mode 100644 index 5216f8eee2..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0058-atl1-fix-oops-when-changing-tx-rx-ring-params.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 2f32c867219734b06abc980d4812f67b6d6fe517 Mon Sep 17 00:00:00 2001 -From: J. K. Cliburn -Date: Sat, 1 Jan 2011 05:02:12 +0000 -Subject: [PATCH 58/66] 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@kernel.org -Signed-off-by: Jay Cliburn -Reported-by: Tõnu Raitviir -Signed-off-by: David S. Miller ---- - 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-bsp/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch b/recipes-bsp/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch new file mode 100644 index 0000000000..857f506f82 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0058-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch @@ -0,0 +1,157 @@ +From 87bd79394bd7f4b7e01199421aae0df5fb1910d0 Mon Sep 17 00:00:00 2001 +From: Tomas Winkler +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:[] 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] [] ? sched_clock+0x8/0x10 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? enqueue_entity+0x174/0x440 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? sched_clock_cpu+0x131/0x190 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? select_task_rq_fair+0x2ad/0x730 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? nf_iterate+0x71/0x90 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame_finish+0x184/0x220 [bridge] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame_finish+0x0/0x220 [bridge] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame+0x189/0x230 [bridge] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame_finish+0x0/0x220 [bridge] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame+0x0/0x230 [bridge] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __netif_receive_skb+0x1b6/0x5b0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? skb_copy_bits+0x110/0x210 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? netif_receive_skb+0x6f/0x80 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_deliver_skb+0x8c/0x1a0 [mac80211] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_rx_handlers+0xeb6/0x1aa0 [mac80211] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __netif_receive_skb+0x380/0x5b0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? sched_clock_local+0xb2/0x190 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? default_spin_lock_flags+0x8/0x10 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? _raw_spin_lock_irqsave+0x2f/0x50 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_prepare_and_rx_handle+0x201/0xa90 [mac80211] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_rx+0x2a4/0x830 [mac80211] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwl_update_stats+0xa6/0x2a0 [iwlcore] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwlagn_rx_reply_rx+0x292/0x3b0 [iwlagn] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? _raw_spin_lock_irqsave+0x2f/0x50 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwl_rx_handle+0xe7/0x350 [iwlagn] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwl_irq_tasklet+0xf7/0x5c0 [iwlagn] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __rcu_process_callbacks+0x201/0x2d0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? tasklet_action+0xc5/0x100 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __do_softirq+0x97/0x1d0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? nmi_stack_correct+0x2f/0x34 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __do_softirq+0x0/0x1d0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? irq_exit+0x65/0x70 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? do_IRQ+0x52/0xc0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? common_interrupt+0x30/0x38 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? intel_idle+0xc2/0x160 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? cpuidle_idle_call+0x6b/0x100 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? cpu_idle+0x8a/0xf0 +Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? start_secondary+0x1e8/0x1ee + +Cc: David Miller +Cc: Johannes Berg +Cc: Stephen Hemminger +Signed-off-by: Tomas Winkler +Signed-off-by: David S. Miller +--- + 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-bsp/linux/linux-omap/linus/0059-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch b/recipes-bsp/linux/linux-omap/linus/0059-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch deleted file mode 100644 index 75f729517c..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0059-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 9d89081d698132b5f964aea88112f76492563ee9 Mon Sep 17 00:00:00 2001 -From: Tomas Winkler -Date: Mon, 3 Jan 2011 11:26:08 -0800 -Subject: [PATCH 59/66] 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:[] 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] [] ? sched_clock+0x8/0x10 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? enqueue_entity+0x174/0x440 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? sched_clock_cpu+0x131/0x190 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? select_task_rq_fair+0x2ad/0x730 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? nf_iterate+0x71/0x90 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame_finish+0x184/0x220 [bridge] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame_finish+0x0/0x220 [bridge] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame+0x189/0x230 [bridge] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame_finish+0x0/0x220 [bridge] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? br_handle_frame+0x0/0x230 [bridge] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __netif_receive_skb+0x1b6/0x5b0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? skb_copy_bits+0x110/0x210 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? netif_receive_skb+0x6f/0x80 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_deliver_skb+0x8c/0x1a0 [mac80211] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_rx_handlers+0xeb6/0x1aa0 [mac80211] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __netif_receive_skb+0x380/0x5b0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? sched_clock_local+0xb2/0x190 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? default_spin_lock_flags+0x8/0x10 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? _raw_spin_lock_irqsave+0x2f/0x50 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_prepare_and_rx_handle+0x201/0xa90 [mac80211] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? ieee80211_rx+0x2a4/0x830 [mac80211] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwl_update_stats+0xa6/0x2a0 [iwlcore] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwlagn_rx_reply_rx+0x292/0x3b0 [iwlagn] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? _raw_spin_lock_irqsave+0x2f/0x50 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwl_rx_handle+0xe7/0x350 [iwlagn] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? iwl_irq_tasklet+0xf7/0x5c0 [iwlagn] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __rcu_process_callbacks+0x201/0x2d0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? tasklet_action+0xc5/0x100 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __do_softirq+0x97/0x1d0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? nmi_stack_correct+0x2f/0x34 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? __do_softirq+0x0/0x1d0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? irq_exit+0x65/0x70 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? do_IRQ+0x52/0xc0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? common_interrupt+0x30/0x38 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? intel_idle+0xc2/0x160 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? cpuidle_idle_call+0x6b/0x100 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? cpu_idle+0x8a/0xf0 -Dec 15 14:36:41 User-PC kernel: [175576.124181] [] ? start_secondary+0x1e8/0x1ee - -Cc: David Miller -Cc: Johannes Berg -Cc: Stephen Hemminger -Signed-off-by: Tomas Winkler -Signed-off-by: David S. Miller ---- - 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-bsp/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch b/recipes-bsp/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch new file mode 100644 index 0000000000..26915acc9e --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0059-name_to_dev_t-must-not-call-__init-code.patch @@ -0,0 +1,31 @@ +From edb8dd77b87534a3cc6bf4e2a234216d2cc68f89 Mon Sep 17 00:00:00 2001 +From: Jan Beulich +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 +Acked-by: Randy Dunlap +Signed-off-by: Linus Torvalds +--- + 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-bsp/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch b/recipes-bsp/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch new file mode 100644 index 0000000000..ad0b8e1b35 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0060-bridge-stp-ensure-mac-header-is-set.patch @@ -0,0 +1,38 @@ +From ff26fe4db962b41b794fb81518b8e407093239d9 Mon Sep 17 00:00:00 2001 +From: Florian Westphal +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@ghostprotocols.net +References: https://bugzilla.kernel.org/show_bug.cgi?id=24532 +Signed-off-by: Florian Westphal +Signed-off-by: David S. Miller +--- + 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-bsp/linux/linux-omap/linus/0060-name_to_dev_t-must-not-call-__init-code.patch b/recipes-bsp/linux/linux-omap/linus/0060-name_to_dev_t-must-not-call-__init-code.patch deleted file mode 100644 index bdd9fd0d3e..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0060-name_to_dev_t-must-not-call-__init-code.patch +++ /dev/null @@ -1,31 +0,0 @@ -From a1cf11d8f673a3ad91012c5da96beed06ecefde1 Mon Sep 17 00:00:00 2001 -From: Jan Beulich -Date: Mon, 3 Jan 2011 15:07:02 +0000 -Subject: [PATCH 60/66] 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 -Acked-by: Randy Dunlap -Signed-off-by: Linus Torvalds ---- - 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-bsp/linux/linux-omap/linus/0061-bridge-stp-ensure-mac-header-is-set.patch b/recipes-bsp/linux/linux-omap/linus/0061-bridge-stp-ensure-mac-header-is-set.patch deleted file mode 100644 index f2c0e46891..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0061-bridge-stp-ensure-mac-header-is-set.patch +++ /dev/null @@ -1,38 +0,0 @@ -From e6f26129ebbb0071016e2526036f42036ccf30e1 Mon Sep 17 00:00:00 2001 -From: Florian Westphal -Date: Mon, 3 Jan 2011 04:16:28 +0000 -Subject: [PATCH 61/66] 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@ghostprotocols.net -References: https://bugzilla.kernel.org/show_bug.cgi?id=24532 -Signed-off-by: Florian Westphal -Signed-off-by: David S. Miller ---- - 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-bsp/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch b/recipes-bsp/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch new file mode 100644 index 0000000000..5c37ce3514 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0061-ima-fix-add-LSM-rule-bug.patch @@ -0,0 +1,64 @@ +From 497d2c1cfa523a66bfea594791d8f2a50e5bb0aa Mon Sep 17 00:00:00 2001 +From: Mimi Zohar +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 +Cc: James Morris +Acked-by: Serge Hallyn +Cc: David Safford +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + 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-bsp/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch b/recipes-bsp/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch new file mode 100644 index 0000000000..ecbbaa0240 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0062-arch-mn10300-kernel-irq.c-fix-build.patch @@ -0,0 +1,31 @@ +From 942dd5c14797f41c9e6d960ae95940ccdb7cb044 Mon Sep 17 00:00:00 2001 +From: Andrew Morton +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 +Cc: David Howells +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + 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-bsp/linux/linux-omap/linus/0062-ima-fix-add-LSM-rule-bug.patch b/recipes-bsp/linux/linux-omap/linus/0062-ima-fix-add-LSM-rule-bug.patch deleted file mode 100644 index 775d2a6beb..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0062-ima-fix-add-LSM-rule-bug.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 867c20265459d30a01b021a9c1e81fb4c5832aa9 Mon Sep 17 00:00:00 2001 -From: Mimi Zohar -Date: Mon, 3 Jan 2011 14:59:10 -0800 -Subject: [PATCH 62/66] 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 -Cc: James Morris -Acked-by: Serge Hallyn -Cc: David Safford -Cc: -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - 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-bsp/linux/linux-omap/linus/0063-arch-mn10300-kernel-irq.c-fix-build.patch b/recipes-bsp/linux/linux-omap/linus/0063-arch-mn10300-kernel-irq.c-fix-build.patch deleted file mode 100644 index cf6a5c7540..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0063-arch-mn10300-kernel-irq.c-fix-build.patch +++ /dev/null @@ -1,31 +0,0 @@ -From d9a1abe4844e7591cd82e167a1a09e6546f6c45e Mon Sep 17 00:00:00 2001 -From: Andrew Morton -Date: Mon, 3 Jan 2011 14:59:11 -0800 -Subject: [PATCH 63/66] arch/mn10300/kernel/irq.c: fix build - -Addresses https://bugzilla.kernel.org/show_bug.cgi?id=25702 - -Reported-by: Martin Ettl -Cc: David Howells -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - 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-bsp/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch b/recipes-bsp/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch new file mode 100644 index 0000000000..d7e9481b85 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0063-remove-trim_fs-method-from-Documentation-filesystems.patch @@ -0,0 +1,38 @@ +From 012cfd55bb9075c4697cc068ba0a8c0d0069433a Mon Sep 17 00:00:00 2001 +From: Christoph Hellwig +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 +Reported-by: Ryusuke Konishi +Signed-off-by: Linus Torvalds +--- + 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-bsp/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch b/recipes-bsp/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch new file mode 100644 index 0000000000..56e00911ae --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0064-ipv4-route.c-respect-prefsrc-for-local-routes.patch @@ -0,0 +1,57 @@ +From 1e3d23ed2eae8473568b34fdc323d2fec679616b Mon Sep 17 00:00:00 2001 +From: Joel Sing +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 +Signed-off-by: David S. Miller +--- + 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-bsp/linux/linux-omap/linus/0064-remove-trim_fs-method-from-Documentation-filesystems.patch b/recipes-bsp/linux/linux-omap/linus/0064-remove-trim_fs-method-from-Documentation-filesystems.patch deleted file mode 100644 index e9d78f52dd..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0064-remove-trim_fs-method-from-Documentation-filesystems.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 8a87694ed159d7abd2c9ed657416696c05db2252 Mon Sep 17 00:00:00 2001 -From: Christoph Hellwig -Date: Tue, 4 Jan 2011 07:14:24 +0100 -Subject: [PATCH 64/66] 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 -Reported-by: Ryusuke Konishi -Signed-off-by: Linus Torvalds ---- - 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-bsp/linux/linux-omap/linus/0065-Linux-2.6.37.patch b/recipes-bsp/linux/linux-omap/linus/0065-Linux-2.6.37.patch new file mode 100644 index 0000000000..f4f6c6b137 --- /dev/null +++ b/recipes-bsp/linux/linux-omap/linus/0065-Linux-2.6.37.patch @@ -0,0 +1,25 @@ +From 52aefa299da0c025c4e521f2a40a89c01aad5a17 Mon Sep 17 00:00:00 2001 +From: Linus Torvalds +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-bsp/linux/linux-omap/linus/0065-ipv4-route.c-respect-prefsrc-for-local-routes.patch b/recipes-bsp/linux/linux-omap/linus/0065-ipv4-route.c-respect-prefsrc-for-local-routes.patch deleted file mode 100644 index 5f57d4cf72..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0065-ipv4-route.c-respect-prefsrc-for-local-routes.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 9fc3bbb4a752f108cf096d96640f3b548bbbce6c Mon Sep 17 00:00:00 2001 -From: Joel Sing -Date: Mon, 3 Jan 2011 20:24:20 +0000 -Subject: [PATCH 65/66] 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 -Signed-off-by: David S. Miller ---- - 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-bsp/linux/linux-omap/linus/0066-Linux-2.6.37.patch b/recipes-bsp/linux/linux-omap/linus/0066-Linux-2.6.37.patch deleted file mode 100644 index 3c1055a4e1..0000000000 --- a/recipes-bsp/linux/linux-omap/linus/0066-Linux-2.6.37.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5 Mon Sep 17 00:00:00 2001 -From: Linus Torvalds -Date: Tue, 4 Jan 2011 16:50:19 -0800 -Subject: [PATCH 66/66] 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-bsp/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch b/recipes-bsp/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch index 2fcef66a91..9f73f00d43 100644 --- a/recipes-bsp/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch +++ b/recipes-bsp/linux/linux-omap/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch @@ -1,7 +1,7 @@ -From a6e1f70eca0fcc9899e949f7ecb30b0fa483f590 Mon Sep 17 00:00:00 2001 +From cba7c162c77d225afbf53148273019946a73b2c2 Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Wed, 17 Feb 2010 14:51:39 -0800 -Subject: [PATCH 01/22] Add defines to set config options in GPMC per CS control registers. +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 ++++++++++++++++++++++++++++++++ diff --git a/recipes-bsp/linux/linux-omap/usrp/0001-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch b/recipes-bsp/linux/linux-omap/usrp/0001-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch deleted file mode 100644 index 201a990565..0000000000 --- a/recipes-bsp/linux/linux-omap/usrp/0001-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 1ef8d8840d9aad21e179facd0d1976ab9f05e654 Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Thu, 6 Jan 2011 13:23:45 +0100 -Subject: [PATCH 1/2] OMAP3: beagle C4: enable upto 720MHz OPP - -Beagle C4 uses a recent 3530 and the board design allows enabling 720MHz -OPP. tweak the default table to allow for higher OPP tables - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-omap3beagle.c | 35 +++++++++++++++++++++++++++++++ - 1 files changed, 35 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 9393e75..a0462b9 100644 ---- a/arch/arm/mach-omap2/board-omap3beagle.c -+++ b/arch/arm/mach-omap2/board-omap3beagle.c -@@ -829,6 +829,41 @@ static void __init beagle_opp_init(void) - pr_err("%s: turbo OPPs enabled!\n", __func__); - } - } -+ /* Custom OPP enabled for C4 */ -+ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4) { -+ 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 720MHz */ -+ dev = &mh->od->pdev.dev; -+ r = opp_enable(dev, 720000000); -+ -+ /* Enable IVA 520MHz and lower opps */ -+ dev = &dh->od->pdev.dev; -+ r |= opp_enable(dev, 520000000); -+ } -+ 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, 720000000); -+ dev = &dh->od->pdev.dev; -+ opp_disable(dev, 520000000); -+ } else { -+ pr_err("%s: 720MHz MPU OPPs enabled!\n", __func__); -+ } -+ } -+ - } - - static void __init omap3_beagle_init(void) --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch b/recipes-bsp/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch index 22305f3519..a7415ff081 100644 --- a/recipes-bsp/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch +++ b/recipes-bsp/linux/linux-omap/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch @@ -1,7 +1,7 @@ -From a734ac5eef1dd8ee8cba4eea5d2db568247c484c Mon Sep 17 00:00:00 2001 +From fa589f1ad83e8795ba0509e7899dd1a6926c5fbd Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Thu, 22 Apr 2010 19:41:58 -0700 -Subject: [PATCH 02/22] Add functions to dma.c to set address and length for src and dest. +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 ++++++++++++++++++++++++++++++ diff --git a/recipes-bsp/linux/linux-omap/usrp/0002-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch b/recipes-bsp/linux/linux-omap/usrp/0002-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch deleted file mode 100644 index ff1d9055f1..0000000000 --- a/recipes-bsp/linux/linux-omap/usrp/0002-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch +++ /dev/null @@ -1,103 +0,0 @@ -From ba484e6276ba5089a0397aad845ae5be80850bac Mon Sep 17 00:00:00 2001 -From: Koen Kooi -Date: Wed, 12 Jan 2011 17:04:04 +0100 -Subject: [PATCH 2/2] OMAP3: Overo Tide: enable upto 720MHz OPP - -Overo Tide uses a recent 3530 and the board design allows enabling 720MHz -OPP. tweak the default table to allow for higher OPP tables - -Signed-off-by: Koen Kooi ---- - arch/arm/mach-omap2/board-overo.c | 51 +++++++++++++++++++++++++++++++++++++ - 1 files changed, 51 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c -index 8a44c17..d6d8619 100644 ---- a/arch/arm/mach-omap2/board-overo.c -+++ b/arch/arm/mach-omap2/board-overo.c -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -50,10 +51,12 @@ - #include - #include - #include -+#include - - #include "mux.h" - #include "sdram-micron-mt46h32m32lf-6.h" - #include "hsmmc.h" -+#include "pm.h" - - #define OVERO_GPIO_BT_XGATE 15 - #define OVERO_GPIO_W2W_NRESET 16 -@@ -626,6 +629,53 @@ static struct omap_musb_board_data musb_board_data = { - .power = 100, - }; - -+static void __init overo_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 Tide */ -+ if (omap3_has_720mhz()) { -+ 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 720MHz */ -+ dev = &mh->od->pdev.dev; -+ r = opp_enable(dev, 720000000); -+ -+ /* Enable IVA 520MHz and lower opps */ -+ dev = &dh->od->pdev.dev; -+ r |= opp_enable(dev, 520000000); -+ } -+ 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, 720000000); -+ dev = &dh->od->pdev.dev; -+ opp_disable(dev, 520000000); -+ } else { -+ pr_err("%s: 720MHz MPU OPPs enabled!\n", __func__); -+ } -+ } -+ -+} -+ - static void __init overo_init(void) - { - omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); -@@ -678,6 +728,7 @@ static void __init overo_init(void) - else - printk(KERN_ERR "could not obtain gpio for " - "OVERO_GPIO_USBH_CPEN\n"); -+ overo_opp_init(); - } - - MACHINE_START(OVERO, "Gumstsix Overo") --- -1.6.6.1 - diff --git a/recipes-bsp/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch b/recipes-bsp/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch index 98a6d3b711..400807d1b2 100644 --- a/recipes-bsp/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch +++ b/recipes-bsp/linux/linux-omap/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch @@ -1,7 +1,7 @@ -From 31d1ee0e615ad0fc84bd781d905f1cd56ae02909 Mon Sep 17 00:00:00 2001 +From 56a2e5e0ace395e94f176a90a12d3cfcd8b7f68f Mon Sep 17 00:00:00 2001 From: Philip Balister Date: Wed, 13 Jan 2010 14:35:39 -0500 -Subject: [PATCH 03/22] usrp-embedded : Add driver for USRP Embedded FPGA interface. +Subject: [PATCH 3/3] usrp-embedded : Add driver for USRP Embedded FPGA interface. --- arch/arm/mach-omap2/board-overo.c | 176 +++++- diff --git a/recipes-bsp/linux/linux-omap_2.6.37.bb b/recipes-bsp/linux/linux-omap_2.6.37.bb index ff7da1cde6..ccb26f2018 100644 --- a/recipes-bsp/linux/linux-omap_2.6.37.bb +++ b/recipes-bsp/linux/linux-omap_2.6.37.bb @@ -16,7 +16,7 @@ SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.g 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/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 \ @@ -61,51 +61,53 @@ SRC_URI_append = " \ 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/0048-mv_xor-fix-race-in-tasklet-function.patch \ file://linus/0049-dmaengine-provide-dummy-functions-for-DMA_ENGINE-n.patch \ - file://linus/0050-media-cx25840-Prevent-device-probe-failure-due-to-vo.patch \ - file://linus/0051-media-wm8775-Revert-changeset-fcb9757333-to-avoid-a-.patch \ - file://linus/0052-media-em28xx-radio_fops-should-also-use-unlocked_ioc.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/0056-ARM-it8152-add-IT8152_LAST_IRQ-definition-to-fix-bui.patch \ - file://linus/0057-ARM-pxa-fix-page-table-corruption-on-resume.patch \ - file://linus/0058-atl1-fix-oops-when-changing-tx-rx-ring-params.patch \ - file://linus/0059-bridge-fix-br_multicast_ipv6_rcv-for-paged-skbs.patch \ - file://linus/0060-name_to_dev_t-must-not-call-__init-code.patch \ - file://linus/0061-bridge-stp-ensure-mac-header-is-set.patch \ - file://linus/0062-ima-fix-add-LSM-rule-bug.patch \ - file://linus/0063-arch-mn10300-kernel-irq.c-fix-build.patch \ - file://linus/0064-remove-trim_fs-method-from-Documentation-filesystems.patch \ - file://linus/0065-ipv4-route.c-respect-prefsrc-for-local-routes.patch \ - file://linus/0066-Linux-2.6.37.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-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch \ - file://base/0002-omap-Beagle-detect-new-xM-revision-B.patch \ - file://base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch \ - file://base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch \ - file://base/0005-modedb.c-add-proper-720p60-mode.patch \ - file://base/0006-mmc-don-t-display-single-block-read-console-messages.patch \ - file://base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch \ - file://base/0008-Miracle-patch.patch \ - file://base/0009-ARM-OMAP-add-omap_rev_-macros.patch \ - file://base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch \ - file://base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch \ - file://base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch \ - file://base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch \ - file://base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch \ - file://base/0015-MFD-enable-madc-clock.patch \ - file://base/0016-MFD-add-twl4030-madc-driver.patch \ - file://base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch \ - file://base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch \ - file://base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch \ - file://base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch \ - file://base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch \ - file://base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch \ - file://base/0023-RTC-add-support-for-backup-battery-recharge.patch \ - file://base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch \ - file://base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch \ - file://base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.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 \ @@ -126,11 +128,7 @@ SRC_URI_append = " \ 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/0001-omap3-add-support-for-720MHz-MPU-OPP.patch \ - file://dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch \ - file://dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch \ - file://dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch \ + file://dvfs/0020-omap3-Add-basic-support-for-720MHz-part.patch \ " SRC_URI_append_usrp-e1xx = "\ -- cgit 1.2.3-korg