linux/2.6.39: R.I.P.
authorGabor Juhos <juhosg@openwrt.org>
Fri, 18 May 2012 20:10:51 +0000 (20:10 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Fri, 18 May 2012 20:10:51 +0000 (20:10 +0000)
SVN-Revision: 31808

131 files changed:
target/linux/generic/config-2.6.39 [deleted file]
target/linux/generic/patches-2.6.39/020-ssb_update.patch [deleted file]
target/linux/generic/patches-2.6.39/025-bcma_backport.patch [deleted file]
target/linux/generic/patches-2.6.39/030-exportfs_tristate.patch [deleted file]
target/linux/generic/patches-2.6.39/040-backport_tmpfs_xattr.patch [deleted file]
target/linux/generic/patches-2.6.39/050-linux-atm_nathan.patch [deleted file]
target/linux/generic/patches-2.6.39/100-overlayfs_v11.patch [deleted file]
target/linux/generic/patches-2.6.39/101-perf_arm_uclibc.patch [deleted file]
target/linux/generic/patches-2.6.39/102-ehci_hcd_ignore_oc.patch [deleted file]
target/linux/generic/patches-2.6.39/105-alix_platform_leds.patch [deleted file]
target/linux/generic/patches-2.6.39/106-alix_platform_gpio_keys_button.patch [deleted file]
target/linux/generic/patches-2.6.39/200-fix_localversion.patch [deleted file]
target/linux/generic/patches-2.6.39/201-extra_optimization.patch [deleted file]
target/linux/generic/patches-2.6.39/210-darwin_scripts_include.patch [deleted file]
target/linux/generic/patches-2.6.39/211-stddef_include.patch [deleted file]
target/linux/generic/patches-2.6.39/220-module_exports.patch [deleted file]
target/linux/generic/patches-2.6.39/230-openwrt_lzma_options.patch [deleted file]
target/linux/generic/patches-2.6.39/250-netfilter_depends.patch [deleted file]
target/linux/generic/patches-2.6.39/251-sound_kconfig.patch [deleted file]
target/linux/generic/patches-2.6.39/252-mv_cesa_depends.patch [deleted file]
target/linux/generic/patches-2.6.39/253-ssb_b43_default_on.patch [deleted file]
target/linux/generic/patches-2.6.39/254-textsearch_kconfig_hacks.patch [deleted file]
target/linux/generic/patches-2.6.39/255-lib80211_kconfig_hacks.patch [deleted file]
target/linux/generic/patches-2.6.39/256-crypto_add_kconfig_prompts.patch [deleted file]
target/linux/generic/patches-2.6.39/257-wireless_ext_kconfig_hack.patch [deleted file]
target/linux/generic/patches-2.6.39/260-geode-mfd.patch [deleted file]
target/linux/generic/patches-2.6.39/261-geode-mfd2.patch [deleted file]
target/linux/generic/patches-2.6.39/300-mips_expose_boot_raw.patch [deleted file]
target/linux/generic/patches-2.6.39/301-mips_image_cmdline_hack.patch [deleted file]
target/linux/generic/patches-2.6.39/302-mips_use_generic_thread_info_allocator.patch [deleted file]
target/linux/generic/patches-2.6.39/303-mips_fix_kexec.patch [deleted file]
target/linux/generic/patches-2.6.39/304-mips_disable_fpu.patch [deleted file]
target/linux/generic/patches-2.6.39/305-mips_module_reloc.patch [deleted file]
target/linux/generic/patches-2.6.39/306-mips_mem_functions_performance.patch [deleted file]
target/linux/generic/patches-2.6.39/307-mips_oprofile_fix.patch [deleted file]
target/linux/generic/patches-2.6.39/310-arm_module_unresolved_weak_sym.patch [deleted file]
target/linux/generic/patches-2.6.39/320-ppc4xx_optimization.patch [deleted file]
target/linux/generic/patches-2.6.39/321-powerpc_crtsavres_prereq.patch [deleted file]
target/linux/generic/patches-2.6.39/330-mips-add-crash-and-kdump-support.patch [deleted file]
target/linux/generic/patches-2.6.39/331-mips-kexec-enhanche-the-support.patch [deleted file]
target/linux/generic/patches-2.6.39/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch [deleted file]
target/linux/generic/patches-2.6.39/333-mips-kexec-get-kernel-parameters-from-kexec-tools.patch [deleted file]
target/linux/generic/patches-2.6.39/334-mips-fix-compiling-failure-of-relocate_kernel.patch [deleted file]
target/linux/generic/patches-2.6.39/335-mips-kexec-cleanup-kexec-tools-parameter-handling.patch [deleted file]
target/linux/generic/patches-2.6.39/400-rootfs_split.patch [deleted file]
target/linux/generic/patches-2.6.39/401-partial_eraseblock_write.patch [deleted file]
target/linux/generic/patches-2.6.39/410-mtd_info_move_forward_decl.patch [deleted file]
target/linux/generic/patches-2.6.39/420-redboot_space.patch [deleted file]
target/linux/generic/patches-2.6.39/421-redboot_boardconfig.patch [deleted file]
target/linux/generic/patches-2.6.39/430-mtd_myloader_partition_parser.patch [deleted file]
target/linux/generic/patches-2.6.39/440-block2mtd_init.patch [deleted file]
target/linux/generic/patches-2.6.39/441-block2mtd_refresh.patch [deleted file]
target/linux/generic/patches-2.6.39/442-block2mtd_probe.patch [deleted file]
target/linux/generic/patches-2.6.39/450-mtd_plat_nand_chip_fixup.patch [deleted file]
target/linux/generic/patches-2.6.39/451-mtd_fix_nand_correct_data_return_code.patch [deleted file]
target/linux/generic/patches-2.6.39/460-cfi_show_amd_extended_table_version.patch [deleted file]
target/linux/generic/patches-2.6.39/461-cfi_cmdset_0002_no_erase_suspend.patch [deleted file]
target/linux/generic/patches-2.6.39/470-mtd_m25p80_add_pm25lv_flash_support.patch [deleted file]
target/linux/generic/patches-2.6.39/472-mtd_m25p80_add_MX25L1606E_support.patch [deleted file]
target/linux/generic/patches-2.6.39/473-mtd_m25p80_add_w25q128.patch [deleted file]
target/linux/generic/patches-2.6.39/474-mtd_concat_sync_fix.patch [deleted file]
target/linux/generic/patches-2.6.39/475-mtd-m25p80-allow-to-disable-small-sector-erase.patch [deleted file]
target/linux/generic/patches-2.6.39/500-yaffs_support.patch [deleted file]
target/linux/generic/patches-2.6.39/501-yaffs_cvs_2009_04_24.patch [deleted file]
target/linux/generic/patches-2.6.39/502-yaffs_git_2010_10_20.patch [deleted file]
target/linux/generic/patches-2.6.39/503-yaffs_symlink_bug.patch [deleted file]
target/linux/generic/patches-2.6.39/504-yaffs_mutex_fix.patch [deleted file]
target/linux/generic/patches-2.6.39/505-2.6.39_fix.patch [deleted file]
target/linux/generic/patches-2.6.39/510-jffs2_make_lzma_available.patch [deleted file]
target/linux/generic/patches-2.6.39/511-debloat_lzma.patch [deleted file]
target/linux/generic/patches-2.6.39/512-jffs2_eofdetect.patch [deleted file]
target/linux/generic/patches-2.6.39/520-squashfs_update_xz_comp_opts.patch [deleted file]
target/linux/generic/patches-2.6.39/600-netfilter_layer7_2.22.patch [deleted file]
target/linux/generic/patches-2.6.39/601-netfilter_layer7_pktmatch.patch [deleted file]
target/linux/generic/patches-2.6.39/602-netfilter_layer7_match.patch [deleted file]
target/linux/generic/patches-2.6.39/603-netfilter_layer7_2.6.36_fix.patch [deleted file]
target/linux/generic/patches-2.6.39/604-netfilter_cisco_794x_iphone.patch [deleted file]
target/linux/generic/patches-2.6.39/610-netfilter_match_bypass_default_checks.patch [deleted file]
target/linux/generic/patches-2.6.39/611-netfilter_match_bypass_default_table.patch [deleted file]
target/linux/generic/patches-2.6.39/612-netfilter_match_reduce_memory_access.patch [deleted file]
target/linux/generic/patches-2.6.39/613-netfilter_optional_tcp_window_check.patch [deleted file]
target/linux/generic/patches-2.6.39/620-sched_esfq.patch [deleted file]
target/linux/generic/patches-2.6.39/621-sched_act_connmark.patch [deleted file]
target/linux/generic/patches-2.6.39/622-sched_sfq_fix_enqueue.patch [deleted file]
target/linux/generic/patches-2.6.39/630-packet_socket_type.patch [deleted file]
target/linux/generic/patches-2.6.39/640-bridge_no_eap_forward.patch [deleted file]
target/linux/generic/patches-2.6.39/641-bridge_always_accept_eap.patch [deleted file]
target/linux/generic/patches-2.6.39/642-bridge_port_isolate.patch [deleted file]
target/linux/generic/patches-2.6.39/643-bridge_remove_ipv6_dependency.patch [deleted file]
target/linux/generic/patches-2.6.39/650-pppoe_header_pad.patch [deleted file]
target/linux/generic/patches-2.6.39/651-wireless_mesh_header.patch [deleted file]
target/linux/generic/patches-2.6.39/652-atm_header_changes.patch [deleted file]
target/linux/generic/patches-2.6.39/700-swconfig.patch [deleted file]
target/linux/generic/patches-2.6.39/701-phy_extension.patch [deleted file]
target/linux/generic/patches-2.6.39/702-phy_add_aneg_done_function.patch [deleted file]
target/linux/generic/patches-2.6.39/720-phy_adm6996.patch [deleted file]
target/linux/generic/patches-2.6.39/721-phy_packets.patch [deleted file]
target/linux/generic/patches-2.6.39/722-phy_mvswitch.patch [deleted file]
target/linux/generic/patches-2.6.39/723-phy_ip175c.patch [deleted file]
target/linux/generic/patches-2.6.39/724-phy_ar8216.patch [deleted file]
target/linux/generic/patches-2.6.39/725-phy_rtl8306.patch [deleted file]
target/linux/generic/patches-2.6.39/726-phy_rtl8366.patch [deleted file]
target/linux/generic/patches-2.6.39/727-phy-rtl8367.patch [deleted file]
target/linux/generic/patches-2.6.39/750-hostap_txpower.patch [deleted file]
target/linux/generic/patches-2.6.39/810-pci_disable_common_quirks.patch [deleted file]
target/linux/generic/patches-2.6.39/811-pci_disable_usb_common_quirks.patch [deleted file]
target/linux/generic/patches-2.6.39/820-usb_add_usb_find_device_by_name.patch [deleted file]
target/linux/generic/patches-2.6.39/822-usb_serial_option_add_more_devices.patch [deleted file]
target/linux/generic/patches-2.6.39/830-ledtrig_morse.patch [deleted file]
target/linux/generic/patches-2.6.39/831-ledtrig_netdev.patch [deleted file]
target/linux/generic/patches-2.6.39/832-ledtrig_usbdev.patch [deleted file]
target/linux/generic/patches-2.6.39/833-gpio_buttons.patch [deleted file]
target/linux/generic/patches-2.6.39/835-gpiodev.patch [deleted file]
target/linux/generic/patches-2.6.39/840-rtc7301.patch [deleted file]
target/linux/generic/patches-2.6.39/850-glamo_headers.patch [deleted file]
target/linux/generic/patches-2.6.39/860-01_hotpluggable_spi_gpio.patch [deleted file]
target/linux/generic/patches-2.6.39/861-04_spi_gpio_implement_spi_delay.patch [deleted file]
target/linux/generic/patches-2.6.39/862-gpio_spi_driver.patch [deleted file]
target/linux/generic/patches-2.6.39/863-gpiommc.patch [deleted file]
target/linux/generic/patches-2.6.39/864-gpiommc_configfs_locking.patch [deleted file]
target/linux/generic/patches-2.6.39/870-hifn795x_byteswap.patch [deleted file]
target/linux/generic/patches-2.6.39/900-slab_maxsize.patch [deleted file]
target/linux/generic/patches-2.6.39/910-kobject_uevent.patch [deleted file]
target/linux/generic/patches-2.6.39/911-kobject_add_broadcast_uevent.patch [deleted file]
target/linux/generic/patches-2.6.39/920-unable_to_open_console.patch [deleted file]
target/linux/generic/patches-2.6.39/921-use_preinit_as_init.patch [deleted file]
target/linux/generic/patches-2.6.39/930-crashlog.patch [deleted file]
target/linux/generic/patches-2.6.39/940-ocf_kbuild_integration.patch [deleted file]
target/linux/generic/patches-2.6.39/941-ocf_20110720.patch [deleted file]
target/linux/generic/patches-2.6.39/950-vm_exports.patch [deleted file]
target/linux/generic/patches-2.6.39/960-decompress_unlzo_fix.patch [deleted file]

diff --git a/target/linux/generic/config-2.6.39 b/target/linux/generic/config-2.6.39
deleted file mode 100644 (file)
index dc9921b..0000000
+++ /dev/null
@@ -1,3182 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_9P_FS is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_AB8500_CORE is not set
-# CONFIG_ABX500_CORE is not set
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_ACENIC is not set
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_ACPI_APEI is not set
-# CONFIG_ACPI_HED is not set
-# CONFIG_ACPI_POWER_METER is not set
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADIS16255 is not set
-# CONFIG_ADM6996_PHY is not set
-# CONFIG_ADM8211 is not set
-CONFIG_AEABI=y
-# CONFIG_AFFS_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_AF_RXRPC is not set
-# CONFIG_AGP is not set
-CONFIG_AIO=y
-# CONFIG_AIRO is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_ALTERA_STAPL is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_AMIGA_PARTITION is not set
-CONFIG_ANON_INODES=y
-# CONFIG_APDS9802ALS is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_AR7 is not set
-# CONFIG_AR8216_PHY is not set
-# CONFIG_AR9170_USB is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CNS3XXX is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_DMA_ADDR_T_64BIT is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_LPC32XX is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_MXS is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_NUC93X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_S5P6440 is not set
-# CONFIG_ARCH_S5P6442 is not set
-# CONFIG_ARCH_S5P64X0 is not set
-# CONFIG_ARCH_S5PC100 is not set
-# CONFIG_ARCH_S5PV210 is not set
-# CONFIG_ARCH_S5PV310 is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_SHMOBILE is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-# CONFIG_ARCH_TCC_926 is not set
-# CONFIG_ARCH_TEGRA is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_U8500 is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_VEXPRESS is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCNET is not set
-CONFIG_ARM_DMA_MEM_BUFFERABLE=y
-# CONFIG_ARM_ERRATA_411920 is not set
-# CONFIG_ARM_PATCH_PHYS_VIRT is not set
-# CONFIG_ARM_UNWIND is not set
-CONFIG_ARPD=y
-# CONFIG_ARTHUR is not set
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_ASUS_OLED is not set
-# CONFIG_ASYNC_RAID6_TEST is not set
-# CONFIG_ASYNC_TX_DMA is not set
-# CONFIG_AT76C50X_USB is not set
-# CONFIG_ATA is not set
-# CONFIG_ATALK is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_ATA_ACPI is not set
-CONFIG_ATA_BMDMA=y
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_ATA_NONSTANDARD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ATA_PIIX is not set
-CONFIG_ATA_SFF=y
-# CONFIG_ATA_VERBOSE_ERROR is not set
-# CONFIG_ATH5K is not set
-# CONFIG_ATH6K_LEGACY is not set
-# CONFIG_ATH9K is not set
-# CONFIG_ATL1 is not set
-# CONFIG_ATL1C is not set
-# CONFIG_ATL1E is not set
-# CONFIG_ATL2 is not set
-# CONFIG_ATM is not set
-# CONFIG_ATMEL is not set
-# CONFIG_ATM_AMBASSADOR is not set
-# CONFIG_ATM_BR2684 is not set
-CONFIG_ATM_BR2684_IPFILTER=y
-# CONFIG_ATM_CLIP is not set
-CONFIG_ATM_CLIP_NO_ICMP=y
-# CONFIG_ATM_DRIVERS is not set
-# CONFIG_ATM_DUMMY is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_FORE200E is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_LANE is not set
-# CONFIG_ATM_MPOA is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_SOLOS is not set
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_ATOMIC64_SELFTEST is not set
-# CONFIG_AUDIT is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTO_ZRELADDR is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_AVERAGE is not set
-# CONFIG_AX25 is not set
-# CONFIG_AX25_DAMA_SLAVE is not set
-# CONFIG_AX88796 is not set
-# CONFIG_B43 is not set
-# CONFIG_B43LEGACY is not set
-# CONFIG_B44 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-CONFIG_BASE_FULL=y
-CONFIG_BASE_SMALL=0
-# CONFIG_BATMAN_ADV is not set
-# CONFIG_BATTERY_BQ20Z75 is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-# CONFIG_BATTERY_MAX17042 is not set
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-# CONFIG_BCM63XX_PHY is not set
-# CONFIG_BCMA is not set
-CONFIG_BCMA_POSSIBLE=y
-# CONFIG_BCM_WIMAX is not set
-# CONFIG_BDI_SWITCH is not set
-# CONFIG_BE2ISCSI is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_BINARY_PRINTF is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_BITREVERSE=y
-CONFIG_BKL=y
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_CPQ_DA is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_BLK_DEV_CS5536 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_DRBD is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_IDEACPI is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_INTEGRITY is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_BLK_DEV_IT8172 is not set
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_RBD is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_XIP is not set
-CONFIG_BLOCK=y
-# CONFIG_BMP085 is not set
-# CONFIG_BNA is not set
-# CONFIG_BNX2 is not set
-# CONFIG_BONDING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-CONFIG_BOOT_RAW=y
-# CONFIG_BPQETHER is not set
-# CONFIG_BRCM80211 is not set
-CONFIG_BRIDGE=y
-# CONFIG_BRIDGE_EBT_802_3 is not set
-# CONFIG_BRIDGE_EBT_AMONG is not set
-# CONFIG_BRIDGE_EBT_ARP is not set
-# CONFIG_BRIDGE_EBT_ARPREPLY is not set
-# CONFIG_BRIDGE_EBT_BROUTE is not set
-# CONFIG_BRIDGE_EBT_DNAT is not set
-# CONFIG_BRIDGE_EBT_IP is not set
-# CONFIG_BRIDGE_EBT_IP6 is not set
-# CONFIG_BRIDGE_EBT_LIMIT is not set
-# CONFIG_BRIDGE_EBT_LOG is not set
-# CONFIG_BRIDGE_EBT_MARK is not set
-# CONFIG_BRIDGE_EBT_MARK_T is not set
-# CONFIG_BRIDGE_EBT_NFLOG is not set
-# CONFIG_BRIDGE_EBT_PKTTYPE is not set
-# CONFIG_BRIDGE_EBT_REDIRECT is not set
-# CONFIG_BRIDGE_EBT_SNAT is not set
-# CONFIG_BRIDGE_EBT_STP is not set
-# CONFIG_BRIDGE_EBT_T_FILTER is not set
-# CONFIG_BRIDGE_EBT_T_NAT is not set
-# CONFIG_BRIDGE_EBT_ULOG is not set
-# CONFIG_BRIDGE_EBT_VLAN is not set
-# CONFIG_BRIDGE_IGMP_SNOOPING is not set
-# CONFIG_BRIDGE_NETFILTER is not set
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-# CONFIG_BROADCOM_PHY is not set
-CONFIG_BROKEN_ON_SMP=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_BT is not set
-# CONFIG_BTRFS_FS is not set
-# CONFIG_BT_ATH3K is not set
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_CMTP is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBTSDIO is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIBTUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIUART_ATH3K is not set
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_BT_HIDP is not set
-CONFIG_BT_L2CAP=y
-# CONFIG_BT_MRVL is not set
-# CONFIG_BT_RFCOMM is not set
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_SCO=y
-CONFIG_BUG=y
-# CONFIG_C2PORT is not set
-# CONFIG_CAIF is not set
-# CONFIG_CAN is not set
-# CONFIG_CAPI_AVM is not set
-# CONFIG_CAPI_EICON is not set
-# CONFIG_CAPI_TRACE is not set
-CONFIG_CARDBUS=y
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_CASSINI is not set
-CONFIG_CAVIUM_OCTEON_HELPER=y
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-# CONFIG_CB710_CORE is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_CC_STACKPROTECTOR is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_CEPH_FS is not set
-# CONFIG_CEPH_LIB is not set
-# CONFIG_CFG80211 is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_CHARGER_GPIO is not set
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_CHELSIO_T4 is not set
-# CONFIG_CHELSIO_T4VF is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_CIFS is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_STATS2 is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-CONFIG_CLS_U32_MARK=y
-CONFIG_CLS_U32_PERF=y
-CONFIG_CMDLINE=""
-# CONFIG_CMDLINE_BOOL is not set
-# CONFIG_CMDLINE_FORCE is not set
-# CONFIG_CNIC is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_CODE_PATCHING_SELFTEST is not set
-# CONFIG_COMEDI is not set
-# CONFIG_COMPACTION is not set
-# CONFIG_COMPAT_BRK is not set
-# CONFIG_CONFIGFS_FS is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_CONSTRUCTORS=y
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_COPS is not set
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-# CONFIG_CRAMFS is not set
-CONFIG_CRASHLOG=y
-# CONFIG_CRASH_DUMP is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC_ITU_T is not set
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CROSS_COMPILE=""
-CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_AEAD is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_AES_NI_INTEL is not set
-# CONFIG_CRYPTO_ALGAPI is not set
-# CONFIG_CRYPTO_ALGAPI2 is not set
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_BLKCIPHER is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CRC32C_INTEL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-# CONFIG_CRYPTO_DEV_MV_CESA is not set
-# CONFIG_CRYPTO_DEV_TALITOS is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_FIPS is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set
-# CONFIG_CRYPTO_HASH is not set
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_PCOMP is not set
-# CONFIG_CRYPTO_PCOMP2 is not set
-# CONFIG_CRYPTO_PCRYPT is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_RNG is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SALSA20_586 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SEQIV is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_TWOFISH_COMMON is not set
-# CONFIG_CRYPTO_USER_API_HASH is not set
-# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
-# CONFIG_CRYPTO_VMAC is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-# CONFIG_CRYPTO_ZLIB is not set
-# CONFIG_CRYSTALHD is not set
-# CONFIG_CS5535_MFGPT is not set
-# CONFIG_CUSE is not set
-# CONFIG_CXT1E1 is not set
-# CONFIG_DAB is not set
-# CONFIG_DAVICOM_PHY is not set
-# CONFIG_DCB is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_CREDENTIALS is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_ICEDCC is not set
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_INFO_REDUCED=y
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_LOCKDEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_NOTIFIERS is not set
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RODATA is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_DEBUG_SECTION_MISMATCH is not set
-# CONFIG_DEBUG_SET_MODULE_RONX is not set
-# CONFIG_DEBUG_SG is not set
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_STACKOVERFLOW is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
-# CONFIG_DECNET is not set
-CONFIG_DECOMPRESS_LZMA_NEEDED=y
-CONFIG_DEFAULT_DEADLINE=y
-CONFIG_DEFAULT_IOSCHED="deadline"
-CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-# CONFIG_DEFAULT_NOOP is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_TCP_CONG="westwood"
-CONFIG_DEFAULT_WESTWOOD=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-# CONFIG_DEPRECATED_PARAM_STRUCT is not set
-# CONFIG_DETECT_HUNG_TASK is not set
-# CONFIG_DEVKMEM is not set
-CONFIG_DEVPORT=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_DEVTMPFS is not set
-# CONFIG_DEVTMPFS_MOUNT is not set
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_DL2K is not set
-# CONFIG_DLM is not set
-# CONFIG_DM9000 is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_DMADEVICES_DEBUG is not set
-# CONFIG_DMASCC is not set
-# CONFIG_DMATEST is not set
-# CONFIG_DMA_API_DEBUG is not set
-# CONFIG_DMA_ENGINE is not set
-# CONFIG_DM_LOG_USERSPACE is not set
-# CONFIG_DM_RAID is not set
-# CONFIG_DM_FLAKEY is not set
-# CONFIG_DNET is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_DRAGONRISE_FF is not set
-# CONFIG_DRM is not set
-# CONFIG_DS1682 is not set
-# CONFIG_DTLK is not set
-# CONFIG_DUMMY is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DX_SEP is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_E100 is not set
-# CONFIG_E1000 is not set
-# CONFIG_E1000E is not set
-# CONFIG_EASYCAP is not set
-# CONFIG_ECHO is not set
-# CONFIG_ECONET is not set
-# CONFIG_EDAC is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-CONFIG_EFI_PARTITION=y
-# CONFIG_EFS_FS is not set
-# CONFIG_ELF_CORE is not set
-CONFIG_EMBEDDED=y
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# CONFIG_ENC28J60 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_EPIC100 is not set
-CONFIG_EPOLL=y
-# CONFIG_EQUALIZER is not set
-# CONFIG_ET131X is not set
-# CONFIG_ETHOC is not set
-CONFIG_EVENTFD=y
-CONFIG_EXPERIMENTAL=y
-CONFIG_EXPERT=y
-# CONFIG_EXPORTFS is not set
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4_DEBUG is not set
-# CONFIG_EXT4_FS is not set
-# CONFIG_EXT4_FS_POSIX_ACL is not set
-# CONFIG_EXT4_FS_SECURITY is not set
-CONFIG_EXT4_FS_XATTR=y
-CONFIG_EXT4_USE_FOR_EXT23=y
-CONFIG_EXTRA_FIRMWARE=""
-CONFIG_EXTRA_TARGETS=""
-# CONFIG_EZX_PCAP is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
-# CONFIG_FANOTIFY is not set
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_FAT_FS is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_FB is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ARK is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_FB_CARMINE is not set
-# CONFIG_FB_CFB_COPYAREA is not set
-# CONFIG_FB_CFB_FILLRECT is not set
-# CONFIG_FB_CFB_IMAGEBLIT is not set
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_IBM_GXT4500 is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_N411 is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_OF is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_PS3 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_UDL is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_VIA is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_VT8623 is not set
-# CONFIG_FCOE is not set
-# CONFIG_FCOE_FNIC is not set
-# CONFIG_FDDI is not set
-# CONFIG_FEALNX is not set
-# CONFIG_FHANDLE is not set
-CONFIG_FIB_RULES=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_FIREWIRE is not set
-# CONFIG_FIREWIRE_NOSY is not set
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-# CONFIG_FIXED_PHY is not set
-CONFIG_FLATMEM=y
-CONFIG_FLATMEM_MANUAL=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_FORCEDETH is not set
-CONFIG_FORCE_MAX_ZONEORDER=11
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_FREEZER is not set
-# CONFIG_FSCACHE is not set
-CONFIG_FSNOTIFY=y
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_FT1000 is not set
-# CONFIG_FTL is not set
-# CONFIG_FTMAC100 is not set
-# CONFIG_FTRACE is not set
-# CONFIG_FTRACE_STARTUP_TEST is not set
-# CONFIG_FTR_FIXUP_SELFTEST is not set
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_FUSE_FS is not set
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-# CONFIG_FUSION_SPI is not set
-CONFIG_FUTEX=y
-CONFIG_FW_LOADER=y
-CONFIG_GACT_PROB=y
-# CONFIG_GAMEPORT is not set
-# CONFIG_GCOV_KERNEL is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-# CONFIG_GENERIC_CPU_DEVICES is not set
-CONFIG_GENERIC_FIND_BIT_LE=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GFS2_FS is not set
-# CONFIG_GIGASET_CAPI is not set
-# CONFIG_GIGASET_DEBUG is not set
-# CONFIG_GPIOLIB is not set
-# CONFIG_GPIO_74X164 is not set
-# CONFIG_GPIO_ADP5588 is not set
-# CONFIG_GPIO_BASIC_MMIO is not set
-# CONFIG_GPIO_BT8XX is not set
-# CONFIG_GPIO_CS5535 is not set
-# CONFIG_GPIO_DEVICE is not set
-# CONFIG_GPIO_IT8761E is not set
-# CONFIG_GPIO_LANGWELL is not set
-# CONFIG_GPIO_MAX7300 is not set
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_MC33880 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_ML_IOH is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_PCH is not set
-# CONFIG_GPIO_RDC321X is not set
-# CONFIG_GPIO_SCH is not set
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_SYSFS is not set
-# CONFIG_GPIO_VX855 is not set
-# CONFIG_GPIO_XILINX is not set
-# CONFIG_GREENASIA_FF is not set
-# CONFIG_HAMACHI is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HARDLOCKUP_DETECTOR is not set
-# CONFIG_HAVE_AOUT is not set
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-# CONFIG_HCALL_STATS is not set
-# CONFIG_HDLC is not set
-# CONFIG_HDLC_CISCO is not set
-# CONFIG_HDLC_FR is not set
-# CONFIG_HDLC_PPP is not set
-# CONFIG_HDLC_RAW is not set
-# CONFIG_HDLC_RAW_ETH is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_HERMES is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HIBERNATION is not set
-# CONFIG_HID is not set
-# CONFIG_HIDRAW is not set
-# CONFIG_HID_3M_PCT is not set
-# CONFIG_HID_A4TECH is not set
-# CONFIG_HID_ACRUX_FF is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_CANDO is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EGALAX is not set
-# CONFIG_HID_ELECOM is not set
-# CONFIG_HID_EMS_FF is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_KEYTOUCH is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_LCPOWER is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MAGICMOUSE is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_MOSART is not set
-# CONFIG_HID_MULTITOUCH is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_ORTEK is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PICOLCD is not set
-# CONFIG_HID_PID is not set
-# CONFIG_HID_PRODIKEYS is not set
-# CONFIG_HID_QUANTA is not set
-# CONFIG_HID_ROCCAT is not set
-# CONFIG_HID_ROCCAT_ARVO is not set
-# CONFIG_HID_ROCCAT_KONE is not set
-# CONFIG_HID_ROCCAT_KONEPLUS is not set
-# CONFIG_HID_ROCCAT_KOVAPLUS is not set
-# CONFIG_HID_ROCCAT_PYRA is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_STANTUM is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_HID_THRUSTMASTER is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_UCLOGIC is not set
-# CONFIG_HID_WACOM is not set
-# CONFIG_HID_WALTOP is not set
-# CONFIG_HID_ZEROPLUS is not set
-# CONFIG_HID_ZYDACRON is not set
-# CONFIG_HID_ACRUX is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_HIGH_RES_TIMERS=y
-# CONFIG_HIPPI is not set
-# CONFIG_HMC6352 is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_CS is not set
-# CONFIG_HOSTAP_PCI is not set
-# CONFIG_HOSTAP_PLX is not set
-CONFIG_HOTPLUG=y
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_HOTPLUG_PCI is not set
-# CONFIG_HP100 is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_HP_ILO is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_I2CPLD is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_HVC_DCC is not set
-# CONFIG_HVC_UDBG is not set
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_HW_RANDOM_AMD is not set
-# CONFIG_HW_RANDOM_GEODE is not set
-# CONFIG_HW_RANDOM_INTEL is not set
-# CONFIG_HW_RANDOM_TIMERIOMEM is not set
-# CONFIG_HW_RANDOM_VIA is not set
-# CONFIG_HYPERV is not set
-# CONFIG_HYSDN is not set
-CONFIG_HZ=100
-CONFIG_HZ_100=y
-# CONFIG_HZ_1000 is not set
-# CONFIG_HZ_1024 is not set
-# CONFIG_HZ_128 is not set
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_48 is not set
-# CONFIG_I2C is not set
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCA is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_CHARDEV is not set
-# CONFIG_I2C_COMPAT is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DESIGNWARE is not set
-# CONFIG_I2C_DIOLAN_U2C is not set
-# CONFIG_I2C_EG20T is not set
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_HELPER_AUTO is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_IBM_IIC is not set
-# CONFIG_I2C_INTEL_MID is not set
-# CONFIG_I2C_ISCH is not set
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_MUX is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_PXA_PCI is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_SCMI is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_SMBUS is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_XILINX is not set
-# CONFIG_I2O is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_IBM_ASM is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_IDE is not set
-# CONFIG_IDE_GD is not set
-# CONFIG_IDE_PHISON is not set
-# CONFIG_IDE_PROC_FS is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDEAPAD_LAPTOP is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_IFB is not set
-# CONFIG_IGB is not set
-# CONFIG_IGBVF is not set
-# CONFIG_IIO is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_IKCONFIG_PROC is not set
-# CONFIG_IMAGE_CMDLINE_HACK is not set
-CONFIG_INET=y
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_INET6_XFRM_MODE_BEET is not set
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_TCP_DIAG is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INFINIBAND is not set
-# CONFIG_INFTL is not set
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
-CONFIG_INITRAMFS_COMPRESSION_NONE=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_INOTIFY_USER=y
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_AD714X is not set
-# CONFIG_INPUT_ADXL34X is not set
-# CONFIG_INPUT_APANEL is not set
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_ATLAS_BTNS is not set
-# CONFIG_INPUT_CMA3000 is not set
-# CONFIG_INPUT_CM109 is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_GPIO is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_PCF8574 is not set
-# CONFIG_INPUT_PCSPKR is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_SPARSEKMAP is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_WINBOND_CIR is not set
-# CONFIG_INPUT_WISTRON_BTNS is not set
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_INTEL_IDLE is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IP_FIB_TRIE_STATS is not set
-# CONFIG_IP_SET is not set
-# CONFIG_IP1000 is not set
-# CONFIG_IP17XX_PHY is not set
-# CONFIG_IP6_NF_FILTER is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP6_NF_MANGLE is not set
-# CONFIG_IP6_NF_MATCH_AH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_RAW is not set
-# CONFIG_IP6_NF_TARGET_HL is not set
-# CONFIG_IP6_NF_TARGET_LOG is not set
-# CONFIG_IP6_NF_TARGET_REJECT is not set
-# CONFIG_IPC_NS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_IPV6 is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_IPV6_MROUTE_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_ROUTE_INFO is not set
-# CONFIG_IPV6_SIT is not set
-# CONFIG_IPV6_SIT_6RD is not set
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPW2100 is not set
-# CONFIG_IPW2100_DEBUG is not set
-CONFIG_IPW2100_MONITOR=y
-# CONFIG_IPW2200 is not set
-# CONFIG_IPW2200_DEBUG is not set
-CONFIG_IPW2200_MONITOR=y
-# CONFIG_IPW2200_PROMISCUOUS is not set
-# CONFIG_IPW2200_QOS is not set
-# CONFIG_IPW2200_RADIOTAP is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_IPX is not set
-CONFIG_IP_ADVANCED_ROUTER=y
-# CONFIG_IP_DCCP is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_NF_ARPFILTER is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_NF_ARP_MANGLE is not set
-# CONFIG_IP_NF_FILTER is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_SECURITY is not set
-# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_LOG is not set
-# CONFIG_IP_NF_TARGET_MASQUERADE is not set
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_TTL is not set
-# CONFIG_IP_NF_TARGET_ULOG is not set
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_IP_PNP is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_SCTP is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IRDA is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_IR_CORE is not set
-# CONFIG_IR_IMON is not set
-# CONFIG_IR_JVC_DECODER is not set
-# CONFIG_IR_LIRC_CODEC is not set
-# CONFIG_IR_MCEUSB is not set
-# CONFIG_IR_NEC_DECODER is not set
-# CONFIG_IR_RC5_DECODER is not set
-# CONFIG_IR_RC5_SZ_DECODER is not set
-# CONFIG_IR_RC6_DECODER is not set
-# CONFIG_IR_SONY_DECODER is not set
-# CONFIG_IR_STREAMZAP is not set
-# CONFIG_ISCSI_BOOT_SYSFS is not set
-# CONFIG_SCSI_CXGB3_ISCSI is not set
-# CONFIG_SCSI_CXGB4_ISCSI is not set
-# CONFIG_ISCSI_TCP is not set
-CONFIG_ISDN=y
-# CONFIG_ISDN_AUDIO is not set
-# CONFIG_ISDN_CAPI is not set
-# CONFIG_ISDN_CAPI_CAPIDRV is not set
-# CONFIG_ISDN_DIVERSION is not set
-# CONFIG_ISDN_DRV_ACT2000 is not set
-# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
-# CONFIG_ISDN_DRV_GIGASET is not set
-# CONFIG_ISDN_DRV_HISAX is not set
-# CONFIG_ISDN_DRV_ICN is not set
-# CONFIG_ISDN_DRV_LOOP is not set
-# CONFIG_ISDN_DRV_PCBIT is not set
-# CONFIG_ISDN_DRV_SC is not set
-# CONFIG_ISDN_I4L is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_ISL29020 is not set
-# CONFIG_ISO9660_FS is not set
-# CONFIG_ISS4xx is not set
-# CONFIG_IWL3945 is not set
-# CONFIG_IWLAGN is not set
-# CONFIG_IWLWIFI is not set
-# CONFIG_IWMC3200TOP is not set
-# CONFIG_IXGB is not set
-# CONFIG_JBD is not set
-# CONFIG_JBD2_DEBUG is not set
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_POSIX_ACL is not set
-# CONFIG_JFFS2_FS_SECURITY is not set
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_FS_XATTR=y
-CONFIG_JFFS2_LZMA=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_ZLIB is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_JME is not set
-CONFIG_JOLIET=y
-# CONFIG_JUMP_LABEL is not set
-# CONFIG_KALLSYMS is not set
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_KERNEL_BZIP2 is not set
-# CONFIG_KERNEL_GZIP is not set
-CONFIG_KERNEL_LZMA=y
-# CONFIG_KERNEL_LZO is not set
-# CONFIG_KERNEL_XZ is not set
-# CONFIG_KEXEC is not set
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_GPIO_POLLED is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MATRIX is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_MCS is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYBOARD_QT1070 is not set
-# CONFIG_KEYBOARD_QT2160 is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_TCA6416 is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYS is not set
-# CONFIG_KGDB is not set
-# CONFIG_KMEMCHECK is not set
-# CONFIG_KPROBES is not set
-# CONFIG_KS8842 is not set
-# CONFIG_KS8851 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_KSM is not set
-# CONFIG_KSZ884X_PCI is not set
-# CONFIG_KVM_GUEST is not set
-# CONFIG_L2TP is not set
-# CONFIG_L2TP_ETH is not set
-# CONFIG_L2TP_IP is not set
-# CONFIG_L2TP_V3 is not set
-# CONFIG_LANMEDIA is not set
-# CONFIG_LAPB is not set
-# CONFIG_LASAT is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_LBDAF=y
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_LEDS_BD2802 is not set
-CONFIG_LEDS_CLASS=y
-# CONFIG_LEDS_DAC124S085 is not set
-# CONFIG_LEDS_GPIO is not set
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_INTEL_SS4200 is not set
-# CONFIG_LEDS_LM3530 is not set
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_LP5521 is not set
-# CONFIG_LEDS_LP5523 is not set
-# CONFIG_LEDS_LT3593 is not set
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_PCA955X is not set
-CONFIG_LEDS_TRIGGERS=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_MORSE is not set
-CONFIG_LEDS_TRIGGER_NETDEV=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_USBDEV is not set
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_LIB80211 is not set
-# CONFIG_LIB80211_CRYPT_CCMP is not set
-# CONFIG_LIB80211_CRYPT_TKIP is not set
-# CONFIG_LIB80211_CRYPT_WEP is not set
-# CONFIG_LIB80211_DEBUG is not set
-# CONFIG_LIBCRC32C is not set
-# CONFIG_LIBERTAS is not set
-# CONFIG_LIBERTAS_THINFIRM is not set
-# CONFIG_LIBERTAS_USB is not set
-# CONFIG_LIBFC is not set
-# CONFIG_LIBFCOE is not set
-# CONFIG_LIBIPW_DEBUG is not set
-# CONFIG_LINE6_USB is not set
-# CONFIG_LIRC_STAGING is not set
-# CONFIG_LKDTM is not set
-CONFIG_LLC=y
-# CONFIG_LLC2 is not set
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_LOCKD is not set
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_LOCKD_V4=y
-# CONFIG_LOCKUP_DETECTOR is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_LOGFS is not set
-# CONFIG_LOGIRUMBLEPAD2_FF is not set
-# CONFIG_LOGITECH_FF is not set
-# CONFIG_LOGO is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_LOONGSON_MC146818 is not set
-# CONFIG_LPC_SCH is not set
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_LSI_ET1011C_PHY is not set
-# CONFIG_LTPC is not set
-# CONFIG_LXT_PHY is not set
-CONFIG_LZMA_COMPRESS=y
-CONFIG_LZMA_DECOMPRESS=y
-# CONFIG_M25PXX_PREFER_SMALL_SECTOR_ERASE is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_JZ4740 is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_NO_WESTBRIDGE is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_MACVTAP is not set
-# CONFIG_MAC_EMUMOUSEBTN is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_MARVELL_PHY is not set
-# CONFIG_MAX63XX_WATCHDOG is not set
-# CONFIG_MD is not set
-# CONFIG_MDIO_BITBANG is not set
-# CONFIG_MEDIA_ATTACH is not set
-# CONFIG_MEDIA_CONTROLLER is not set
-# CONFIG_MEDIA_SUPPORT is not set
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_MEMORY_FAILURE is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_MFD_88PM860X is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_CS5535 is not set
-# CONFIG_MFD_JANZ_CMODIO is not set
-# CONFIG_MFD_MAX8925 is not set
-# CONFIG_MFD_MAX8997 is not set
-# CONFIG_MFD_MAX8998 is not set
-# CONFIG_MFD_MC13783 is not set
-# CONFIG_MFD_MC13XXX is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_RDC321X is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_STMPE is not set
-CONFIG_MFD_SUPPORT=y
-# CONFIG_MFD_TC35892 is not set
-# CONFIG_MFD_TC3589X is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_MFD_TIMBERDALE is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_TPS6586X is not set
-# CONFIG_MFD_VX855 is not set
-# CONFIG_MFD_WM831X is not set
-# CONFIG_MFD_WM831X_I2C is not set
-# CONFIG_MFD_WM831X_SPI is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MFD_WM8994 is not set
-# CONFIG_MFD_WL1273_CORE is not set
-# CONFIG_MG_DISK is not set
-# CONFIG_MICREL_PHY is not set
-# CONFIG_MIGRATION is not set
-CONFIG_MII=y
-# CONFIG_MIKROTIK_RB532 is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_MINIX_FS_NATIVE_ENDIAN is not set
-# CONFIG_MIPS_ALCHEMY is not set
-# CONFIG_MIPS_COBALT is not set
-# CONFIG_MIPS_FPU_EMU is not set
-# CONFIG_MIPS_MALTA is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MISC_DEVICES=y
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_MISDN is not set
-# CONFIG_MISDN_AVMFRITZ is not set
-# CONFIG_MISDN_HFCPCI is not set
-# CONFIG_MISDN_HFCUSB is not set
-# CONFIG_MISDN_INFINEON is not set
-# CONFIG_MISDN_NETJET is not set
-# CONFIG_MISDN_SPEEDFAX is not set
-# CONFIG_MISDN_W6692 is not set
-# CONFIG_MKISS is not set
-# CONFIG_MLX4_CORE is not set
-# CONFIG_MMC is not set
-# CONFIG_MMC_ARMMMCI is not set
-# CONFIG_MMC_BLOCK is not set
-CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_MMC_BLOCK_MINORS=8
-# CONFIG_MMC_CB710 is not set
-# CONFIG_MMC_CLKGATE is not set
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_DW is not set
-# CONFIG_MMC_MVSDIO is not set
-# CONFIG_MMC_S3C is not set
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_SDRICOH_CS is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_TEST is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-# CONFIG_MMC_USHC is not set
-# CONFIG_MMC_VIA_SDMMC is not set
-CONFIG_MMU=y
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_GPIO is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_PS2_SENTELIC is not set
-# CONFIG_MOUSE_SYNAPTICS_I2C is not set
-# CONFIG_MSDOS_FS is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_MSI_BITMAP_SELFTEST is not set
-CONFIG_MTD=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_AR7_PARTS is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_MTD_BLOCK2MTD is not set
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-CONFIG_MTD_CHAR=y
-# CONFIG_MTD_CMDLINE_PARTS is not set
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_INTEL_VR_NOR is not set
-# CONFIG_MTD_JEDECPROBE is not set
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_M25P80 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_MYLOADER_PARTS is not set
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_CAFE is not set
-# CONFIG_MTD_NAND_DENALI is not set
-CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xff108018
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_ECC_BCH is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_NAND_RICOH is not set
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_ONENAND is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PCMCIA is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_PLATRAM is not set
-# CONFIG_MTD_LATCH_ADDR is not set
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_ROM is not set
-CONFIG_MTD_ROOTFS_ROOT_DEV=y
-CONFIG_MTD_ROOTFS_SPLIT=y
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_SWAP is not set
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_UBI is not set
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-# CONFIG_MV643XX_ETH is not set
-# CONFIG_MVSWITCH_PHY is not set
-# CONFIG_MWAVE is not set
-# CONFIG_MWL8K is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NAMESPACES is not set
-# CONFIG_NATIONAL_PHY is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NEC_MARKEINS is not set
-CONFIG_NET=y
-# CONFIG_NETCONSOLE is not set
-CONFIG_NETDEVICES=y
-CONFIG_NETDEV_1000=y
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_NETFILTER_ADVANCED is not set
-# CONFIG_NETFILTER_DEBUG is not set
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set
-# CONFIG_NETFILTER_TPROXY is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_NETFILTER_XT_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_CPU is not set
-# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_HL is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7 is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OSF is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_CT is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_HL is not set
-# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
-# CONFIG_NETFILTER_XT_TARGET_LED is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-# CONFIG_NETFILTER_XT_TARGET_TEE is not set
-# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NETROM is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETXEN_NIC is not set
-# CONFIG_NET_9P is not set
-# CONFIG_NET_ACT_CSUM is not set
-# CONFIG_NET_ACT_GACT is not set
-# CONFIG_NET_ACT_IPT is not set
-# CONFIG_NET_ACT_MIRRED is not set
-# CONFIG_NET_ACT_NAT is not set
-# CONFIG_NET_ACT_PEDIT is not set
-# CONFIG_NET_ACT_POLICE is not set
-# CONFIG_NET_ACT_SIMP is not set
-# CONFIG_NET_ACT_SKBEDIT is not set
-CONFIG_NET_CLS=y
-# CONFIG_NET_CLS_ACT is not set
-# CONFIG_NET_CLS_BASIC is not set
-# CONFIG_NET_CLS_FLOW is not set
-# CONFIG_NET_CLS_FW is not set
-CONFIG_NET_CLS_IND=y
-# CONFIG_NET_CLS_ROUTE4 is not set
-# CONFIG_NET_CLS_RSVP is not set
-# CONFIG_NET_CLS_RSVP6 is not set
-# CONFIG_NET_CLS_TCINDEX is not set
-# CONFIG_NET_CLS_U32 is not set
-# CONFIG_NET_DROP_MONITOR is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_NET_DSA_MV88E6123_61_65 is not set
-# CONFIG_NET_DSA_MV88E6131 is not set
-# CONFIG_NET_DSA_MV88E6XXX is not set
-# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
-# CONFIG_NET_DSA_TAG_DSA is not set
-# CONFIG_NET_DSA_TAG_EDSA is not set
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_EMATCH_CMP is not set
-# CONFIG_NET_EMATCH_META is not set
-# CONFIG_NET_EMATCH_NBYTE is not set
-CONFIG_NET_EMATCH_STACK=32
-# CONFIG_NET_EMATCH_TEXT is not set
-# CONFIG_NET_EMATCH_U32 is not set
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_FC is not set
-# CONFIG_NET_IPGRE is not set
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_NET_IPGRE_DEMUX is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_KEY is not set
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_POCKET is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_NET_SB1000 is not set
-CONFIG_NET_SCHED=y
-# CONFIG_NET_SCH_ATM is not set
-# CONFIG_NET_SCH_CBQ is not set
-# CONFIG_NET_SCH_CHOKE is not set
-# CONFIG_NET_SCH_DRR is not set
-# CONFIG_NET_SCH_DSMARK is not set
-# CONFIG_NET_SCH_ESFQ is not set
-CONFIG_NET_SCH_ESFQ_NFCT=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_NET_SCH_GRED is not set
-# CONFIG_NET_SCH_HFSC is not set
-# CONFIG_NET_SCH_HTB is not set
-# CONFIG_NET_SCH_INGRESS is not set
-# CONFIG_NET_SCH_MULTIQ is not set
-# CONFIG_NET_SCH_MQPRIO is not set
-# CONFIG_NET_SCH_NETEM is not set
-# CONFIG_NET_SCH_PRIO is not set
-# CONFIG_NET_SCH_RED is not set
-# CONFIG_NET_SCH_SFB is not set
-# CONFIG_NET_SCH_SFQ is not set
-# CONFIG_NET_SCH_TBF is not set
-# CONFIG_NET_SCH_TEQL is not set
-# CONFIG_NET_TULIP is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NEW_LEDS=y
-# CONFIG_NFC_DEVICES is not set
-# CONFIG_NFSD is not set
-# CONFIG_NFSD_DEPRECATED is not set
-# CONFIG_NFSD_V2_ACL is not set
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFS_ACL_SUPPORT is not set
-CONFIG_NFS_COMMON=y
-# CONFIG_NFS_FS is not set
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_V4_1 is not set
-# CONFIG_NFTL is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IPV4 is not set
-# CONFIG_NF_CONNTRACK_IPV6 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK_MARK is not set
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
-# CONFIG_NF_CONNTRACK_RTSP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
-# CONFIG_NF_CONNTRACK_SNMP is not set
-# CONFIG_NF_CONNTRACK_ZONES is not set
-# CONFIG_NF_CT_NETLINK is not set
-# CONFIG_NF_CT_PROTO_DCCP is not set
-# CONFIG_NF_CT_PROTO_GRE is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_DEFRAG_IPV4 is not set
-# CONFIG_NF_NAT is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT_NEEDED is not set
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_PROTO_GRE is not set
-# CONFIG_NF_NAT_RTSP is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_NLATTR=y
-# CONFIG_NLS is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_NOP_USB_XCEIV is not set
-# CONFIG_NORTEL_HERMES is not set
-# CONFIG_NOZOMI is not set
-# CONFIG_NO_BOOTMEM is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NS83820 is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_NVRAM is not set
-# CONFIG_NV_TCO is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-# CONFIG_N_GSM is not set
-# CONFIG_OABI_COMPAT is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_OCF_BENCH is not set
-# CONFIG_OCF_C7108 is not set
-# CONFIG_OCF_CRYPTOCTEON is not set
-# CONFIG_OCF_EP80579 is not set
-# CONFIG_OCF_HIFN is not set
-# CONFIG_OCF_HIFNHIPP is not set
-# CONFIG_OCF_IXP4XX is not set
-# CONFIG_OCF_KIRKWOOD is not set
-# CONFIG_OCF_OCF is not set
-# CONFIG_OCF_OCFNULL is not set
-# CONFIG_OCF_SAFE is not set
-# CONFIG_OCF_TALITOS is not set
-# CONFIG_OCF_UBSEC_SSB is not set
-# CONFIG_OC_ETM is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_ORION_WATCHDOG is not set
-# CONFIG_OSF_PARTITION is not set
-CONFIG_OVERLAYFS_FS=y
-# CONFIG_P54_COMMON is not set
-CONFIG_PACKET=y
-# CONFIG_PAGE_POISONING is not set
-# CONFIG_PAGE_SIZE_16KB is not set
-# CONFIG_PAGE_SIZE_32KB is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_64KB is not set
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PANEL is not set
-# CONFIG_PANTHERLORD_FF is not set
-# CONFIG_PARPORT is not set
-# CONFIG_PARPORT_1284 is not set
-# CONFIG_PARPORT_AX88796 is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARASAN_CF is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_ATP867X is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CS5535 is not set
-# CONFIG_PATA_CS5536 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_ISAPNP is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_PCMCIA is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_PATA_QDI is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RDC is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SCH is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_TOSHIBA is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
-# CONFIG_PC300TOO is not set
-# CONFIG_PCCARD is not set
-# CONFIG_PCH_GBE is not set
-# CONFIG_PCH_PHUB is not set
-# CONFIG_PCI200SYN is not set
-# CONFIG_PCIEAER_INJECT is not set
-# CONFIG_PCIEASPM is not set
-# CONFIG_PCIE_ECRC is not set
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_PCI_ATMEL is not set
-# CONFIG_PCI_CNB20LE_QUIRK is not set
-# CONFIG_PCI_DEBUG is not set
-# CONFIG_PCI_DISABLE_COMMON_QUIRKS is not set
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_IOV is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_PCI_QUIRKS=y
-# CONFIG_PCI_STUB is not set
-CONFIG_PCI_SYSCALL=y
-# CONFIG_PCMCIA is not set
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_DEBUG is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_PCMCIA_XIRCOM is not set
-# CONFIG_PCNET32 is not set
-# CONFIG_PCSPKR_PLATFORM is not set
-# CONFIG_PD6729 is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_PERF_COUNTERS is not set
-# CONFIG_PERF_EVENTS is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_PHONE is not set
-# CONFIG_PHONET is not set
-# CONFIG_PHYLIB is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-# CONFIG_PID_NS is not set
-# CONFIG_PLAT_SPEAR is not set
-# CONFIG_PLIP is not set
-# CONFIG_PLX_HERMES is not set
-# CONFIG_PM is not set
-# CONFIG_PM_RUNTIME is not set
-# CONFIG_PMBUS is not set
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POHMELFS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_POWERTV is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_PPC4xx_GPIO is not set
-# CONFIG_PPC_16K_PAGES is not set
-# CONFIG_PPC_256K_PAGES is not set
-CONFIG_PPC_4K_PAGES=y
-# CONFIG_PPC_64K_PAGES is not set
-# CONFIG_PPC_DISABLE_WERROR is not set
-# CONFIG_PPC_EMULATED_STATS is not set
-# CONFIG_PPP is not set
-# CONFIG_PPPOATM is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_DEFLATE is not set
-CONFIG_PPP_FILTER=y
-# CONFIG_PPP_MPPE is not set
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPS is not set
-# CONFIG_PPTP is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_PRINTK=y
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_PRISM2_USB is not set
-# CONFIG_PRISM54 is not set
-# CONFIG_PROBE_INITRD_HEADER is not set
-CONFIG_PROC_FS=y
-# CONFIG_PROC_KCORE is not set
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROFILING is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_PROVE_RCU is not set
-# CONFIG_PSTORE is not set
-# CONFIG_QLA3XXX is not set
-# CONFIG_QLCNIC is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_QUOTA is not set
-# CONFIG_QUOTA_DEBUG is not set
-# CONFIG_QUOTACTL is not set
-# CONFIG_R3964 is not set
-# CONFIG_R6040 is not set
-# CONFIG_R8169 is not set
-# CONFIG_R8187SE is not set
-# CONFIG_R8712U is not set
-# CONFIG_RTS_PSTOR is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_RAMOOPS is not set
-# CONFIG_RAPIDIO is not set
-# CONFIG_RAR_REGISTER is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_RC_CORE is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-CONFIG_RCU_FANOUT=32
-# CONFIG_RCU_FANOUT_EXACT is not set
-# CONFIG_RCU_FAST_NO_HZ is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_RCU_TRACE is not set
-# CONFIG_RC_MAP is not set
-# CONFIG_RDS is not set
-# CONFIG_RD_BZIP2 is not set
-# CONFIG_RD_GZIP is not set
-CONFIG_RD_LZMA=y
-# CONFIG_RD_LZO is not set
-# CONFIG_RD_XZ is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_REDWOOD is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_REGULATOR_BQ24022 is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_RELAY is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_RFKILL is not set
-# CONFIG_RFKILL_INPUT is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_ROSE is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_RT2860 is not set
-# CONFIG_RT2870 is not set
-# CONFIG_RT2X00 is not set
-# CONFIG_RTC_CLASS is not set
-# CONFIG_RTC_DEBUG is not set
-# CONFIG_RTC_DRV_BQ32K is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-CONFIG_RTC_DRV_CMOS=y
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_DS3232 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-# CONFIG_RTC_DRV_EP93XX is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_GENERIC is not set
-# CONFIG_RTC_DRV_ISL12022 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_MSM6242 is not set
-# CONFIG_RTC_DRV_PCF2123 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_PL030 is not set
-# CONFIG_RTC_DRV_PL031 is not set
-# CONFIG_RTC_DRV_PS3 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RP5C01 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_RTC7301 is not set
-# CONFIG_RTC_DRV_RX8025 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTL8180 is not set
-# CONFIG_RTL8187 is not set
-# CONFIG_RTL8192E is not set
-# CONFIG_RTL8192SU is not set
-# CONFIG_RTL8192U is not set
-# CONFIG_RTL8306_PHY is not set
-# CONFIG_RTL8367_PHY is not set
-# CONFIG_RTL8366RB_PHY is not set
-# CONFIG_RTL8366S_PHY is not set
-# CONFIG_RTL8366S_PHY_DEBUG_FS is not set
-# CONFIG_RTL8366_SMI is not set
-# CONFIG_RTS_PSTOR is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_RUNTIME_DEBUG is not set
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_S2IO is not set
-# CONFIG_SAMPLES is not set
-# CONFIG_SATA_ACARD_AHCI is not set
-# CONFIG_SATA_AHCI is not set
-# CONFIG_SATA_AHCI_PLATFORM is not set
-# CONFIG_SATA_DWC is not set
-# CONFIG_SATA_INIC162X is not set
-# CONFIG_SATA_MV is not set
-# CONFIG_SATA_NV is not set
-# CONFIG_SATA_PMP is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIL24 is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_SVW is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SBC_FITPC2_WATCHDOG is not set
-# CONFIG_SBE_2T3E3 is not set
-# CONFIG_SC92031 is not set
-# CONFIG_SCC is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_SCHED_AUTOGROUP is not set
-# CONFIG_SCHED_DEBUG is not set
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_3W_SAS is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_SCSI_BFA_FC is not set
-# CONFIG_SCSI_BNX2_ISCSI is not set
-# CONFIG_SCSI_BNX2X_FCOE is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_DH is not set
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_HPSA is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_SCSI_LPFC is not set
-CONFIG_SCSI_MOD=y
-# CONFIG_SCSI_MPT2SAS is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_MVSAS is not set
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_OSD_INITIATOR is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PM8001 is not set
-# CONFIG_SCSI_PMCRAID is not set
-CONFIG_SCSI_PROC_FS=y
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_SRP is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-CONFIG_SCSI_WAIT_SCAN=m
-# CONFIG_SDIO_UART is not set
-# CONFIG_SECCOMP is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_DMESG_RESTRICT is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADS1015 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_ADS7871 is not set
-# CONFIG_SENSORS_ADT7411 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_AMC6821 is not set
-# CONFIG_SENSORS_APDS990X is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ASC7621 is not set
-# CONFIG_SENSORS_ATK0110 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_BH1770 is not set
-# CONFIG_SENSORS_BH1780 is not set
-# CONFIG_SENSORS_CORETEMP is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_DS620 is not set
-# CONFIG_SENSORS_EMC1403 is not set
-# CONFIG_SENSORS_EMC2103 is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_GPIO_FAN is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_JC42 is not set
-# CONFIG_SENSORS_K10TEMP is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_LINEAGE is not set
-# CONFIG_SENSORS_LIS3LV02D is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LM95241 is not set
-# CONFIG_SENSORS_LTC4151 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_LTC4261 is not set
-# CONFIG_SENSORS_MAX1111 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6639 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_PKGTEMP is not set
-# CONFIG_SENSORS_SCH56XX_COMMON is not set
-# CONFIG_SENSORS_SCH5627 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_SHT21 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMM665 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP102 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VIA_CPUTEMP is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83795 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_ACCENT is not set
-# CONFIG_SERIAL_8250_BOCA is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_FOURPORT is not set
-# CONFIG_SERIAL_8250_HUB6 is not set
-CONFIG_SERIAL_8250_NR_UARTS=2
-# CONFIG_SERIAL_8250_PCI is not set
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-# CONFIG_SERIAL_ALTERA_JTAGUART is not set
-# CONFIG_SERIAL_ALTERA_UART is not set
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
-# CONFIG_SERIAL_IFX6X60 is not set
-# CONFIG_SERIAL_JSM is not set
-# CONFIG_SERIAL_MAX3100 is not set
-# CONFIG_SERIAL_MAX3107 is not set
-# CONFIG_SERIAL_MFD_HSU is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
-# CONFIG_SERIAL_PCH_UART is not set
-# CONFIG_SERIAL_TIMBERDALE is not set
-# CONFIG_SERIAL_UARTLITE is not set
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_AMBAKMI is not set
-# CONFIG_SERIO_ALTERA_PS2 is not set
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_PS2MULT is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SFI is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SGI_PARTITION is not set
-CONFIG_SHMEM=y
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-CONFIG_SIGNALFD=y
-# CONFIG_SIMPLE_GPIO is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SKY2_DEBUG is not set
-CONFIG_SLAB=y
-CONFIG_SLABINFO=y
-# CONFIG_SLHC is not set
-# CONFIG_SLICOSS is not set
-# CONFIG_SLIP is not set
-# CONFIG_SLOB is not set
-# CONFIG_SLUB is not set
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_SLUB_STATS is not set
-# CONFIG_SMARTJOYPLUS_FF is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMC91X is not set
-# CONFIG_SMP is not set
-# CONFIG_SMSC911X is not set
-# CONFIG_SMSC9420 is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_SM_FTL is not set
-# CONFIG_SND is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ALOOP is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ARM is not set
-# CONFIG_SND_ASIHPI is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_ATMEL_AC97C is not set
-# CONFIG_SND_ATMEL_SOC is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AW2 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_CTXFI is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FIREWIRE is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_HIFIER is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_HWDEP is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_INDIGODJX is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGOIOX is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB is not set
-# CONFIG_SND_ISA is not set
-# CONFIG_SND_KIRKWOOD_SOC is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_LX6464ES is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_MIPS is not set
-# CONFIG_SND_MIRO is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MPU401 is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_MTS64 is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_OPL3SA2 is not set
-# CONFIG_SND_OPTI92X_AD1848 is not set
-# CONFIG_SND_OPTI92X_CS4231 is not set
-# CONFIG_SND_OPTI93X is not set
-CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_OXYGEN is not set
-CONFIG_SND_PCI=y
-# CONFIG_SND_PCM is not set
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_PCM_OSS is not set
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_PDAUDIOCF is not set
-# CONFIG_SND_PORTMAN2X4 is not set
-# CONFIG_SND_RAWMIDI is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_RTCTIMER is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SIS7019 is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SND_SOC_CACHE_LZO is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_SPI is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_TIMER is not set
-# CONFIG_SND_TRIDENT is not set
-CONFIG_SND_USB=y
-# CONFIG_SND_USB_6FIRE is not set
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-# CONFIG_SND_USB_UA101 is not set
-# CONFIG_SND_USB_US122L is not set
-# CONFIG_SND_USB_USX2Y is not set
-# CONFIG_SND_VERBOSE_PRINTK is not set
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VIRTUOSO is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_WAVEFRONT is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_SOC_CAMERA is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_SOLO6X10 is not set
-# CONFIG_SONYPI is not set
-# CONFIG_SONY_LAPTOP is not set
-# CONFIG_SOUND is not set
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_SP5100_TCO is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_STATIC is not set
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-# CONFIG_SPARSE_IRQ is not set
-# CONFIG_SPARSE_RCU_POINTER is not set
-# CONFIG_SPEAKUP is not set
-# CONFIG_SPI is not set
-# CONFIG_SPINLOCK_TEST is not set
-# CONFIG_SPI_ALTERA is not set
-# CONFIG_SPI_BITBANG is not set
-# CONFIG_SPI_BUTTERFLY is not set
-# CONFIG_SPI_DEBUG is not set
-# CONFIG_SPI_DESIGNWARE is not set
-# CONFIG_SPI_GPIO_OLD is not set
-# CONFIG_SPI_LM70_LLP is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_SPI_OC_TINY is not set
-# CONFIG_SPI_ORION is not set
-# CONFIG_SPI_PXA2XX is not set
-# CONFIG_SPI_PXA2XX_PCI is not set
-# CONFIG_SPI_RB4XX is not set
-# CONFIG_SPI_RB4XX_CPLD is not set
-# CONFIG_SPI_RAMIPS is not set
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_SPI_TOPCLIFF_PCH is not set
-# CONFIG_SPI_VSC7385 is not set
-# CONFIG_SPI_XILINX is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-CONFIG_SQUASHFS=y
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-CONFIG_SQUASHFS_LZMA=y
-# CONFIG_SQUASHFS_LZO is not set
-# CONFIG_SQUASHFS_XATTR is not set
-# CONFIG_SQUASHFS_XATTRS is not set
-CONFIG_SQUASHFS_XZ=y
-# CONFIG_SSB is not set
-# CONFIG_SSB_DEBUG is not set
-# CONFIG_SSB_PCMCIAHOST is not set
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB_SDIOHOST is not set
-# CONFIG_SSB_SILENT is not set
-# CONFIG_SSFDC is not set
-CONFIG_STACKTRACE_SUPPORT=y
-# CONFIG_STACK_TRACER is not set
-CONFIG_STAGING=y
-# CONFIG_STAGING_EXCLUDE_BUILD is not set
-CONFIG_STANDALONE=y
-CONFIG_STDBINUTILS=y
-# CONFIG_STE10XP is not set
-# CONFIG_STMMAC_ETH is not set
-CONFIG_STP=y
-# CONFIG_STRICT_DEVMEM is not set
-CONFIG_STRIP_ASM_SYMS=y
-# CONFIG_STUB_POULSBO is not set
-# CONFIG_ST_BT is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_SUNRPC is not set
-# CONFIG_SUNRPC_GSS is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_SUSPEND is not set
-CONFIG_SWAP=y
-# CONFIG_SWCONFIG is not set
-# CONFIG_SWCONFIG_LEDS is not set
-# CONFIG_SYNCLINK_CS is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_SYSCTL=y
-# CONFIG_SYSCTL_SYSCALL is not set
-# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_SYSFS=y
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-# CONFIG_SYSV68_PARTITION is not set
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_SYSV_FS is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_TARGET_CORE is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_TC35815 is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TCIC is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_CUBIC is not set
-# CONFIG_TCP_CONG_HSTCP is not set
-# CONFIG_TCP_CONG_HTCP is not set
-# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
-# CONFIG_TCP_CONG_LP is not set
-# CONFIG_TCP_CONG_SCALABLE is not set
-# CONFIG_TCP_CONG_VEGAS is not set
-# CONFIG_TCP_CONG_VENO is not set
-CONFIG_TCP_CONG_WESTWOOD=y
-# CONFIG_TCP_CONG_YEAH is not set
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_TEST_KSTRTOX is not set
-# CONFIG_TEST_LIST_SORT is not set
-# CONFIG_TEST_POWER is not set
-CONFIG_TEXTSEARCH=y
-# CONFIG_TEXTSEARCH_BM is not set
-# CONFIG_TEXTSEARCH_FSM is not set
-# CONFIG_TEXTSEARCH_KMP is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THERMAL_HWMON is not set
-# CONFIG_THRUSTMASTER_FF is not set
-CONFIG_TICK_ONESHOT=y
-# CONFIG_TIFM_CORE is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_TIMB_DMA is not set
-CONFIG_TIMERFD=y
-# CONFIG_TIMER_STATS is not set
-CONFIG_TINY_RCU=y
-# CONFIG_TIPC is not set
-# CONFIG_TI_DAC7512 is not set
-# CONFIG_TI_ST is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-CONFIG_TMPFS=y
-CONFIG_TMPFS_XATTR=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
-# CONFIG_TOUCHSCREEN_BU21013 is not set
-# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
-# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MCS5000 is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_QT602240 is not set
-# CONFIG_TOUCHSCREEN_S3C2410 is not set
-# CONFIG_TOUCHSCREEN_ST1232 is not set
-# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TPS6507X is not set
-# CONFIG_TOUCHSCREEN_TSC2005 is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TOUCHSCREEN_WM97XX is not set
-# CONFIG_TPS6105X is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TPS6507X is not set
-# CONFIG_TR is not set
-# CONFIG_TRACE_BRANCH_PROFILING is not set
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_TRACING_SUPPORT=y
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TRANZPORT is not set
-# CONFIG_TREE_PREEMPT_RCU is not set
-# CONFIG_TREE_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_TTY_PRINTK is not set
-# CONFIG_TUN is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-# CONFIG_UCB1400_CORE is not set
-# CONFIG_UDF_FS is not set
-CONFIG_UDF_NLS=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_UFS_FS is not set
-# CONFIG_UIO is not set
-# CONFIG_ULTRIX_PARTITION is not set
-CONFIG_UNIX=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_USB is not set
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_ATM is not set
-CONFIG_USB_BELKIN=y
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CXACRU is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DEVICE_CLASS is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_EHCI_HCD_PPC_OF is not set
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_ENESTORAGE is not set
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_EZUSB=y
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GL860 is not set
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_GSPCA is not set
-# CONFIG_USB_GSPCA_BENQ is not set
-# CONFIG_USB_GSPCA_CONEX is not set
-# CONFIG_USB_GSPCA_CPIA1 is not set
-# CONFIG_USB_GSPCA_ETOMS is not set
-# CONFIG_USB_GSPCA_FINEPIX is not set
-# CONFIG_USB_GSPCA_JEILINJ is not set
-# CONFIG_USB_GSPCA_KONICA is not set
-# CONFIG_USB_GSPCA_MARS is not set
-# CONFIG_USB_GSPCA_MR97310A is not set
-# CONFIG_USB_GSPCA_NW80X is not set
-# CONFIG_USB_GSPCA_OV519 is not set
-# CONFIG_USB_GSPCA_OV534 is not set
-# CONFIG_USB_GSPCA_OV534_9 is not set
-# CONFIG_USB_GSPCA_PAC207 is not set
-# CONFIG_USB_GSPCA_PAC7302 is not set
-# CONFIG_USB_GSPCA_PAC7311 is not set
-# CONFIG_USB_GSPCA_SN9C2028 is not set
-# CONFIG_USB_GSPCA_SN9C20X is not set
-# CONFIG_USB_GSPCA_SONIXB is not set
-# CONFIG_USB_GSPCA_SONIXJ is not set
-# CONFIG_USB_GSPCA_SPCA1528 is not set
-# CONFIG_USB_GSPCA_SPCA500 is not set
-# CONFIG_USB_GSPCA_SPCA501 is not set
-# CONFIG_USB_GSPCA_SPCA505 is not set
-# CONFIG_USB_GSPCA_SPCA506 is not set
-# CONFIG_USB_GSPCA_SPCA508 is not set
-# CONFIG_USB_GSPCA_SPCA561 is not set
-# CONFIG_USB_GSPCA_SQ905 is not set
-# CONFIG_USB_GSPCA_SQ905C is not set
-# CONFIG_USB_GSPCA_SQ930X is not set
-# CONFIG_USB_GSPCA_STK014 is not set
-# CONFIG_USB_GSPCA_STV0680 is not set
-# CONFIG_USB_GSPCA_SUNPLUS is not set
-# CONFIG_USB_GSPCA_T613 is not set
-# CONFIG_USB_GSPCA_TV8532 is not set
-# CONFIG_USB_GSPCA_VC032X is not set
-# CONFIG_USB_GSPCA_VICAM is not set
-# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
-# CONFIG_USB_GSPCA_ZC3XX is not set
-# CONFIG_USB_G_MULTI is not set
-# CONFIG_USB_G_NOKIA is not set
-# CONFIG_USB_HID is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HSO is not set
-# CONFIG_USB_HWA_HCD is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_IPHETH is not set
-# CONFIG_USB_IP_COMMON is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1362_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KC2190 is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LIBUSUAL is not set
-# CONFIG_USB_M5602 is not set
-# CONFIG_USB_MASS_STORAGE is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_NET_AX8817X is not set
-# CONFIG_USB_NET_CDCETHER is not set
-# CONFIG_USB_NET_CDC_EEM is not set
-# CONFIG_USB_NET_CDC_NCM is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_CX82310_ETH is not set
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_INT51X1 is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_USB_NET_SMSC75XX is not set
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_OHCI_HCD_PCI is not set
-# CONFIG_USB_OHCI_HCD_PPC_OF is not set
-# CONFIG_USB_OHCI_HCD_PPC_OF_BE is not set
-# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
-# CONFIG_USB_OHCI_HCD_PPC_SOC is not set
-# CONFIG_USB_OHCI_HCD_SSB is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OXU210HP_HCD is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_PWC_INPUT_EVDEV is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_S2255 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_CP210X is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_QCAUX is not set
-# CONFIG_USB_SERIAL_QUALCOMM is not set
-# CONFIG_USB_SERIAL_QUATECH2 is not set
-# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-# CONFIG_USB_SERIAL_SAMBA is not set
-# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# CONFIG_USB_SERIAL_SSU100 is not set
-# CONFIG_USB_SERIAL_SYMBOL is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_ZIO is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_SIERRA_NET is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-# CONFIG_USB_STKWEBCAM is not set
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_ENE_UB6250 is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-# CONFIG_USB_STORAGE_REALTEK is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STV06XX is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_TMC is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_UAS is not set
-# CONFIG_USB_UEAGLEATM is not set
-# CONFIG_USB_ULPI is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USS720 is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_VIDEO_CLASS is not set
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-# CONFIG_USB_VL600 is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_WHCI_HCD is not set
-# CONFIG_USB_WUSB is not set
-# CONFIG_USB_WUSB_CBAF is not set
-# CONFIG_USB_XHCI_HCD is not set
-# CONFIG_USB_XUSBATM is not set
-# CONFIG_USB_YUREX is not set
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USE_GENERIC_SMP_HELPERS is not set
-# CONFIG_USE_OF is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_UWB is not set
-# CONFIG_V4L_MEM2MEM_DRIVERS is not set
-# CONFIG_VETH is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VGA_ARB is not set
-# CONFIG_VGA_SWITCHEROO is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_VIDEO_ADV7170 is not set
-# CONFIG_VIDEO_ADV7175 is not set
-# CONFIG_VIDEO_ADV7180 is not set
-# CONFIG_VIDEO_ADV7343 is not set
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_AK881X is not set
-# CONFIG_VIDEO_ALLOW_V4L1 is not set
-# CONFIG_VIDEO_BT819 is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BT856 is not set
-# CONFIG_VIDEO_BT866 is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CAFE_CCIC is not set
-# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CQCAM is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_CX231XX is not set
-# CONFIG_VIDEO_CX2341X is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_CX88 is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_VIDEO_DT3155 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-# CONFIG_VIDEO_GO7007 is not set
-# CONFIG_VIDEO_HDPVR is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-# CONFIG_VIDEO_HEXIUM_ORION is not set
-# CONFIG_VIDEO_IR_I2C is not set
-# CONFIG_VIDEO_IVTV is not set
-# CONFIG_VIDEO_KS0127 is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_MEDIA is not set
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_MXB is not set
-# CONFIG_VIDEO_NOON010PC30 is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_VIDEO_OV7670 is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_SAA6588 is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_SAA7134 is not set
-# CONFIG_VIDEO_SAA717X is not set
-# CONFIG_VIDEO_SAA7185 is not set
-# CONFIG_VIDEO_SAA7191 is not set
-# CONFIG_VIDEO_SH_MOBILE_CEU is not set
-# CONFIG_VIDEO_SR030PC30 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_TDA7432 is not set
-# CONFIG_VIDEO_TDA9840 is not set
-# CONFIG_VIDEO_TDA9875 is not set
-# CONFIG_VIDEO_TEA6415C is not set
-# CONFIG_VIDEO_TEA6420 is not set
-# CONFIG_VIDEO_THS7303 is not set
-# CONFIG_VIDEO_TIMBERDALE is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_TM6000 is not set
-# CONFIG_VIDEO_TVAUDIO is not set
-# CONFIG_VIDEO_TVP514X is not set
-# CONFIG_VIDEO_TVP5150 is not set
-# CONFIG_VIDEO_TVP7002 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_VIDEO_V4L1 is not set
-CONFIG_VIDEO_V4L1_COMPAT=y
-# CONFIG_VIDEO_V4L2 is not set
-# CONFIG_VIDEO_V4L2_COMMON is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_VP27SMPX is not set
-# CONFIG_VIDEO_VPX3220 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIRQ_DEBUG is not set
-# CONFIG_VIRTUALIZATION is not set
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_VITESSE_PHY is not set
-CONFIG_VLAN_8021Q=y
-# CONFIG_VLAN_8021Q_GVRP is not set
-# CONFIG_VME_BUS is not set
-# CONFIG_VMSPLIT_1G is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_2G_OPT is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMXNET3 is not set
-# CONFIG_VM_EVENT_COUNTERS is not set
-# CONFIG_VT is not set
-# CONFIG_VT6655 is not set
-# CONFIG_VT6656 is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_W1 is not set
-# CONFIG_W1_CON is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_GPIO is not set
-# CONFIG_W1_MASTER_MATROX is not set
-# CONFIG_W1_SLAVE_BQ27000 is not set
-# CONFIG_W1_SLAVE_DS2423 is not set
-# CONFIG_W1_SLAVE_DS2431 is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W83627HF_WDT is not set
-# CONFIG_W83697HF_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_W83977F_WDT is not set
-# CONFIG_WAN is not set
-# CONFIG_WANXL is not set
-# CONFIG_WAN_ROUTER is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_WDTPCI is not set
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PRIV=y
-CONFIG_WEXT_PROC=y
-CONFIG_WEXT_SPY=y
-# CONFIG_WIMAX is not set
-CONFIG_WIRELESS=y
-CONFIG_WIRELESS_EXT=y
-# CONFIG_WIRELESS_EXT_SYSFS is not set
-# CONFIG_WLAGS49_H2 is not set
-# CONFIG_WLAGS49_H25 is not set
-CONFIG_WLAN=y
-# CONFIG_WORKQUEUE_TRACER is not set
-# CONFIG_WR_PPMC is not set
-# CONFIG_X25 is not set
-CONFIG_XFRM=y
-# CONFIG_XFRM_IPCOMP is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFS_DEBUG is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XILINX_EMACLITE is not set
-# CONFIG_XILINX_LL_TEMAC is not set
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_XMON is not set
-# CONFIG_XVMALLOC is not set
-# CONFIG_XZ_DEC is not set
-# CONFIG_XZ_DEC_ARM is not set
-# CONFIG_XZ_DEC_ARMTHUMB is not set
-# CONFIG_XZ_DEC_BCJ is not set
-# CONFIG_XZ_DEC_IA64 is not set
-# CONFIG_XZ_DEC_POWERPC is not set
-# CONFIG_XZ_DEC_SPARC is not set
-# CONFIG_XZ_DEC_TEST is not set
-# CONFIG_XZ_DEC_X86 is not set
-# CONFIG_YAFFS_FS is not set
-# CONFIG_YAM is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_YENTA is not set
-# CONFIG_YENTA_O2 is not set
-# CONFIG_YENTA_RICOH is not set
-# CONFIG_YENTA_TI is not set
-# CONFIG_YENTA_TOSHIBA is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_ZD1211RW_DEBUG is not set
-# CONFIG_ZEROPLUS_FF is not set
-CONFIG_ZISOFS=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA=y
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_ZRAM is not set
-# CONFIG_SIGMA is not set
diff --git a/target/linux/generic/patches-2.6.39/020-ssb_update.patch b/target/linux/generic/patches-2.6.39/020-ssb_update.patch
deleted file mode 100644 (file)
index e6dec49..0000000
+++ /dev/null
@@ -1,2021 +0,0 @@
---- a/drivers/ssb/b43_pci_bridge.c
-+++ b/drivers/ssb/b43_pci_bridge.c
-@@ -5,12 +5,13 @@
-  * because of its small size we include it in the SSB core
-  * instead of creating a standalone module.
-  *
-- * Copyright 2007  Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2007  Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
- #include <linux/pci.h>
-+#include <linux/module.h>
- #include <linux/ssb/ssb.h>
- #include "ssb_private.h"
-@@ -28,6 +29,8 @@ static const struct pci_device_id b43_pc
-       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4319) },
-       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4320) },
-       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4321) },
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4322) },
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 43222) },
-       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4324) },
-       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4325) },
-       { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4328) },
---- a/drivers/ssb/driver_chipcommon.c
-+++ b/drivers/ssb/driver_chipcommon.c
-@@ -3,7 +3,7 @@
-  * Broadcom ChipCommon core driver
-  *
-  * Copyright 2005, Broadcom Corporation
-- * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -46,40 +46,66 @@ void ssb_chipco_set_clockmode(struct ssb
-       if (!ccdev)
-               return;
-       bus = ccdev->bus;
-+
-+      /* We support SLOW only on 6..9 */
-+      if (ccdev->id.revision >= 10 && mode == SSB_CLKMODE_SLOW)
-+              mode = SSB_CLKMODE_DYNAMIC;
-+
-+      if (cc->capabilities & SSB_CHIPCO_CAP_PMU)
-+              return; /* PMU controls clockmode, separated function needed */
-+      SSB_WARN_ON(ccdev->id.revision >= 20);
-+
-       /* chipcommon cores prior to rev6 don't support dynamic clock control */
-       if (ccdev->id.revision < 6)
-               return;
--      /* chipcommon cores rev10 are a whole new ball game */
-+
-+      /* ChipCommon cores rev10+ need testing */
-       if (ccdev->id.revision >= 10)
-               return;
-+
-       if (!(cc->capabilities & SSB_CHIPCO_CAP_PCTL))
-               return;
-       switch (mode) {
--      case SSB_CLKMODE_SLOW:
-+      case SSB_CLKMODE_SLOW: /* For revs 6..9 only */
-               tmp = chipco_read32(cc, SSB_CHIPCO_SLOWCLKCTL);
-               tmp |= SSB_CHIPCO_SLOWCLKCTL_FSLOW;
-               chipco_write32(cc, SSB_CHIPCO_SLOWCLKCTL, tmp);
-               break;
-       case SSB_CLKMODE_FAST:
--              ssb_pci_xtal(bus, SSB_GPIO_XTAL, 1); /* Force crystal on */
--              tmp = chipco_read32(cc, SSB_CHIPCO_SLOWCLKCTL);
--              tmp &= ~SSB_CHIPCO_SLOWCLKCTL_FSLOW;
--              tmp |= SSB_CHIPCO_SLOWCLKCTL_IPLL;
--              chipco_write32(cc, SSB_CHIPCO_SLOWCLKCTL, tmp);
-+              if (ccdev->id.revision < 10) {
-+                      ssb_pci_xtal(bus, SSB_GPIO_XTAL, 1); /* Force crystal on */
-+                      tmp = chipco_read32(cc, SSB_CHIPCO_SLOWCLKCTL);
-+                      tmp &= ~SSB_CHIPCO_SLOWCLKCTL_FSLOW;
-+                      tmp |= SSB_CHIPCO_SLOWCLKCTL_IPLL;
-+                      chipco_write32(cc, SSB_CHIPCO_SLOWCLKCTL, tmp);
-+              } else {
-+                      chipco_write32(cc, SSB_CHIPCO_SYSCLKCTL,
-+                              (chipco_read32(cc, SSB_CHIPCO_SYSCLKCTL) |
-+                               SSB_CHIPCO_SYSCLKCTL_FORCEHT));
-+                      /* udelay(150); TODO: not available in early init */
-+              }
-               break;
-       case SSB_CLKMODE_DYNAMIC:
--              tmp = chipco_read32(cc, SSB_CHIPCO_SLOWCLKCTL);
--              tmp &= ~SSB_CHIPCO_SLOWCLKCTL_FSLOW;
--              tmp &= ~SSB_CHIPCO_SLOWCLKCTL_IPLL;
--              tmp &= ~SSB_CHIPCO_SLOWCLKCTL_ENXTAL;
--              if ((tmp & SSB_CHIPCO_SLOWCLKCTL_SRC) != SSB_CHIPCO_SLOWCLKCTL_SRC_XTAL)
--                      tmp |= SSB_CHIPCO_SLOWCLKCTL_ENXTAL;
--              chipco_write32(cc, SSB_CHIPCO_SLOWCLKCTL, tmp);
--
--              /* for dynamic control, we have to release our xtal_pu "force on" */
--              if (tmp & SSB_CHIPCO_SLOWCLKCTL_ENXTAL)
--                      ssb_pci_xtal(bus, SSB_GPIO_XTAL, 0);
-+              if (ccdev->id.revision < 10) {
-+                      tmp = chipco_read32(cc, SSB_CHIPCO_SLOWCLKCTL);
-+                      tmp &= ~SSB_CHIPCO_SLOWCLKCTL_FSLOW;
-+                      tmp &= ~SSB_CHIPCO_SLOWCLKCTL_IPLL;
-+                      tmp &= ~SSB_CHIPCO_SLOWCLKCTL_ENXTAL;
-+                      if ((tmp & SSB_CHIPCO_SLOWCLKCTL_SRC) !=
-+                          SSB_CHIPCO_SLOWCLKCTL_SRC_XTAL)
-+                              tmp |= SSB_CHIPCO_SLOWCLKCTL_ENXTAL;
-+                      chipco_write32(cc, SSB_CHIPCO_SLOWCLKCTL, tmp);
-+
-+                      /* For dynamic control, we have to release our xtal_pu
-+                       * "force on" */
-+                      if (tmp & SSB_CHIPCO_SLOWCLKCTL_ENXTAL)
-+                              ssb_pci_xtal(bus, SSB_GPIO_XTAL, 0);
-+              } else {
-+                      chipco_write32(cc, SSB_CHIPCO_SYSCLKCTL,
-+                              (chipco_read32(cc, SSB_CHIPCO_SYSCLKCTL) &
-+                               ~SSB_CHIPCO_SYSCLKCTL_FORCEHT));
-+              }
-               break;
-       default:
-               SSB_WARN_ON(1);
-@@ -260,6 +286,12 @@ void ssb_chipcommon_init(struct ssb_chip
-       if (cc->dev->id.revision >= 11)
-               cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT);
-       ssb_dprintk(KERN_INFO PFX "chipcommon status is 0x%x\n", cc->status);
-+
-+      if (cc->dev->id.revision >= 20) {
-+              chipco_write32(cc, SSB_CHIPCO_GPIOPULLUP, 0);
-+              chipco_write32(cc, SSB_CHIPCO_GPIOPULLDOWN, 0);
-+      }
-+
-       ssb_pmu_init(cc);
-       chipco_powercontrol_init(cc);
-       ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST);
---- a/drivers/ssb/driver_chipcommon_pmu.c
-+++ b/drivers/ssb/driver_chipcommon_pmu.c
-@@ -2,7 +2,7 @@
-  * Sonics Silicon Backplane
-  * Broadcom ChipCommon Power Management Unit driver
-  *
-- * Copyright 2009, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2009, Michael Buesch <m@bues.ch>
-  * Copyright 2007, Broadcom Corporation
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-@@ -12,6 +12,9 @@
- #include <linux/ssb/ssb_regs.h>
- #include <linux/ssb/ssb_driver_chipcommon.h>
- #include <linux/delay.h>
-+#ifdef CONFIG_BCM47XX
-+#include <asm/mach-bcm47xx/nvram.h>
-+#endif
- #include "ssb_private.h"
-@@ -91,10 +94,6 @@ static void ssb_pmu0_pllinit_r0(struct s
-       u32 pmuctl, tmp, pllctl;
-       unsigned int i;
--      if ((bus->chip_id == 0x5354) && !crystalfreq) {
--              /* The 5354 crystal freq is 25MHz */
--              crystalfreq = 25000;
--      }
-       if (crystalfreq)
-               e = pmu0_plltab_find_entry(crystalfreq);
-       if (!e)
-@@ -320,7 +319,11 @@ static void ssb_pmu_pll_init(struct ssb_
-       u32 crystalfreq = 0; /* in kHz. 0 = keep default freq. */
-       if (bus->bustype == SSB_BUSTYPE_SSB) {
--              /* TODO: The user may override the crystal frequency. */
-+#ifdef CONFIG_BCM47XX
-+              char buf[20];
-+              if (nvram_getenv("xtalfreq", buf, sizeof(buf)) >= 0)
-+                      crystalfreq = simple_strtoul(buf, NULL, 0);
-+#endif
-       }
-       switch (bus->chip_id) {
-@@ -329,7 +332,11 @@ static void ssb_pmu_pll_init(struct ssb_
-               ssb_pmu1_pllinit_r0(cc, crystalfreq);
-               break;
-       case 0x4328:
-+              ssb_pmu0_pllinit_r0(cc, crystalfreq);
-+              break;
-       case 0x5354:
-+              if (crystalfreq == 0)
-+                      crystalfreq = 25000;
-               ssb_pmu0_pllinit_r0(cc, crystalfreq);
-               break;
-       case 0x4322:
-@@ -417,12 +424,14 @@ static void ssb_pmu_resources_init(struc
-       u32 min_msk = 0, max_msk = 0;
-       unsigned int i;
-       const struct pmu_res_updown_tab_entry *updown_tab = NULL;
--      unsigned int updown_tab_size;
-+      unsigned int updown_tab_size = 0;
-       const struct pmu_res_depend_tab_entry *depend_tab = NULL;
--      unsigned int depend_tab_size;
-+      unsigned int depend_tab_size = 0;
-       switch (bus->chip_id) {
-       case 0x4312:
-+               min_msk = 0xCBB;
-+               break;
-       case 0x4322:
-               /* We keep the default settings:
-                * min_msk = 0xCBB
-@@ -604,3 +613,34 @@ void ssb_pmu_set_ldo_paref(struct ssb_ch
- EXPORT_SYMBOL(ssb_pmu_set_ldo_voltage);
- EXPORT_SYMBOL(ssb_pmu_set_ldo_paref);
-+
-+u32 ssb_pmu_get_cpu_clock(struct ssb_chipcommon *cc)
-+{
-+      struct ssb_bus *bus = cc->dev->bus;
-+
-+      switch (bus->chip_id) {
-+      case 0x5354:
-+              /* 5354 chip uses a non programmable PLL of frequency 240MHz */
-+              return 240000000;
-+      default:
-+              ssb_printk(KERN_ERR PFX
-+                         "ERROR: PMU cpu clock unknown for device %04X\n",
-+                         bus->chip_id);
-+              return 0;
-+      }
-+}
-+
-+u32 ssb_pmu_get_controlclock(struct ssb_chipcommon *cc)
-+{
-+      struct ssb_bus *bus = cc->dev->bus;
-+
-+      switch (bus->chip_id) {
-+      case 0x5354:
-+              return 120000000;
-+      default:
-+              ssb_printk(KERN_ERR PFX
-+                         "ERROR: PMU controlclock unknown for device %04X\n",
-+                         bus->chip_id);
-+              return 0;
-+      }
-+}
---- a/drivers/ssb/driver_extif.c
-+++ b/drivers/ssb/driver_extif.c
-@@ -3,7 +3,7 @@
-  * Broadcom EXTIF core driver
-  *
-  * Copyright 2005, Broadcom Corporation
-- * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-  * Copyright 2006, 2007, Felix Fietkau <nbd@openwrt.org>
-  * Copyright 2007, Aurelien Jarno <aurelien@aurel32.net>
-  *
---- a/drivers/ssb/driver_gige.c
-+++ b/drivers/ssb/driver_gige.c
-@@ -3,7 +3,7 @@
-  * Broadcom Gigabit Ethernet core driver
-  *
-  * Copyright 2008, Broadcom Corporation
-- * Copyright 2008, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2008, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -106,8 +106,9 @@ void gige_pcicfg_write32(struct ssb_gige
-       gige_write32(dev, SSB_GIGE_PCICFG + offset, value);
- }
--static int ssb_gige_pci_read_config(struct pci_bus *bus, unsigned int devfn,
--                                  int reg, int size, u32 *val)
-+static int __devinit ssb_gige_pci_read_config(struct pci_bus *bus,
-+                                            unsigned int devfn, int reg,
-+                                            int size, u32 *val)
- {
-       struct ssb_gige *dev = container_of(bus->ops, struct ssb_gige, pci_ops);
-       unsigned long flags;
-@@ -136,8 +137,9 @@ static int ssb_gige_pci_read_config(stru
-       return PCIBIOS_SUCCESSFUL;
- }
--static int ssb_gige_pci_write_config(struct pci_bus *bus, unsigned int devfn,
--                                   int reg, int size, u32 val)
-+static int __devinit ssb_gige_pci_write_config(struct pci_bus *bus,
-+                                             unsigned int devfn, int reg,
-+                                             int size, u32 val)
- {
-       struct ssb_gige *dev = container_of(bus->ops, struct ssb_gige, pci_ops);
-       unsigned long flags;
-@@ -166,7 +168,8 @@ static int ssb_gige_pci_write_config(str
-       return PCIBIOS_SUCCESSFUL;
- }
--static int ssb_gige_probe(struct ssb_device *sdev, const struct ssb_device_id *id)
-+static int __devinit ssb_gige_probe(struct ssb_device *sdev,
-+                                  const struct ssb_device_id *id)
- {
-       struct ssb_gige *dev;
-       u32 base, tmslow, tmshigh;
---- a/drivers/ssb/driver_mipscore.c
-+++ b/drivers/ssb/driver_mipscore.c
-@@ -3,7 +3,7 @@
-  * Broadcom MIPS core driver
-  *
-  * Copyright 2005, Broadcom Corporation
-- * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -208,6 +208,9 @@ u32 ssb_cpu_clock(struct ssb_mipscore *m
-       struct ssb_bus *bus = mcore->dev->bus;
-       u32 pll_type, n, m, rate = 0;
-+      if (bus->chipco.capabilities & SSB_CHIPCO_CAP_PMU)
-+              return ssb_pmu_get_cpu_clock(&bus->chipco);
-+
-       if (bus->extif.dev) {
-               ssb_extif_get_clockcontrol(&bus->extif, &pll_type, &n, &m);
-       } else if (bus->chipco.dev) {
---- a/drivers/ssb/driver_pcicore.c
-+++ b/drivers/ssb/driver_pcicore.c
-@@ -3,7 +3,7 @@
-  * Broadcom PCI-core driver
-  *
-  * Copyright 2005, Broadcom Corporation
-- * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -15,6 +15,11 @@
- #include "ssb_private.h"
-+static u32 ssb_pcie_read(struct ssb_pcicore *pc, u32 address);
-+static void ssb_pcie_write(struct ssb_pcicore *pc, u32 address, u32 data);
-+static u16 ssb_pcie_mdio_read(struct ssb_pcicore *pc, u8 device, u8 address);
-+static void ssb_pcie_mdio_write(struct ssb_pcicore *pc, u8 device,
-+                              u8 address, u16 data);
- static inline
- u32 pcicore_read32(struct ssb_pcicore *pc, u16 offset)
-@@ -69,7 +74,7 @@ static u32 get_cfgspace_addr(struct ssb_
-       u32 tmp;
-       /* We do only have one cardbus device behind the bridge. */
--      if (pc->cardbusmode && (dev >= 1))
-+      if (pc->cardbusmode && (dev > 1))
-               goto out;
-       if (bus == 0) {
-@@ -309,7 +314,7 @@ int ssb_pcicore_pcibios_map_irq(const st
-       return ssb_mips_irq(extpci_core->dev) + 2;
- }
--static void ssb_pcicore_init_hostmode(struct ssb_pcicore *pc)
-+static void __devinit ssb_pcicore_init_hostmode(struct ssb_pcicore *pc)
- {
-       u32 val;
-@@ -374,7 +379,7 @@ static void ssb_pcicore_init_hostmode(st
-       register_pci_controller(&ssb_pcicore_controller);
- }
--static int pcicore_is_in_hostmode(struct ssb_pcicore *pc)
-+static int __devinit pcicore_is_in_hostmode(struct ssb_pcicore *pc)
- {
-       struct ssb_bus *bus = pc->dev->bus;
-       u16 chipid_top;
-@@ -403,25 +408,137 @@ static int pcicore_is_in_hostmode(struct
- }
- #endif /* CONFIG_SSB_PCICORE_HOSTMODE */
-+/**************************************************
-+ * Workarounds.
-+ **************************************************/
-+
-+static void __devinit ssb_pcicore_fix_sprom_core_index(struct ssb_pcicore *pc)
-+{
-+      u16 tmp = pcicore_read16(pc, SSB_PCICORE_SPROM(0));
-+      if (((tmp & 0xF000) >> 12) != pc->dev->core_index) {
-+              tmp &= ~0xF000;
-+              tmp |= (pc->dev->core_index << 12);
-+              pcicore_write16(pc, SSB_PCICORE_SPROM(0), tmp);
-+      }
-+}
-+
-+static u8 ssb_pcicore_polarity_workaround(struct ssb_pcicore *pc)
-+{
-+      return (ssb_pcie_read(pc, 0x204) & 0x10) ? 0xC0 : 0x80;
-+}
-+
-+static void ssb_pcicore_serdes_workaround(struct ssb_pcicore *pc)
-+{
-+      const u8 serdes_pll_device = 0x1D;
-+      const u8 serdes_rx_device = 0x1F;
-+      u16 tmp;
-+
-+      ssb_pcie_mdio_write(pc, serdes_rx_device, 1 /* Control */,
-+                          ssb_pcicore_polarity_workaround(pc));
-+      tmp = ssb_pcie_mdio_read(pc, serdes_pll_device, 1 /* Control */);
-+      if (tmp & 0x4000)
-+              ssb_pcie_mdio_write(pc, serdes_pll_device, 1, tmp & ~0x4000);
-+}
-+
-+static void ssb_pcicore_pci_setup_workarounds(struct ssb_pcicore *pc)
-+{
-+      struct ssb_device *pdev = pc->dev;
-+      struct ssb_bus *bus = pdev->bus;
-+      u32 tmp;
-+
-+      tmp = pcicore_read32(pc, SSB_PCICORE_SBTOPCI2);
-+      tmp |= SSB_PCICORE_SBTOPCI_PREF;
-+      tmp |= SSB_PCICORE_SBTOPCI_BURST;
-+      pcicore_write32(pc, SSB_PCICORE_SBTOPCI2, tmp);
-+
-+      if (pdev->id.revision < 5) {
-+              tmp = ssb_read32(pdev, SSB_IMCFGLO);
-+              tmp &= ~SSB_IMCFGLO_SERTO;
-+              tmp |= 2;
-+              tmp &= ~SSB_IMCFGLO_REQTO;
-+              tmp |= 3 << SSB_IMCFGLO_REQTO_SHIFT;
-+              ssb_write32(pdev, SSB_IMCFGLO, tmp);
-+              ssb_commit_settings(bus);
-+      } else if (pdev->id.revision >= 11) {
-+              tmp = pcicore_read32(pc, SSB_PCICORE_SBTOPCI2);
-+              tmp |= SSB_PCICORE_SBTOPCI_MRM;
-+              pcicore_write32(pc, SSB_PCICORE_SBTOPCI2, tmp);
-+      }
-+}
-+
-+static void ssb_pcicore_pcie_setup_workarounds(struct ssb_pcicore *pc)
-+{
-+      u32 tmp;
-+      u8 rev = pc->dev->id.revision;
-+
-+      if (rev == 0 || rev == 1) {
-+              /* TLP Workaround register. */
-+              tmp = ssb_pcie_read(pc, 0x4);
-+              tmp |= 0x8;
-+              ssb_pcie_write(pc, 0x4, tmp);
-+      }
-+      if (rev == 1) {
-+              /* DLLP Link Control register. */
-+              tmp = ssb_pcie_read(pc, 0x100);
-+              tmp |= 0x40;
-+              ssb_pcie_write(pc, 0x100, tmp);
-+      }
-+
-+      if (rev == 0) {
-+              const u8 serdes_rx_device = 0x1F;
-+
-+              ssb_pcie_mdio_write(pc, serdes_rx_device,
-+                                      2 /* Timer */, 0x8128);
-+              ssb_pcie_mdio_write(pc, serdes_rx_device,
-+                                      6 /* CDR */, 0x0100);
-+              ssb_pcie_mdio_write(pc, serdes_rx_device,
-+                                      7 /* CDR BW */, 0x1466);
-+      } else if (rev == 3 || rev == 4 || rev == 5) {
-+              /* TODO: DLLP Power Management Threshold */
-+              ssb_pcicore_serdes_workaround(pc);
-+              /* TODO: ASPM */
-+      } else if (rev == 7) {
-+              /* TODO: No PLL down */
-+      }
-+
-+      if (rev >= 6) {
-+              /* Miscellaneous Configuration Fixup */
-+              tmp = pcicore_read16(pc, SSB_PCICORE_SPROM(5));
-+              if (!(tmp & 0x8000))
-+                      pcicore_write16(pc, SSB_PCICORE_SPROM(5),
-+                                      tmp | 0x8000);
-+      }
-+}
- /**************************************************
-  * Generic and Clientmode operation code.
-  **************************************************/
--static void ssb_pcicore_init_clientmode(struct ssb_pcicore *pc)
-+static void __devinit ssb_pcicore_init_clientmode(struct ssb_pcicore *pc)
- {
-+      struct ssb_device *pdev = pc->dev;
-+      struct ssb_bus *bus = pdev->bus;
-+
-+      if (bus->bustype == SSB_BUSTYPE_PCI)
-+              ssb_pcicore_fix_sprom_core_index(pc);
-+
-       /* Disable PCI interrupts. */
--      ssb_write32(pc->dev, SSB_INTVEC, 0);
-+      ssb_write32(pdev, SSB_INTVEC, 0);
-+
-+      /* Additional PCIe always once-executed workarounds */
-+      if (pc->dev->id.coreid == SSB_DEV_PCIE) {
-+              ssb_pcicore_serdes_workaround(pc);
-+              /* TODO: ASPM */
-+              /* TODO: Clock Request Update */
-+      }
- }
--void ssb_pcicore_init(struct ssb_pcicore *pc)
-+void __devinit ssb_pcicore_init(struct ssb_pcicore *pc)
- {
-       struct ssb_device *dev = pc->dev;
--      struct ssb_bus *bus;
-       if (!dev)
-               return;
--      bus = dev->bus;
-       if (!ssb_device_is_enabled(dev))
-               ssb_device_enable(dev, 0);
-@@ -446,11 +563,35 @@ static void ssb_pcie_write(struct ssb_pc
-       pcicore_write32(pc, 0x134, data);
- }
--static void ssb_pcie_mdio_write(struct ssb_pcicore *pc, u8 device,
--                              u8 address, u16 data)
-+static void ssb_pcie_mdio_set_phy(struct ssb_pcicore *pc, u8 phy)
-+{
-+      const u16 mdio_control = 0x128;
-+      const u16 mdio_data = 0x12C;
-+      u32 v;
-+      int i;
-+
-+      v = (1 << 30); /* Start of Transaction */
-+      v |= (1 << 28); /* Write Transaction */
-+      v |= (1 << 17); /* Turnaround */
-+      v |= (0x1F << 18);
-+      v |= (phy << 4);
-+      pcicore_write32(pc, mdio_data, v);
-+
-+      udelay(10);
-+      for (i = 0; i < 200; i++) {
-+              v = pcicore_read32(pc, mdio_control);
-+              if (v & 0x100 /* Trans complete */)
-+                      break;
-+              msleep(1);
-+      }
-+}
-+
-+static u16 ssb_pcie_mdio_read(struct ssb_pcicore *pc, u8 device, u8 address)
- {
-       const u16 mdio_control = 0x128;
-       const u16 mdio_data = 0x12C;
-+      int max_retries = 10;
-+      u16 ret = 0;
-       u32 v;
-       int i;
-@@ -458,46 +599,68 @@ static void ssb_pcie_mdio_write(struct s
-       v |= 0x2; /* MDIO Clock Divisor */
-       pcicore_write32(pc, mdio_control, v);
-+      if (pc->dev->id.revision >= 10) {
-+              max_retries = 200;
-+              ssb_pcie_mdio_set_phy(pc, device);
-+      }
-+
-       v = (1 << 30); /* Start of Transaction */
--      v |= (1 << 28); /* Write Transaction */
-+      v |= (1 << 29); /* Read Transaction */
-       v |= (1 << 17); /* Turnaround */
--      v |= (u32)device << 22;
-+      if (pc->dev->id.revision < 10)
-+              v |= (u32)device << 22;
-       v |= (u32)address << 18;
--      v |= data;
-       pcicore_write32(pc, mdio_data, v);
-       /* Wait for the device to complete the transaction */
-       udelay(10);
--      for (i = 0; i < 10; i++) {
-+      for (i = 0; i < max_retries; i++) {
-               v = pcicore_read32(pc, mdio_control);
--              if (v & 0x100 /* Trans complete */)
-+              if (v & 0x100 /* Trans complete */) {
-+                      udelay(10);
-+                      ret = pcicore_read32(pc, mdio_data);
-                       break;
-+              }
-               msleep(1);
-       }
-       pcicore_write32(pc, mdio_control, 0);
-+      return ret;
- }
--static void ssb_broadcast_value(struct ssb_device *dev,
--                              u32 address, u32 data)
-+static void ssb_pcie_mdio_write(struct ssb_pcicore *pc, u8 device,
-+                              u8 address, u16 data)
- {
--      /* This is used for both, PCI and ChipCommon core, so be careful. */
--      BUILD_BUG_ON(SSB_PCICORE_BCAST_ADDR != SSB_CHIPCO_BCAST_ADDR);
--      BUILD_BUG_ON(SSB_PCICORE_BCAST_DATA != SSB_CHIPCO_BCAST_DATA);
-+      const u16 mdio_control = 0x128;
-+      const u16 mdio_data = 0x12C;
-+      int max_retries = 10;
-+      u32 v;
-+      int i;
--      ssb_write32(dev, SSB_PCICORE_BCAST_ADDR, address);
--      ssb_read32(dev, SSB_PCICORE_BCAST_ADDR); /* flush */
--      ssb_write32(dev, SSB_PCICORE_BCAST_DATA, data);
--      ssb_read32(dev, SSB_PCICORE_BCAST_DATA); /* flush */
--}
-+      v = 0x80; /* Enable Preamble Sequence */
-+      v |= 0x2; /* MDIO Clock Divisor */
-+      pcicore_write32(pc, mdio_control, v);
--static void ssb_commit_settings(struct ssb_bus *bus)
--{
--      struct ssb_device *dev;
-+      if (pc->dev->id.revision >= 10) {
-+              max_retries = 200;
-+              ssb_pcie_mdio_set_phy(pc, device);
-+      }
--      dev = bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev;
--      if (WARN_ON(!dev))
--              return;
--      /* This forces an update of the cached registers. */
--      ssb_broadcast_value(dev, 0xFD8, 0);
-+      v = (1 << 30); /* Start of Transaction */
-+      v |= (1 << 28); /* Write Transaction */
-+      v |= (1 << 17); /* Turnaround */
-+      if (pc->dev->id.revision < 10)
-+              v |= (u32)device << 22;
-+      v |= (u32)address << 18;
-+      v |= data;
-+      pcicore_write32(pc, mdio_data, v);
-+      /* Wait for the device to complete the transaction */
-+      udelay(10);
-+      for (i = 0; i < max_retries; i++) {
-+              v = pcicore_read32(pc, mdio_control);
-+              if (v & 0x100 /* Trans complete */)
-+                      break;
-+              msleep(1);
-+      }
-+      pcicore_write32(pc, mdio_control, 0);
- }
- int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc,
-@@ -550,48 +713,10 @@ int ssb_pcicore_dev_irqvecs_enable(struc
-       if (pc->setup_done)
-               goto out;
-       if (pdev->id.coreid == SSB_DEV_PCI) {
--              tmp = pcicore_read32(pc, SSB_PCICORE_SBTOPCI2);
--              tmp |= SSB_PCICORE_SBTOPCI_PREF;
--              tmp |= SSB_PCICORE_SBTOPCI_BURST;
--              pcicore_write32(pc, SSB_PCICORE_SBTOPCI2, tmp);
--
--              if (pdev->id.revision < 5) {
--                      tmp = ssb_read32(pdev, SSB_IMCFGLO);
--                      tmp &= ~SSB_IMCFGLO_SERTO;
--                      tmp |= 2;
--                      tmp &= ~SSB_IMCFGLO_REQTO;
--                      tmp |= 3 << SSB_IMCFGLO_REQTO_SHIFT;
--                      ssb_write32(pdev, SSB_IMCFGLO, tmp);
--                      ssb_commit_settings(bus);
--              } else if (pdev->id.revision >= 11) {
--                      tmp = pcicore_read32(pc, SSB_PCICORE_SBTOPCI2);
--                      tmp |= SSB_PCICORE_SBTOPCI_MRM;
--                      pcicore_write32(pc, SSB_PCICORE_SBTOPCI2, tmp);
--              }
-+              ssb_pcicore_pci_setup_workarounds(pc);
-       } else {
-               WARN_ON(pdev->id.coreid != SSB_DEV_PCIE);
--              //TODO: Better make defines for all these magic PCIE values.
--              if ((pdev->id.revision == 0) || (pdev->id.revision == 1)) {
--                      /* TLP Workaround register. */
--                      tmp = ssb_pcie_read(pc, 0x4);
--                      tmp |= 0x8;
--                      ssb_pcie_write(pc, 0x4, tmp);
--              }
--              if (pdev->id.revision == 0) {
--                      const u8 serdes_rx_device = 0x1F;
--
--                      ssb_pcie_mdio_write(pc, serdes_rx_device,
--                                          2 /* Timer */, 0x8128);
--                      ssb_pcie_mdio_write(pc, serdes_rx_device,
--                                          6 /* CDR */, 0x0100);
--                      ssb_pcie_mdio_write(pc, serdes_rx_device,
--                                          7 /* CDR BW */, 0x1466);
--              } else if (pdev->id.revision == 1) {
--                      /* DLLP Link Control register. */
--                      tmp = ssb_pcie_read(pc, 0x100);
--                      tmp |= 0x40;
--                      ssb_pcie_write(pc, 0x100, tmp);
--              }
-+              ssb_pcicore_pcie_setup_workarounds(pc);
-       }
-       pc->setup_done = 1;
- out:
---- a/drivers/ssb/embedded.c
-+++ b/drivers/ssb/embedded.c
-@@ -3,7 +3,7 @@
-  * Embedded systems support code
-  *
-  * Copyright 2005-2008, Broadcom Corporation
-- * Copyright 2006-2008, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006-2008, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
---- a/drivers/ssb/main.c
-+++ b/drivers/ssb/main.c
-@@ -3,7 +3,7 @@
-  * Subsystem core
-  *
-  * Copyright 2005, Broadcom Corporation
-- * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -12,6 +12,7 @@
- #include <linux/delay.h>
- #include <linux/io.h>
-+#include <linux/module.h>
- #include <linux/ssb/ssb.h>
- #include <linux/ssb/ssb_regs.h>
- #include <linux/ssb/ssb_driver_gige.h>
-@@ -139,19 +140,6 @@ static void ssb_device_put(struct ssb_de
-               put_device(dev->dev);
- }
--static inline struct ssb_driver *ssb_driver_get(struct ssb_driver *drv)
--{
--      if (drv)
--              get_driver(&drv->drv);
--      return drv;
--}
--
--static inline void ssb_driver_put(struct ssb_driver *drv)
--{
--      if (drv)
--              put_driver(&drv->drv);
--}
--
- static int ssb_device_resume(struct device *dev)
- {
-       struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
-@@ -249,11 +237,9 @@ int ssb_devices_freeze(struct ssb_bus *b
-                       ssb_device_put(sdev);
-                       continue;
-               }
--              sdrv = ssb_driver_get(drv_to_ssb_drv(sdev->dev->driver));
--              if (!sdrv || SSB_WARN_ON(!sdrv->remove)) {
--                      ssb_device_put(sdev);
-+              sdrv = drv_to_ssb_drv(sdev->dev->driver);
-+              if (SSB_WARN_ON(!sdrv->remove))
-                       continue;
--              }
-               sdrv->remove(sdev);
-               ctx->device_frozen[i] = 1;
-       }
-@@ -292,7 +278,6 @@ int ssb_devices_thaw(struct ssb_freeze_c
-                                  dev_name(sdev->dev));
-                       result = err;
-               }
--              ssb_driver_put(sdrv);
-               ssb_device_put(sdev);
-       }
-@@ -557,7 +542,7 @@ error:
- }
- /* Needs ssb_buses_lock() */
--static int ssb_attach_queued_buses(void)
-+static int __devinit ssb_attach_queued_buses(void)
- {
-       struct ssb_bus *bus, *n;
-       int err = 0;
-@@ -768,9 +753,9 @@ out:
-       return err;
- }
--static int ssb_bus_register(struct ssb_bus *bus,
--                          ssb_invariants_func_t get_invariants,
--                          unsigned long baseaddr)
-+static int __devinit ssb_bus_register(struct ssb_bus *bus,
-+                                    ssb_invariants_func_t get_invariants,
-+                                    unsigned long baseaddr)
- {
-       int err;
-@@ -851,8 +836,8 @@ err_disable_xtal:
- }
- #ifdef CONFIG_SSB_PCIHOST
--int ssb_bus_pcibus_register(struct ssb_bus *bus,
--                          struct pci_dev *host_pci)
-+int __devinit ssb_bus_pcibus_register(struct ssb_bus *bus,
-+                                    struct pci_dev *host_pci)
- {
-       int err;
-@@ -875,9 +860,9 @@ EXPORT_SYMBOL(ssb_bus_pcibus_register);
- #endif /* CONFIG_SSB_PCIHOST */
- #ifdef CONFIG_SSB_PCMCIAHOST
--int ssb_bus_pcmciabus_register(struct ssb_bus *bus,
--                             struct pcmcia_device *pcmcia_dev,
--                             unsigned long baseaddr)
-+int __devinit ssb_bus_pcmciabus_register(struct ssb_bus *bus,
-+                                       struct pcmcia_device *pcmcia_dev,
-+                                       unsigned long baseaddr)
- {
-       int err;
-@@ -897,8 +882,9 @@ EXPORT_SYMBOL(ssb_bus_pcmciabus_register
- #endif /* CONFIG_SSB_PCMCIAHOST */
- #ifdef CONFIG_SSB_SDIOHOST
--int ssb_bus_sdiobus_register(struct ssb_bus *bus, struct sdio_func *func,
--                           unsigned int quirks)
-+int __devinit ssb_bus_sdiobus_register(struct ssb_bus *bus,
-+                                     struct sdio_func *func,
-+                                     unsigned int quirks)
- {
-       int err;
-@@ -918,9 +904,9 @@ int ssb_bus_sdiobus_register(struct ssb_
- EXPORT_SYMBOL(ssb_bus_sdiobus_register);
- #endif /* CONFIG_SSB_PCMCIAHOST */
--int ssb_bus_ssbbus_register(struct ssb_bus *bus,
--                          unsigned long baseaddr,
--                          ssb_invariants_func_t get_invariants)
-+int __devinit ssb_bus_ssbbus_register(struct ssb_bus *bus,
-+                                    unsigned long baseaddr,
-+                                    ssb_invariants_func_t get_invariants)
- {
-       int err;
-@@ -1001,8 +987,8 @@ u32 ssb_calc_clock_rate(u32 plltype, u32
-       switch (plltype) {
-       case SSB_PLLTYPE_6: /* 100/200 or 120/240 only */
-               if (m & SSB_CHIPCO_CLK_T6_MMASK)
--                      return SSB_CHIPCO_CLK_T6_M0;
--              return SSB_CHIPCO_CLK_T6_M1;
-+                      return SSB_CHIPCO_CLK_T6_M1;
-+              return SSB_CHIPCO_CLK_T6_M0;
-       case SSB_PLLTYPE_1: /* 48Mhz base, 3 dividers */
-       case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */
-       case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */
-@@ -1092,6 +1078,9 @@ u32 ssb_clockspeed(struct ssb_bus *bus)
-       u32 plltype;
-       u32 clkctl_n, clkctl_m;
-+      if (bus->chipco.capabilities & SSB_CHIPCO_CAP_PMU)
-+              return ssb_pmu_get_controlclock(&bus->chipco);
-+
-       if (ssb_extif_available(&bus->extif))
-               ssb_extif_get_clockcontrol(&bus->extif, &plltype,
-                                          &clkctl_n, &clkctl_m);
-@@ -1117,23 +1106,22 @@ static u32 ssb_tmslow_reject_bitmask(str
- {
-       u32 rev = ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV;
--      /* The REJECT bit changed position in TMSLOW between
--       * Backplane revisions. */
-+      /* The REJECT bit seems to be different for Backplane rev 2.3 */
-       switch (rev) {
-       case SSB_IDLOW_SSBREV_22:
--              return SSB_TMSLOW_REJECT_22;
-+      case SSB_IDLOW_SSBREV_24:
-+      case SSB_IDLOW_SSBREV_26:
-+              return SSB_TMSLOW_REJECT;
-       case SSB_IDLOW_SSBREV_23:
-               return SSB_TMSLOW_REJECT_23;
--      case SSB_IDLOW_SSBREV_24:     /* TODO - find the proper REJECT bits */
--      case SSB_IDLOW_SSBREV_25:     /* same here */
--      case SSB_IDLOW_SSBREV_26:     /* same here */
-+      case SSB_IDLOW_SSBREV_25:     /* TODO - find the proper REJECT bit */
-       case SSB_IDLOW_SSBREV_27:     /* same here */
--              return SSB_TMSLOW_REJECT_23;    /* this is a guess */
-+              return SSB_TMSLOW_REJECT;       /* this is a guess */
-       default:
-               printk(KERN_INFO "ssb: Backplane Revision 0x%.8X\n", rev);
-               WARN_ON(1);
-       }
--      return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23);
-+      return (SSB_TMSLOW_REJECT | SSB_TMSLOW_REJECT_23);
- }
- int ssb_device_is_enabled(struct ssb_device *dev)
-@@ -1260,13 +1248,34 @@ void ssb_device_disable(struct ssb_devic
- }
- EXPORT_SYMBOL(ssb_device_disable);
-+/* Some chipsets need routing known for PCIe and 64-bit DMA */
-+static bool ssb_dma_translation_special_bit(struct ssb_device *dev)
-+{
-+      u16 chip_id = dev->bus->chip_id;
-+
-+      if (dev->id.coreid == SSB_DEV_80211) {
-+              return (chip_id == 0x4322 || chip_id == 43221 ||
-+                      chip_id == 43231 || chip_id == 43222);
-+      }
-+
-+      return 0;
-+}
-+
- u32 ssb_dma_translation(struct ssb_device *dev)
- {
-       switch (dev->bus->bustype) {
-       case SSB_BUSTYPE_SSB:
-               return 0;
-       case SSB_BUSTYPE_PCI:
--              return SSB_PCI_DMA;
-+              if (pci_is_pcie(dev->bus->host_pci) &&
-+                  ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_DMA64) {
-+                      return SSB_PCIE_DMA_H32;
-+              } else {
-+                      if (ssb_dma_translation_special_bit(dev))
-+                              return SSB_PCIE_DMA_H32;
-+                      else
-+                              return SSB_PCI_DMA;
-+              }
-       default:
-               __ssb_dma_not_implemented(dev);
-       }
-@@ -1309,20 +1318,20 @@ EXPORT_SYMBOL(ssb_bus_may_powerdown);
- int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl)
- {
--      struct ssb_chipcommon *cc;
-       int err;
-       enum ssb_clkmode mode;
-       err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
-       if (err)
-               goto error;
--      cc = &bus->chipco;
--      mode = dynamic_pctl ? SSB_CLKMODE_DYNAMIC : SSB_CLKMODE_FAST;
--      ssb_chipco_set_clockmode(cc, mode);
- #ifdef CONFIG_SSB_DEBUG
-       bus->powered_up = 1;
- #endif
-+
-+      mode = dynamic_pctl ? SSB_CLKMODE_DYNAMIC : SSB_CLKMODE_FAST;
-+      ssb_chipco_set_clockmode(&bus->chipco, mode);
-+
-       return 0;
- error:
-       ssb_printk(KERN_ERR PFX "Bus powerup failed\n");
-@@ -1330,6 +1339,37 @@ error:
- }
- EXPORT_SYMBOL(ssb_bus_powerup);
-+static void ssb_broadcast_value(struct ssb_device *dev,
-+                              u32 address, u32 data)
-+{
-+#ifdef CONFIG_SSB_DRIVER_PCICORE
-+      /* This is used for both, PCI and ChipCommon core, so be careful. */
-+      BUILD_BUG_ON(SSB_PCICORE_BCAST_ADDR != SSB_CHIPCO_BCAST_ADDR);
-+      BUILD_BUG_ON(SSB_PCICORE_BCAST_DATA != SSB_CHIPCO_BCAST_DATA);
-+#endif
-+
-+      ssb_write32(dev, SSB_CHIPCO_BCAST_ADDR, address);
-+      ssb_read32(dev, SSB_CHIPCO_BCAST_ADDR); /* flush */
-+      ssb_write32(dev, SSB_CHIPCO_BCAST_DATA, data);
-+      ssb_read32(dev, SSB_CHIPCO_BCAST_DATA); /* flush */
-+}
-+
-+void ssb_commit_settings(struct ssb_bus *bus)
-+{
-+      struct ssb_device *dev;
-+
-+#ifdef CONFIG_SSB_DRIVER_PCICORE
-+      dev = bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev;
-+#else
-+      dev = bus->chipco.dev;
-+#endif
-+      if (WARN_ON(!dev))
-+              return;
-+      /* This forces an update of the cached registers. */
-+      ssb_broadcast_value(dev, 0xFD8, 0);
-+}
-+EXPORT_SYMBOL(ssb_commit_settings);
-+
- u32 ssb_admatch_base(u32 adm)
- {
-       u32 base = 0;
---- a/drivers/ssb/pci.c
-+++ b/drivers/ssb/pci.c
-@@ -1,7 +1,7 @@
- /*
-  * Sonics Silicon Backplane PCI-Hostbus related functions.
-  *
-- * Copyright (C) 2005-2006 Michael Buesch <mb@bu3sch.de>
-+ * Copyright (C) 2005-2006 Michael Buesch <m@bues.ch>
-  * Copyright (C) 2005 Martin Langer <martin-langer@gmx.de>
-  * Copyright (C) 2005 Stefano Brivio <st3@riseup.net>
-  * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org>
-@@ -178,6 +178,18 @@ err_pci:
- #define SPEX(_outvar, _offset, _mask, _shift) \
-       SPEX16(_outvar, _offset, _mask, _shift)
-+#define SPEX_ARRAY8(_field, _offset, _mask, _shift)   \
-+      do {    \
-+              SPEX(_field[0], _offset +  0, _mask, _shift);   \
-+              SPEX(_field[1], _offset +  2, _mask, _shift);   \
-+              SPEX(_field[2], _offset +  4, _mask, _shift);   \
-+              SPEX(_field[3], _offset +  6, _mask, _shift);   \
-+              SPEX(_field[4], _offset +  8, _mask, _shift);   \
-+              SPEX(_field[5], _offset + 10, _mask, _shift);   \
-+              SPEX(_field[6], _offset + 12, _mask, _shift);   \
-+              SPEX(_field[7], _offset + 14, _mask, _shift);   \
-+      } while (0)
-+
- static inline u8 ssb_crc8(u8 crc, u8 data)
- {
-@@ -331,7 +343,6 @@ static void sprom_extract_r123(struct ss
- {
-       int i;
-       u16 v;
--      s8 gain;
-       u16 loc[3];
-       if (out->revision == 3)                 /* rev 3 moved MAC */
-@@ -361,8 +372,9 @@ static void sprom_extract_r123(struct ss
-       SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14);
-       SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15);
-       SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
--      SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
--           SSB_SPROM1_BINF_CCODE_SHIFT);
-+      if (out->revision == 1)
-+              SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
-+                   SSB_SPROM1_BINF_CCODE_SHIFT);
-       SPEX(ant_available_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
-            SSB_SPROM1_BINF_ANTA_SHIFT);
-       SPEX(ant_available_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
-@@ -388,22 +400,16 @@ static void sprom_extract_r123(struct ss
-       SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0);
-       if (out->revision >= 2)
-               SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0);
-+      SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8);
-+      SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0);
-       /* Extract the antenna gain values. */
--      gain = r123_extract_antgain(out->revision, in,
--                                  SSB_SPROM1_AGAIN_BG,
--                                  SSB_SPROM1_AGAIN_BG_SHIFT);
--      out->antenna_gain.ghz24.a0 = gain;
--      out->antenna_gain.ghz24.a1 = gain;
--      out->antenna_gain.ghz24.a2 = gain;
--      out->antenna_gain.ghz24.a3 = gain;
--      gain = r123_extract_antgain(out->revision, in,
--                                  SSB_SPROM1_AGAIN_A,
--                                  SSB_SPROM1_AGAIN_A_SHIFT);
--      out->antenna_gain.ghz5.a0 = gain;
--      out->antenna_gain.ghz5.a1 = gain;
--      out->antenna_gain.ghz5.a2 = gain;
--      out->antenna_gain.ghz5.a3 = gain;
-+      out->antenna_gain.a0 = r123_extract_antgain(out->revision, in,
-+                                                  SSB_SPROM1_AGAIN_BG,
-+                                                  SSB_SPROM1_AGAIN_BG_SHIFT);
-+      out->antenna_gain.a1 = r123_extract_antgain(out->revision, in,
-+                                                  SSB_SPROM1_AGAIN_A,
-+                                                  SSB_SPROM1_AGAIN_A_SHIFT);
- }
- /* Revs 4 5 and 8 have partially shared layout */
-@@ -464,14 +470,17 @@ static void sprom_extract_r45(struct ssb
-       SPEX(et0phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET0A, 0);
-       SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A,
-            SSB_SPROM4_ETHPHY_ET1A_SHIFT);
-+      SPEX(board_rev, SSB_SPROM4_BOARDREV, 0xFFFF, 0);
-       if (out->revision == 4) {
--              SPEX(country_code, SSB_SPROM4_CCODE, 0xFFFF, 0);
-+              SPEX(alpha2[0], SSB_SPROM4_CCODE, 0xff00, 8);
-+              SPEX(alpha2[1], SSB_SPROM4_CCODE, 0x00ff, 0);
-               SPEX(boardflags_lo, SSB_SPROM4_BFLLO, 0xFFFF, 0);
-               SPEX(boardflags_hi, SSB_SPROM4_BFLHI, 0xFFFF, 0);
-               SPEX(boardflags2_lo, SSB_SPROM4_BFL2LO, 0xFFFF, 0);
-               SPEX(boardflags2_hi, SSB_SPROM4_BFL2HI, 0xFFFF, 0);
-       } else {
--              SPEX(country_code, SSB_SPROM5_CCODE, 0xFFFF, 0);
-+              SPEX(alpha2[0], SSB_SPROM5_CCODE, 0xff00, 8);
-+              SPEX(alpha2[1], SSB_SPROM5_CCODE, 0x00ff, 0);
-               SPEX(boardflags_lo, SSB_SPROM5_BFLLO, 0xFFFF, 0);
-               SPEX(boardflags_hi, SSB_SPROM5_BFLHI, 0xFFFF, 0);
-               SPEX(boardflags2_lo, SSB_SPROM5_BFL2LO, 0xFFFF, 0);
-@@ -504,16 +513,14 @@ static void sprom_extract_r45(struct ssb
-       }
-       /* Extract the antenna gain values. */
--      SPEX(antenna_gain.ghz24.a0, SSB_SPROM4_AGAIN01,
-+      SPEX(antenna_gain.a0, SSB_SPROM4_AGAIN01,
-            SSB_SPROM4_AGAIN0, SSB_SPROM4_AGAIN0_SHIFT);
--      SPEX(antenna_gain.ghz24.a1, SSB_SPROM4_AGAIN01,
-+      SPEX(antenna_gain.a1, SSB_SPROM4_AGAIN01,
-            SSB_SPROM4_AGAIN1, SSB_SPROM4_AGAIN1_SHIFT);
--      SPEX(antenna_gain.ghz24.a2, SSB_SPROM4_AGAIN23,
-+      SPEX(antenna_gain.a2, SSB_SPROM4_AGAIN23,
-            SSB_SPROM4_AGAIN2, SSB_SPROM4_AGAIN2_SHIFT);
--      SPEX(antenna_gain.ghz24.a3, SSB_SPROM4_AGAIN23,
-+      SPEX(antenna_gain.a3, SSB_SPROM4_AGAIN23,
-            SSB_SPROM4_AGAIN3, SSB_SPROM4_AGAIN3_SHIFT);
--      memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24,
--             sizeof(out->antenna_gain.ghz5));
-       sprom_extract_r458(out, in);
-@@ -523,14 +530,22 @@ static void sprom_extract_r45(struct ssb
- static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in)
- {
-       int i;
--      u16 v;
-+      u16 v, o;
-+      u16 pwr_info_offset[] = {
-+              SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1,
-+              SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3
-+      };
-+      BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) !=
-+                      ARRAY_SIZE(out->core_pwr_info));
-       /* extract the MAC address */
-       for (i = 0; i < 3; i++) {
-               v = in[SPOFF(SSB_SPROM8_IL0MAC) + i];
-               *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
-       }
--      SPEX(country_code, SSB_SPROM8_CCODE, 0xFFFF, 0);
-+      SPEX(board_rev, SSB_SPROM8_BOARDREV, 0xFFFF, 0);
-+      SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8);
-+      SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0);
-       SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0);
-       SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0);
-       SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, 0xFFFF, 0);
-@@ -596,17 +611,127 @@ static void sprom_extract_r8(struct ssb_
-       SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0);
-       /* Extract the antenna gain values. */
--      SPEX(antenna_gain.ghz24.a0, SSB_SPROM8_AGAIN01,
-+      SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01,
-            SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT);
--      SPEX(antenna_gain.ghz24.a1, SSB_SPROM8_AGAIN01,
-+      SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01,
-            SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT);
--      SPEX(antenna_gain.ghz24.a2, SSB_SPROM8_AGAIN23,
-+      SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23,
-            SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT);
--      SPEX(antenna_gain.ghz24.a3, SSB_SPROM8_AGAIN23,
-+      SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23,
-            SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT);
--      memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24,
--             sizeof(out->antenna_gain.ghz5));
-+      /* Extract cores power info info */
-+      for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) {
-+              o = pwr_info_offset[i];
-+              SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI,
-+                      SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT);
-+              SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI,
-+                      SSB_SPROM8_2G_MAXP, 0);
-+
-+              SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0);
-+
-+              SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI,
-+                      SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT);
-+              SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI,
-+                      SSB_SPROM8_5G_MAXP, 0);
-+              SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP,
-+                      SSB_SPROM8_5GH_MAXP, 0);
-+              SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP,
-+                      SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT);
-+
-+              SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0);
-+      }
-+
-+      /* Extract FEM info */
-+      SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G,
-+              SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT);
-+      SPEX(fem.ghz2.extpa_gain, SSB_SPROM8_FEM2G,
-+              SSB_SROM8_FEM_EXTPA_GAIN, SSB_SROM8_FEM_EXTPA_GAIN_SHIFT);
-+      SPEX(fem.ghz2.pdet_range, SSB_SPROM8_FEM2G,
-+              SSB_SROM8_FEM_PDET_RANGE, SSB_SROM8_FEM_PDET_RANGE_SHIFT);
-+      SPEX(fem.ghz2.tr_iso, SSB_SPROM8_FEM2G,
-+              SSB_SROM8_FEM_TR_ISO, SSB_SROM8_FEM_TR_ISO_SHIFT);
-+      SPEX(fem.ghz2.antswlut, SSB_SPROM8_FEM2G,
-+              SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT);
-+
-+      SPEX(fem.ghz5.tssipos, SSB_SPROM8_FEM5G,
-+              SSB_SROM8_FEM_TSSIPOS, SSB_SROM8_FEM_TSSIPOS_SHIFT);
-+      SPEX(fem.ghz5.extpa_gain, SSB_SPROM8_FEM5G,
-+              SSB_SROM8_FEM_EXTPA_GAIN, SSB_SROM8_FEM_EXTPA_GAIN_SHIFT);
-+      SPEX(fem.ghz5.pdet_range, SSB_SPROM8_FEM5G,
-+              SSB_SROM8_FEM_PDET_RANGE, SSB_SROM8_FEM_PDET_RANGE_SHIFT);
-+      SPEX(fem.ghz5.tr_iso, SSB_SPROM8_FEM5G,
-+              SSB_SROM8_FEM_TR_ISO, SSB_SROM8_FEM_TR_ISO_SHIFT);
-+      SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G,
-+              SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT);
-+
-+      SPEX(leddc_on_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_ON,
-+           SSB_SPROM8_LEDDC_ON_SHIFT);
-+      SPEX(leddc_off_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_OFF,
-+           SSB_SPROM8_LEDDC_OFF_SHIFT);
-+
-+      SPEX(txchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_TXCHAIN,
-+           SSB_SPROM8_TXRXC_TXCHAIN_SHIFT);
-+      SPEX(rxchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_RXCHAIN,
-+           SSB_SPROM8_TXRXC_RXCHAIN_SHIFT);
-+      SPEX(antswitch, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_SWITCH,
-+           SSB_SPROM8_TXRXC_SWITCH_SHIFT);
-+
-+      SPEX(opo, SSB_SPROM8_OFDM2GPO, 0x00ff, 0);
-+
-+      SPEX_ARRAY8(mcs2gpo, SSB_SPROM8_2G_MCSPO, ~0, 0);
-+      SPEX_ARRAY8(mcs5gpo, SSB_SPROM8_5G_MCSPO, ~0, 0);
-+      SPEX_ARRAY8(mcs5glpo, SSB_SPROM8_5GL_MCSPO, ~0, 0);
-+      SPEX_ARRAY8(mcs5ghpo, SSB_SPROM8_5GH_MCSPO, ~0, 0);
-+
-+      SPEX(rawtempsense, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_RAWTEMP,
-+           SSB_SPROM8_RAWTS_RAWTEMP_SHIFT);
-+      SPEX(measpower, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_MEASPOWER,
-+           SSB_SPROM8_RAWTS_MEASPOWER_SHIFT);
-+      SPEX(tempsense_slope, SSB_SPROM8_OPT_CORRX,
-+           SSB_SPROM8_OPT_CORRX_TEMP_SLOPE,
-+           SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT);
-+      SPEX(tempcorrx, SSB_SPROM8_OPT_CORRX, SSB_SPROM8_OPT_CORRX_TEMPCORRX,
-+           SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT);
-+      SPEX(tempsense_option, SSB_SPROM8_OPT_CORRX,
-+           SSB_SPROM8_OPT_CORRX_TEMP_OPTION,
-+           SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT);
-+      SPEX(freqoffset_corr, SSB_SPROM8_HWIQ_IQSWP,
-+           SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR,
-+           SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT);
-+      SPEX(iqcal_swp_dis, SSB_SPROM8_HWIQ_IQSWP,
-+           SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP,
-+           SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT);
-+      SPEX(hw_iqcal_en, SSB_SPROM8_HWIQ_IQSWP, SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL,
-+           SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT);
-+
-+      SPEX(bw40po, SSB_SPROM8_BW40PO, ~0, 0);
-+      SPEX(cddpo, SSB_SPROM8_CDDPO, ~0, 0);
-+      SPEX(stbcpo, SSB_SPROM8_STBCPO, ~0, 0);
-+      SPEX(bwduppo, SSB_SPROM8_BWDUPPO, ~0, 0);
-+
-+      SPEX(tempthresh, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_TRESH,
-+           SSB_SPROM8_THERMAL_TRESH_SHIFT);
-+      SPEX(tempoffset, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_OFFSET,
-+           SSB_SPROM8_THERMAL_OFFSET_SHIFT);
-+      SPEX(phycal_tempdelta, SSB_SPROM8_TEMPDELTA,
-+           SSB_SPROM8_TEMPDELTA_PHYCAL,
-+           SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT);
-+      SPEX(temps_period, SSB_SPROM8_TEMPDELTA, SSB_SPROM8_TEMPDELTA_PERIOD,
-+           SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT);
-+      SPEX(temps_hysteresis, SSB_SPROM8_TEMPDELTA,
-+           SSB_SPROM8_TEMPDELTA_HYSTERESIS,
-+           SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT);
-       sprom_extract_r458(out, in);
-       /* TODO - get remaining rev 8 stuff needed */
-@@ -662,7 +787,6 @@ static int sprom_extract(struct ssb_bus
- static int ssb_pci_sprom_get(struct ssb_bus *bus,
-                            struct ssb_sprom *sprom)
- {
--      const struct ssb_sprom *fallback;
-       int err;
-       u16 *buf;
-@@ -707,10 +831,17 @@ static int ssb_pci_sprom_get(struct ssb_
-               if (err) {
-                       /* All CRC attempts failed.
-                        * Maybe there is no SPROM on the device?
--                       * If we have a fallback, use that. */
--                      fallback = ssb_get_fallback_sprom();
--                      if (fallback) {
--                              memcpy(sprom, fallback, sizeof(*sprom));
-+                       * Now we ask the arch code if there is some sprom
-+                       * available for this device in some other storage */
-+                      err = ssb_fill_sprom_with_fallback(bus, sprom);
-+                      if (err) {
-+                              ssb_printk(KERN_WARNING PFX "WARNING: Using"
-+                                         " fallback SPROM failed (err %d)\n",
-+                                         err);
-+                      } else {
-+                              ssb_dprintk(KERN_DEBUG PFX "Using SPROM"
-+                                          " revision %d provided by"
-+                                          " platform.\n", sprom->revision);
-                               err = 0;
-                               goto out_free;
-                       }
-@@ -728,12 +859,8 @@ out_free:
- static void ssb_pci_get_boardinfo(struct ssb_bus *bus,
-                                 struct ssb_boardinfo *bi)
- {
--      pci_read_config_word(bus->host_pci, PCI_SUBSYSTEM_VENDOR_ID,
--                           &bi->vendor);
--      pci_read_config_word(bus->host_pci, PCI_SUBSYSTEM_ID,
--                           &bi->type);
--      pci_read_config_word(bus->host_pci, PCI_REVISION_ID,
--                           &bi->rev);
-+      bi->vendor = bus->host_pci->subsystem_vendor;
-+      bi->type = bus->host_pci->subsystem_device;
- }
- int ssb_pci_get_invariants(struct ssb_bus *bus,
---- a/drivers/ssb/pcihost_wrapper.c
-+++ b/drivers/ssb/pcihost_wrapper.c
-@@ -6,7 +6,7 @@
-  * Copyright (c) 2005 Stefano Brivio <st3@riseup.net>
-  * Copyright (c) 2005 Danny van Dyk <kugelfang@gentoo.org>
-  * Copyright (c) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>
-- * Copyright (c) 2005-2007 Michael Buesch <mbuesch@freenet.de>
-+ * Copyright (c) 2005-2007 Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -53,8 +53,8 @@ static int ssb_pcihost_resume(struct pci
- # define ssb_pcihost_resume   NULL
- #endif /* CONFIG_PM */
--static int ssb_pcihost_probe(struct pci_dev *dev,
--                           const struct pci_device_id *id)
-+static int __devinit ssb_pcihost_probe(struct pci_dev *dev,
-+                                     const struct pci_device_id *id)
- {
-       struct ssb_bus *ssb;
-       int err = -ENOMEM;
-@@ -110,7 +110,7 @@ static void ssb_pcihost_remove(struct pc
-       pci_set_drvdata(dev, NULL);
- }
--int ssb_pcihost_register(struct pci_driver *driver)
-+int __devinit ssb_pcihost_register(struct pci_driver *driver)
- {
-       driver->probe = ssb_pcihost_probe;
-       driver->remove = ssb_pcihost_remove;
---- a/drivers/ssb/pcmcia.c
-+++ b/drivers/ssb/pcmcia.c
-@@ -3,7 +3,7 @@
-  * PCMCIA-Hostbus related functions
-  *
-  * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
-- * Copyright 2007-2008 Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2007-2008 Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  */
-@@ -676,14 +676,10 @@ static int ssb_pcmcia_do_get_invariants(
-       case SSB_PCMCIA_CIS_ANTGAIN:
-               GOTO_ERROR_ON(tuple->TupleDataLen != 2,
-                       "antg tpl size");
--              sprom->antenna_gain.ghz24.a0 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz24.a1 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz24.a2 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz24.a3 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz5.a0 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz5.a1 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz5.a2 = tuple->TupleData[1];
--              sprom->antenna_gain.ghz5.a3 = tuple->TupleData[1];
-+              sprom->antenna_gain.a0 = tuple->TupleData[1];
-+              sprom->antenna_gain.a1 = tuple->TupleData[1];
-+              sprom->antenna_gain.a2 = tuple->TupleData[1];
-+              sprom->antenna_gain.a3 = tuple->TupleData[1];
-               break;
-       case SSB_PCMCIA_CIS_BFLAGS:
-               GOTO_ERROR_ON((tuple->TupleDataLen != 3) &&
---- a/drivers/ssb/scan.c
-+++ b/drivers/ssb/scan.c
-@@ -2,7 +2,7 @@
-  * Sonics Silicon Backplane
-  * Bus scanning
-  *
-- * Copyright (C) 2005-2007 Michael Buesch <mb@bu3sch.de>
-+ * Copyright (C) 2005-2007 Michael Buesch <m@bues.ch>
-  * Copyright (C) 2005 Martin Langer <martin-langer@gmx.de>
-  * Copyright (C) 2005 Stefano Brivio <st3@riseup.net>
-  * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org>
-@@ -258,7 +258,10 @@ static int we_support_multiple_80211_cor
- #ifdef CONFIG_SSB_PCIHOST
-       if (bus->bustype == SSB_BUSTYPE_PCI) {
-               if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM &&
--                  bus->host_pci->device == 0x4324)
-+                  ((bus->host_pci->device == 0x4313) ||
-+                   (bus->host_pci->device == 0x431A) ||
-+                   (bus->host_pci->device == 0x4321) ||
-+                   (bus->host_pci->device == 0x4324)))
-                       return 1;
-       }
- #endif /* CONFIG_SSB_PCIHOST */
-@@ -307,8 +310,7 @@ int ssb_bus_scan(struct ssb_bus *bus,
-       } else {
-               if (bus->bustype == SSB_BUSTYPE_PCI) {
-                       bus->chip_id = pcidev_to_chipid(bus->host_pci);
--                      pci_read_config_word(bus->host_pci, PCI_REVISION_ID,
--                                           &bus->chip_rev);
-+                      bus->chip_rev = bus->host_pci->revision;
-                       bus->chip_package = 0;
-               } else {
-                       bus->chip_id = 0x4710;
-@@ -316,6 +318,9 @@ int ssb_bus_scan(struct ssb_bus *bus,
-                       bus->chip_package = 0;
-               }
-       }
-+      ssb_printk(KERN_INFO PFX "Found chip with id 0x%04X, rev 0x%02X and "
-+                 "package 0x%02X\n", bus->chip_id, bus->chip_rev,
-+                 bus->chip_package);
-       if (!bus->nr_devices)
-               bus->nr_devices = chipid_to_nrcores(bus->chip_id);
-       if (bus->nr_devices > ARRAY_SIZE(bus->devices)) {
---- a/drivers/ssb/sdio.c
-+++ b/drivers/ssb/sdio.c
-@@ -6,7 +6,7 @@
-  *
-  * Based on drivers/ssb/pcmcia.c
-  * Copyright 2006 Johannes Berg <johannes@sipsolutions.net>
-- * Copyright 2007-2008 Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2007-2008 Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GNU/GPL. See COPYING for details.
-  *
-@@ -551,14 +551,10 @@ int ssb_sdio_get_invariants(struct ssb_b
-                       case SSB_SDIO_CIS_ANTGAIN:
-                               GOTO_ERROR_ON(tuple->size != 2,
-                                             "antg tpl size");
--                              sprom->antenna_gain.ghz24.a0 = tuple->data[1];
--                              sprom->antenna_gain.ghz24.a1 = tuple->data[1];
--                              sprom->antenna_gain.ghz24.a2 = tuple->data[1];
--                              sprom->antenna_gain.ghz24.a3 = tuple->data[1];
--                              sprom->antenna_gain.ghz5.a0 = tuple->data[1];
--                              sprom->antenna_gain.ghz5.a1 = tuple->data[1];
--                              sprom->antenna_gain.ghz5.a2 = tuple->data[1];
--                              sprom->antenna_gain.ghz5.a3 = tuple->data[1];
-+                              sprom->antenna_gain.a0 = tuple->data[1];
-+                              sprom->antenna_gain.a1 = tuple->data[1];
-+                              sprom->antenna_gain.a2 = tuple->data[1];
-+                              sprom->antenna_gain.a3 = tuple->data[1];
-                               break;
-                       case SSB_SDIO_CIS_BFLAGS:
-                               GOTO_ERROR_ON((tuple->size != 3) &&
---- a/drivers/ssb/sprom.c
-+++ b/drivers/ssb/sprom.c
-@@ -2,7 +2,7 @@
-  * Sonics Silicon Backplane
-  * Common SPROM support routines
-  *
-- * Copyright (C) 2005-2008 Michael Buesch <mb@bu3sch.de>
-+ * Copyright (C) 2005-2008 Michael Buesch <m@bues.ch>
-  * Copyright (C) 2005 Martin Langer <martin-langer@gmx.de>
-  * Copyright (C) 2005 Stefano Brivio <st3@riseup.net>
-  * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org>
-@@ -17,7 +17,7 @@
- #include <linux/slab.h>
--static const struct ssb_sprom *fallback_sprom;
-+static int(*get_fallback_sprom)(struct ssb_bus *dev, struct ssb_sprom *out);
- static int sprom2hex(const u16 *sprom, char *buf, size_t buf_len,
-@@ -145,36 +145,43 @@ out:
- }
- /**
-- * ssb_arch_set_fallback_sprom - Set a fallback SPROM for use if no SPROM is found.
-+ * ssb_arch_register_fallback_sprom - Registers a method providing a
-+ * fallback SPROM if no SPROM is found.
-  *
-- * @sprom: The SPROM data structure to register.
-+ * @sprom_callback: The callback function.
-  *
-- * With this function the architecture implementation may register a fallback
-- * SPROM data structure. The fallback is only used for PCI based SSB devices,
-- * where no valid SPROM can be found in the shadow registers.
-+ * With this function the architecture implementation may register a
-+ * callback handler which fills the SPROM data structure. The fallback is
-+ * only used for PCI based SSB devices, where no valid SPROM can be found
-+ * in the shadow registers.
-+ *
-+ * This function is useful for weird architectures that have a half-assed
-+ * SSB device hardwired to their PCI bus.
-+ *
-+ * Note that it does only work with PCI attached SSB devices. PCMCIA
-+ * devices currently don't use this fallback.
-+ * Architectures must provide the SPROM for native SSB devices anyway, so
-+ * the fallback also isn't used for native devices.
-  *
-- * This function is useful for weird architectures that have a half-assed SSB device
-- * hardwired to their PCI bus.
-- *
-- * Note that it does only work with PCI attached SSB devices. PCMCIA devices currently
-- * don't use this fallback.
-- * Architectures must provide the SPROM for native SSB devices anyway,
-- * so the fallback also isn't used for native devices.
-- *
-- * This function is available for architecture code, only. So it is not exported.
-+ * This function is available for architecture code, only. So it is not
-+ * exported.
-  */
--int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom)
-+int ssb_arch_register_fallback_sprom(int (*sprom_callback)(struct ssb_bus *bus,
-+                                   struct ssb_sprom *out))
- {
--      if (fallback_sprom)
-+      if (get_fallback_sprom)
-               return -EEXIST;
--      fallback_sprom = sprom;
-+      get_fallback_sprom = sprom_callback;
-       return 0;
- }
--const struct ssb_sprom *ssb_get_fallback_sprom(void)
-+int ssb_fill_sprom_with_fallback(struct ssb_bus *bus, struct ssb_sprom *out)
- {
--      return fallback_sprom;
-+      if (!get_fallback_sprom)
-+              return -ENOENT;
-+
-+      return get_fallback_sprom(bus, out);
- }
- /* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */
---- a/drivers/ssb/ssb_private.h
-+++ b/drivers/ssb/ssb_private.h
-@@ -171,7 +171,8 @@ ssize_t ssb_attr_sprom_store(struct ssb_
-                            const char *buf, size_t count,
-                            int (*sprom_check_crc)(const u16 *sprom, size_t size),
-                            int (*sprom_write)(struct ssb_bus *bus, const u16 *sprom));
--extern const struct ssb_sprom *ssb_get_fallback_sprom(void);
-+extern int ssb_fill_sprom_with_fallback(struct ssb_bus *bus,
-+                                      struct ssb_sprom *out);
- /* core.c */
-@@ -206,4 +207,8 @@ static inline void b43_pci_ssb_bridge_ex
- }
- #endif /* CONFIG_SSB_B43_PCI_BRIDGE */
-+/* driver_chipcommon_pmu.c */
-+extern u32 ssb_pmu_get_cpu_clock(struct ssb_chipcommon *cc);
-+extern u32 ssb_pmu_get_controlclock(struct ssb_chipcommon *cc);
-+
- #endif /* LINUX_SSB_PRIVATE_H_ */
---- a/include/linux/ssb/ssb.h
-+++ b/include/linux/ssb/ssb.h
-@@ -16,6 +16,12 @@ struct pcmcia_device;
- struct ssb_bus;
- struct ssb_driver;
-+struct ssb_sprom_core_pwr_info {
-+      u8 itssi_2g, itssi_5g;
-+      u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh;
-+      u16 pa_2g[4], pa_5gl[4], pa_5g[4], pa_5gh[4];
-+};
-+
- struct ssb_sprom {
-       u8 revision;
-       u8 il0mac[6];           /* MAC address for 802.11b/g */
-@@ -25,8 +31,13 @@ struct ssb_sprom {
-       u8 et1phyaddr;          /* MII address for enet1 */
-       u8 et0mdcport;          /* MDIO for enet0 */
-       u8 et1mdcport;          /* MDIO for enet1 */
--      u8 board_rev;           /* Board revision number from SPROM. */
-+      u16 board_rev;          /* Board revision number from SPROM. */
-+      u16 board_num;          /* Board number from SPROM. */
-+      u16 board_type;         /* Board type from SPROM. */
-       u8 country_code;        /* Country Code */
-+      char alpha2[2];         /* Country Code as two chars like EU or US */
-+      u8 leddc_on_time;       /* LED Powersave Duty Cycle On Count */
-+      u8 leddc_off_time;      /* LED Powersave Duty Cycle Off Count */
-       u8 ant_available_a;     /* 2GHz antenna available bits (up to 4) */
-       u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */
-       u16 pa0b0;
-@@ -45,10 +56,10 @@ struct ssb_sprom {
-       u8 gpio1;               /* GPIO pin 1 */
-       u8 gpio2;               /* GPIO pin 2 */
-       u8 gpio3;               /* GPIO pin 3 */
--      u16 maxpwr_bg;          /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */
--      u16 maxpwr_al;          /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */
--      u16 maxpwr_a;           /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */
--      u16 maxpwr_ah;          /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */
-+      u8 maxpwr_bg;           /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */
-+      u8 maxpwr_al;           /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */
-+      u8 maxpwr_a;            /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */
-+      u8 maxpwr_ah;           /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */
-       u8 itssi_a;             /* Idle TSSI Target for A-PHY */
-       u8 itssi_bg;            /* Idle TSSI Target for B/G-PHY */
-       u8 tri2g;               /* 2.4GHz TX isolation */
-@@ -59,8 +70,8 @@ struct ssb_sprom {
-       u8 txpid5gl[4];         /* 4.9 - 5.1GHz TX power index */
-       u8 txpid5g[4];          /* 5.1 - 5.5GHz TX power index */
-       u8 txpid5gh[4];         /* 5.5 - ...GHz TX power index */
--      u8 rxpo2g;              /* 2GHz RX power offset */
--      u8 rxpo5g;              /* 5GHz RX power offset */
-+      s8 rxpo2g;              /* 2GHz RX power offset */
-+      s8 rxpo5g;              /* 5GHz RX power offset */
-       u8 rssisav2g;           /* 2GHz RSSI params */
-       u8 rssismc2g;
-       u8 rssismf2g;
-@@ -80,26 +91,103 @@ struct ssb_sprom {
-       u16 boardflags2_hi;     /* Board flags (bits 48-63) */
-       /* TODO store board flags in a single u64 */
-+      struct ssb_sprom_core_pwr_info core_pwr_info[4];
-+
-       /* Antenna gain values for up to 4 antennas
-        * on each band. Values in dBm/4 (Q5.2). Negative gain means the
-        * loss in the connectors is bigger than the gain. */
-       struct {
--              struct {
--                      s8 a0, a1, a2, a3;
--              } ghz24;        /* 2.4GHz band */
--              struct {
--                      s8 a0, a1, a2, a3;
--              } ghz5;         /* 5GHz band */
-+              s8 a0, a1, a2, a3;
-       } antenna_gain;
--      /* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */
-+      struct {
-+              struct {
-+                      u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut;
-+              } ghz2;
-+              struct {
-+                      u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut;
-+              } ghz5;
-+      } fem;
-+
-+      u16 mcs2gpo[8];
-+      u16 mcs5gpo[8];
-+      u16 mcs5glpo[8];
-+      u16 mcs5ghpo[8];
-+      u8 opo;
-+
-+      u8 rxgainerr2ga[3];
-+      u8 rxgainerr5gla[3];
-+      u8 rxgainerr5gma[3];
-+      u8 rxgainerr5gha[3];
-+      u8 rxgainerr5gua[3];
-+
-+      u8 noiselvl2ga[3];
-+      u8 noiselvl5gla[3];
-+      u8 noiselvl5gma[3];
-+      u8 noiselvl5gha[3];
-+      u8 noiselvl5gua[3];
-+
-+      u8 regrev;
-+      u8 txchain;
-+      u8 rxchain;
-+      u8 antswitch;
-+      u16 cddpo;
-+      u16 stbcpo;
-+      u16 bw40po;
-+      u16 bwduppo;
-+
-+      u8 tempthresh;
-+      u8 tempoffset;
-+      u16 rawtempsense;
-+      u8 measpower;
-+      u8 tempsense_slope;
-+      u8 tempcorrx;
-+      u8 tempsense_option;
-+      u8 freqoffset_corr;
-+      u8 iqcal_swp_dis;
-+      u8 hw_iqcal_en;
-+      u8 elna2g;
-+      u8 elna5g;
-+      u8 phycal_tempdelta;
-+      u8 temps_period;
-+      u8 temps_hysteresis;
-+      u8 measpower1;
-+      u8 measpower2;
-+      u8 pcieingress_war;
-+
-+      /* power per rate from sromrev 9 */
-+      u16 cckbw202gpo;
-+      u16 cckbw20ul2gpo;
-+      u32 legofdmbw202gpo;
-+      u32 legofdmbw20ul2gpo;
-+      u32 legofdmbw205glpo;
-+      u32 legofdmbw20ul5glpo;
-+      u32 legofdmbw205gmpo;
-+      u32 legofdmbw20ul5gmpo;
-+      u32 legofdmbw205ghpo;
-+      u32 legofdmbw20ul5ghpo;
-+      u32 mcsbw202gpo;
-+      u32 mcsbw20ul2gpo;
-+      u32 mcsbw402gpo;
-+      u32 mcsbw205glpo;
-+      u32 mcsbw20ul5glpo;
-+      u32 mcsbw405glpo;
-+      u32 mcsbw205gmpo;
-+      u32 mcsbw20ul5gmpo;
-+      u32 mcsbw405gmpo;
-+      u32 mcsbw205ghpo;
-+      u32 mcsbw20ul5ghpo;
-+      u32 mcsbw405ghpo;
-+      u16 mcs32po;
-+      u16 legofdm40duppo;
-+      u8 sar2g;
-+      u8 sar5g;
- };
- /* Information about the PCB the circuitry is soldered on. */
- struct ssb_boardinfo {
-       u16 vendor;
-       u16 type;
--      u16 rev;
- };
-@@ -229,10 +317,9 @@ struct ssb_driver {
- #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv)
- extern int __ssb_driver_register(struct ssb_driver *drv, struct module *owner);
--static inline int ssb_driver_register(struct ssb_driver *drv)
--{
--      return __ssb_driver_register(drv, THIS_MODULE);
--}
-+#define ssb_driver_register(drv) \
-+      __ssb_driver_register(drv, THIS_MODULE)
-+
- extern void ssb_driver_unregister(struct ssb_driver *drv);
-@@ -308,7 +395,7 @@ struct ssb_bus {
-       /* ID information about the Chip. */
-       u16 chip_id;
--      u16 chip_rev;
-+      u8 chip_rev;
-       u16 sprom_offset;
-       u16 sprom_size;         /* number of words in sprom */
-       u8 chip_package;
-@@ -404,7 +491,9 @@ extern bool ssb_is_sprom_available(struc
- /* Set a fallback SPROM.
-  * See kdoc at the function definition for complete documentation. */
--extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom);
-+extern int ssb_arch_register_fallback_sprom(
-+              int (*sprom_callback)(struct ssb_bus *bus,
-+              struct ssb_sprom *out));
- /* Suspend a SSB bus.
-  * Call this from the parent bus suspend routine. */
-@@ -518,6 +607,7 @@ extern int ssb_bus_may_powerdown(struct
-  * Otherwise static always-on powercontrol will be used. */
- extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl);
-+extern void ssb_commit_settings(struct ssb_bus *bus);
- /* Various helper functions */
- extern u32 ssb_admatch_base(u32 adm);
---- a/include/linux/ssb/ssb_driver_chipcommon.h
-+++ b/include/linux/ssb/ssb_driver_chipcommon.h
-@@ -8,7 +8,7 @@
-  * gpio interface, extbus, and support for serial and parallel flashes.
-  *
-  * Copyright 2005, Broadcom Corporation
-- * Copyright 2006, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2006, Michael Buesch <m@bues.ch>
-  *
-  * Licensed under the GPL version 2. See COPYING for details.
-  */
-@@ -123,6 +123,8 @@
- #define SSB_CHIPCO_FLASHDATA          0x0048
- #define SSB_CHIPCO_BCAST_ADDR         0x0050
- #define SSB_CHIPCO_BCAST_DATA         0x0054
-+#define SSB_CHIPCO_GPIOPULLUP         0x0058          /* Rev >= 20 only */
-+#define SSB_CHIPCO_GPIOPULLDOWN               0x005C          /* Rev >= 20 only */
- #define SSB_CHIPCO_GPIOIN             0x0060
- #define SSB_CHIPCO_GPIOOUT            0x0064
- #define SSB_CHIPCO_GPIOOUTEN          0x0068
-@@ -131,6 +133,9 @@
- #define SSB_CHIPCO_GPIOIRQ            0x0074
- #define SSB_CHIPCO_WATCHDOG           0x0080
- #define SSB_CHIPCO_GPIOTIMER          0x0088          /* LED powersave (corerev >= 16) */
-+#define  SSB_CHIPCO_GPIOTIMER_OFFTIME 0x0000FFFF
-+#define  SSB_CHIPCO_GPIOTIMER_OFFTIME_SHIFT   0
-+#define  SSB_CHIPCO_GPIOTIMER_ONTIME  0xFFFF0000
- #define  SSB_CHIPCO_GPIOTIMER_ONTIME_SHIFT    16
- #define SSB_CHIPCO_GPIOTOUTM          0x008C          /* LED powersave (corerev >= 16) */
- #define SSB_CHIPCO_CLOCK_N            0x0090
-@@ -189,8 +194,10 @@
- #define  SSB_CHIPCO_CLKCTLST_HAVEALPREQ       0x00000008 /* ALP available request */
- #define  SSB_CHIPCO_CLKCTLST_HAVEHTREQ        0x00000010 /* HT available request */
- #define  SSB_CHIPCO_CLKCTLST_HWCROFF  0x00000020 /* Force HW clock request off */
--#define  SSB_CHIPCO_CLKCTLST_HAVEHT   0x00010000 /* HT available */
--#define  SSB_CHIPCO_CLKCTLST_HAVEALP  0x00020000 /* APL available */
-+#define  SSB_CHIPCO_CLKCTLST_HAVEALP  0x00010000 /* ALP available */
-+#define  SSB_CHIPCO_CLKCTLST_HAVEHT   0x00020000 /* HT available */
-+#define  SSB_CHIPCO_CLKCTLST_4328A0_HAVEHT    0x00010000 /* 4328a0 has reversed bits */
-+#define  SSB_CHIPCO_CLKCTLST_4328A0_HAVEALP   0x00020000 /* 4328a0 has reversed bits */
- #define SSB_CHIPCO_HW_WORKAROUND      0x01E4 /* Hardware workaround (rev >= 20) */
- #define SSB_CHIPCO_UART0_DATA         0x0300
- #define SSB_CHIPCO_UART0_IMR          0x0304
---- a/include/linux/ssb/ssb_driver_gige.h
-+++ b/include/linux/ssb/ssb_driver_gige.h
-@@ -2,6 +2,7 @@
- #define LINUX_SSB_DRIVER_GIGE_H_
- #include <linux/ssb/ssb.h>
-+#include <linux/bug.h>
- #include <linux/pci.h>
- #include <linux/spinlock.h>
---- a/include/linux/ssb/ssb_regs.h
-+++ b/include/linux/ssb/ssb_regs.h
-@@ -97,7 +97,7 @@
- #define  SSB_INTVEC_ENET1     0x00000040 /* Enable interrupts for enet 1 */
- #define SSB_TMSLOW            0x0F98     /* SB Target State Low */
- #define  SSB_TMSLOW_RESET     0x00000001 /* Reset */
--#define  SSB_TMSLOW_REJECT_22 0x00000002 /* Reject (Backplane rev 2.2) */
-+#define  SSB_TMSLOW_REJECT    0x00000002 /* Reject (Standard Backplane) */
- #define  SSB_TMSLOW_REJECT_23 0x00000004 /* Reject (Backplane rev 2.3) */
- #define  SSB_TMSLOW_CLOCK     0x00010000 /* Clock Enable */
- #define  SSB_TMSLOW_FGC               0x00020000 /* Force Gated Clocks On */
-@@ -228,6 +228,7 @@
- #define  SSB_SPROM1_AGAIN_BG_SHIFT    0
- #define  SSB_SPROM1_AGAIN_A           0xFF00  /* A-PHY */
- #define  SSB_SPROM1_AGAIN_A_SHIFT     8
-+#define SSB_SPROM1_CCODE              0x0076
- /* SPROM Revision 2 (inherits from rev 1) */
- #define SSB_SPROM2_BFLHI              0x0038  /* Boardflags (high 16 bits) */
-@@ -267,6 +268,7 @@
- #define  SSB_SPROM3_OFDMGPO           0x107A  /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */
- /* SPROM Revision 4 */
-+#define SSB_SPROM4_BOARDREV           0x0042  /* Board revision */
- #define SSB_SPROM4_BFLLO              0x0044  /* Boardflags (low 16 bits) */
- #define SSB_SPROM4_BFLHI              0x0046  /* Board Flags Hi */
- #define SSB_SPROM4_BFL2LO             0x0048  /* Board flags 2 (low 16 bits) */
-@@ -389,6 +391,11 @@
- #define  SSB_SPROM8_GPIOB_P2          0x00FF  /* Pin 2 */
- #define  SSB_SPROM8_GPIOB_P3          0xFF00  /* Pin 3 */
- #define  SSB_SPROM8_GPIOB_P3_SHIFT    8
-+#define SSB_SPROM8_LEDDC              0x009A
-+#define  SSB_SPROM8_LEDDC_ON          0xFF00  /* oncount */
-+#define  SSB_SPROM8_LEDDC_ON_SHIFT    8
-+#define  SSB_SPROM8_LEDDC_OFF         0x00FF  /* offcount */
-+#define  SSB_SPROM8_LEDDC_OFF_SHIFT   0
- #define SSB_SPROM8_ANTAVAIL           0x009C  /* Antenna available bitfields*/
- #define  SSB_SPROM8_ANTAVAIL_A                0xFF00  /* A-PHY bitfield */
- #define  SSB_SPROM8_ANTAVAIL_A_SHIFT  8
-@@ -404,6 +411,13 @@
- #define  SSB_SPROM8_AGAIN2_SHIFT      0
- #define  SSB_SPROM8_AGAIN3            0xFF00  /* Antenna 3 */
- #define  SSB_SPROM8_AGAIN3_SHIFT      8
-+#define SSB_SPROM8_TXRXC              0x00A2
-+#define  SSB_SPROM8_TXRXC_TXCHAIN     0x000f
-+#define  SSB_SPROM8_TXRXC_TXCHAIN_SHIFT       0
-+#define  SSB_SPROM8_TXRXC_RXCHAIN     0x00f0
-+#define  SSB_SPROM8_TXRXC_RXCHAIN_SHIFT       4
-+#define  SSB_SPROM8_TXRXC_SWITCH      0xff00
-+#define  SSB_SPROM8_TXRXC_SWITCH_SHIFT        8
- #define SSB_SPROM8_RSSIPARM2G         0x00A4  /* RSSI params for 2GHz */
- #define  SSB_SPROM8_RSSISMF2G         0x000F
- #define  SSB_SPROM8_RSSISMC2G         0x00F0
-@@ -430,8 +444,87 @@
- #define  SSB_SPROM8_TRI5GH_SHIFT      8
- #define SSB_SPROM8_RXPO                       0x00AC  /* RX power offsets */
- #define  SSB_SPROM8_RXPO2G            0x00FF  /* 2GHz RX power offset */
-+#define  SSB_SPROM8_RXPO2G_SHIFT      0
- #define  SSB_SPROM8_RXPO5G            0xFF00  /* 5GHz RX power offset */
- #define  SSB_SPROM8_RXPO5G_SHIFT      8
-+#define SSB_SPROM8_FEM2G              0x00AE
-+#define SSB_SPROM8_FEM5G              0x00B0
-+#define  SSB_SROM8_FEM_TSSIPOS                0x0001
-+#define  SSB_SROM8_FEM_TSSIPOS_SHIFT  0
-+#define  SSB_SROM8_FEM_EXTPA_GAIN     0x0006
-+#define  SSB_SROM8_FEM_EXTPA_GAIN_SHIFT       1
-+#define  SSB_SROM8_FEM_PDET_RANGE     0x00F8
-+#define  SSB_SROM8_FEM_PDET_RANGE_SHIFT       3
-+#define  SSB_SROM8_FEM_TR_ISO         0x0700
-+#define  SSB_SROM8_FEM_TR_ISO_SHIFT   8
-+#define  SSB_SROM8_FEM_ANTSWLUT               0xF800
-+#define  SSB_SROM8_FEM_ANTSWLUT_SHIFT 11
-+#define SSB_SPROM8_THERMAL            0x00B2
-+#define  SSB_SPROM8_THERMAL_OFFSET    0x00ff
-+#define  SSB_SPROM8_THERMAL_OFFSET_SHIFT      0
-+#define  SSB_SPROM8_THERMAL_TRESH     0xff00
-+#define  SSB_SPROM8_THERMAL_TRESH_SHIFT       8
-+/* Temp sense related entries */
-+#define SSB_SPROM8_RAWTS              0x00B4
-+#define  SSB_SPROM8_RAWTS_RAWTEMP     0x01ff
-+#define  SSB_SPROM8_RAWTS_RAWTEMP_SHIFT       0
-+#define  SSB_SPROM8_RAWTS_MEASPOWER   0xfe00
-+#define  SSB_SPROM8_RAWTS_MEASPOWER_SHIFT     9
-+#define SSB_SPROM8_OPT_CORRX          0x00B6
-+#define  SSB_SPROM8_OPT_CORRX_TEMP_SLOPE      0x00ff
-+#define  SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT        0
-+#define  SSB_SPROM8_OPT_CORRX_TEMPCORRX       0xfc00
-+#define  SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT 10
-+#define  SSB_SPROM8_OPT_CORRX_TEMP_OPTION     0x0300
-+#define  SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT       8
-+/* FOC: freiquency offset correction, HWIQ: H/W IOCAL enable, IQSWP: IQ CAL swap disable */
-+#define SSB_SPROM8_HWIQ_IQSWP         0x00B8
-+#define  SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR      0x000f
-+#define  SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT        0
-+#define  SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP      0x0010
-+#define  SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT        4
-+#define  SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL       0x0020
-+#define  SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT 5
-+#define SSB_SPROM8_TEMPDELTA          0x00BA
-+#define  SSB_SPROM8_TEMPDELTA_PHYCAL  0x00ff
-+#define  SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT    0
-+#define  SSB_SPROM8_TEMPDELTA_PERIOD  0x0f00
-+#define  SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT    8
-+#define  SSB_SPROM8_TEMPDELTA_HYSTERESIS      0xf000
-+#define  SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT        12
-+
-+/* There are 4 blocks with power info sharing the same layout */
-+#define SSB_SROM8_PWR_INFO_CORE0      0x00C0
-+#define SSB_SROM8_PWR_INFO_CORE1      0x00E0
-+#define SSB_SROM8_PWR_INFO_CORE2      0x0100
-+#define SSB_SROM8_PWR_INFO_CORE3      0x0120
-+
-+#define SSB_SROM8_2G_MAXP_ITSSI               0x00
-+#define  SSB_SPROM8_2G_MAXP           0x00FF
-+#define  SSB_SPROM8_2G_ITSSI          0xFF00
-+#define  SSB_SPROM8_2G_ITSSI_SHIFT    8
-+#define SSB_SROM8_2G_PA_0             0x02    /* 2GHz power amp settings */
-+#define SSB_SROM8_2G_PA_1             0x04
-+#define SSB_SROM8_2G_PA_2             0x06
-+#define SSB_SROM8_5G_MAXP_ITSSI               0x08    /* 5GHz ITSSI and 5.3GHz Max Power */
-+#define  SSB_SPROM8_5G_MAXP           0x00FF
-+#define  SSB_SPROM8_5G_ITSSI          0xFF00
-+#define  SSB_SPROM8_5G_ITSSI_SHIFT    8
-+#define SSB_SPROM8_5GHL_MAXP          0x0A    /* 5.2GHz and 5.8GHz Max Power */
-+#define  SSB_SPROM8_5GH_MAXP          0x00FF
-+#define  SSB_SPROM8_5GL_MAXP          0xFF00
-+#define  SSB_SPROM8_5GL_MAXP_SHIFT    8
-+#define SSB_SROM8_5G_PA_0             0x0C    /* 5.3GHz power amp settings */
-+#define SSB_SROM8_5G_PA_1             0x0E
-+#define SSB_SROM8_5G_PA_2             0x10
-+#define SSB_SROM8_5GL_PA_0            0x12    /* 5.2GHz power amp settings */
-+#define SSB_SROM8_5GL_PA_1            0x14
-+#define SSB_SROM8_5GL_PA_2            0x16
-+#define SSB_SROM8_5GH_PA_0            0x18    /* 5.8GHz power amp settings */
-+#define SSB_SROM8_5GH_PA_1            0x1A
-+#define SSB_SROM8_5GH_PA_2            0x1C
-+
-+/* TODO: Make it deprecated */
- #define SSB_SPROM8_MAXP_BG            0x00C0  /* Max Power 2GHz in path 1 */
- #define  SSB_SPROM8_MAXP_BG_MASK      0x00FF  /* Mask for Max Power 2GHz */
- #define  SSB_SPROM8_ITSSI_BG          0xFF00  /* Mask for path 1 itssi_bg */
-@@ -456,12 +549,63 @@
- #define SSB_SPROM8_PA1HIB0            0x00D8  /* 5.8GHz power amp settings */
- #define SSB_SPROM8_PA1HIB1            0x00DA
- #define SSB_SPROM8_PA1HIB2            0x00DC
-+
- #define SSB_SPROM8_CCK2GPO            0x0140  /* CCK power offset */
- #define SSB_SPROM8_OFDM2GPO           0x0142  /* 2.4GHz OFDM power offset */
- #define SSB_SPROM8_OFDM5GPO           0x0146  /* 5.3GHz OFDM power offset */
- #define SSB_SPROM8_OFDM5GLPO          0x014A  /* 5.2GHz OFDM power offset */
- #define SSB_SPROM8_OFDM5GHPO          0x014E  /* 5.8GHz OFDM power offset */
-+#define SSB_SPROM8_2G_MCSPO           0x0152
-+#define SSB_SPROM8_5G_MCSPO           0x0162
-+#define SSB_SPROM8_5GL_MCSPO          0x0172
-+#define SSB_SPROM8_5GH_MCSPO          0x0182
-+
-+#define SSB_SPROM8_CDDPO              0x0192
-+#define SSB_SPROM8_STBCPO             0x0194
-+#define SSB_SPROM8_BW40PO             0x0196
-+#define SSB_SPROM8_BWDUPPO            0x0198
-+
-+/* Values for boardflags_lo read from SPROM */
-+#define SSB_BFL_BTCOEXIST             0x0001  /* implements Bluetooth coexistance */
-+#define SSB_BFL_PACTRL                        0x0002  /* GPIO 9 controlling the PA */
-+#define SSB_BFL_AIRLINEMODE           0x0004  /* implements GPIO 13 radio disable indication */
-+#define SSB_BFL_RSSI                  0x0008  /* software calculates nrssi slope. */
-+#define SSB_BFL_ENETSPI                       0x0010  /* has ephy roboswitch spi */
-+#define SSB_BFL_XTAL_NOSLOW           0x0020  /* no slow clock available */
-+#define SSB_BFL_CCKHIPWR              0x0040  /* can do high power CCK transmission */
-+#define SSB_BFL_ENETADM                       0x0080  /* has ADMtek switch */
-+#define SSB_BFL_ENETVLAN              0x0100  /* can do vlan */
-+#define SSB_BFL_AFTERBURNER           0x0200  /* supports Afterburner mode */
-+#define SSB_BFL_NOPCI                 0x0400  /* board leaves PCI floating */
-+#define SSB_BFL_FEM                   0x0800  /* supports the Front End Module */
-+#define SSB_BFL_EXTLNA                        0x1000  /* has an external LNA */
-+#define SSB_BFL_HGPA                  0x2000  /* had high gain PA */
-+#define SSB_BFL_BTCMOD                        0x4000  /* BFL_BTCOEXIST is given in alternate GPIOs */
-+#define SSB_BFL_ALTIQ                 0x8000  /* alternate I/Q settings */
-+
-+/* Values for boardflags_hi read from SPROM */
-+#define SSB_BFH_NOPA                  0x0001  /* has no PA */
-+#define SSB_BFH_RSSIINV                       0x0002  /* RSSI uses positive slope (not TSSI) */
-+#define SSB_BFH_PAREF                 0x0004  /* uses the PARef LDO */
-+#define SSB_BFH_3TSWITCH              0x0008  /* uses a triple throw switch shared with bluetooth */
-+#define SSB_BFH_PHASESHIFT            0x0010  /* can support phase shifter */
-+#define SSB_BFH_BUCKBOOST             0x0020  /* has buck/booster */
-+#define SSB_BFH_FEM_BT                        0x0040  /* has FEM and switch to share antenna with bluetooth */
-+
-+/* Values for boardflags2_lo read from SPROM */
-+#define SSB_BFL2_RXBB_INT_REG_DIS     0x0001  /* external RX BB regulator present */
-+#define SSB_BFL2_APLL_WAR             0x0002  /* alternative A-band PLL settings implemented */
-+#define SSB_BFL2_TXPWRCTRL_EN                 0x0004  /* permits enabling TX Power Control */
-+#define SSB_BFL2_2X4_DIV              0x0008  /* 2x4 diversity switch */
-+#define SSB_BFL2_5G_PWRGAIN           0x0010  /* supports 5G band power gain */
-+#define SSB_BFL2_PCIEWAR_OVR          0x0020  /* overrides ASPM and Clkreq settings */
-+#define SSB_BFL2_CAESERS_BRD          0x0040  /* is Caesers board (unused) */
-+#define SSB_BFL2_BTC3WIRE             0x0080  /* used 3-wire bluetooth coexist */
-+#define SSB_BFL2_SKWRKFEM_BRD         0x0100  /* 4321mcm93 uses Skyworks FEM */
-+#define SSB_BFL2_SPUR_WAR             0x0200  /* has a workaround for clock-harmonic spurs */
-+#define SSB_BFL2_GPLL_WAR             0x0400  /* altenative G-band PLL settings implemented */
-+
- /* Values for SSB_SPROM1_BINF_CCODE */
- enum {
-       SSB_SPROM1CCODE_WORLD = 0,
diff --git a/target/linux/generic/patches-2.6.39/025-bcma_backport.patch b/target/linux/generic/patches-2.6.39/025-bcma_backport.patch
deleted file mode 100644 (file)
index 937fc2f..0000000
+++ /dev/null
@@ -1,5224 +0,0 @@
---- /dev/null
-+++ b/Documentation/ABI/testing/sysfs-bus-bcma
-@@ -0,0 +1,31 @@
-+What:         /sys/bus/bcma/devices/.../manuf
-+Date:         May 2011
-+KernelVersion:        2.6.40
-+Contact:      Rafał Miłecki <zajec5@gmail.com>
-+Description:
-+              Each BCMA core has it's manufacturer id. See
-+              include/linux/bcma/bcma.h for possible values.
-+
-+What:         /sys/bus/bcma/devices/.../id
-+Date:         May 2011
-+KernelVersion:        2.6.40
-+Contact:      Rafał Miłecki <zajec5@gmail.com>
-+Description:
-+              There are a few types of BCMA cores, they can be identified by
-+              id field.
-+
-+What:         /sys/bus/bcma/devices/.../rev
-+Date:         May 2011
-+KernelVersion:        2.6.40
-+Contact:      Rafał Miłecki <zajec5@gmail.com>
-+Description:
-+              BCMA cores of the same type can still slightly differ depending
-+              on their revision. Use it for detailed programming.
-+
-+What:         /sys/bus/bcma/devices/.../class
-+Date:         May 2011
-+KernelVersion:        2.6.40
-+Contact:      Rafał Miłecki <zajec5@gmail.com>
-+Description:
-+              Each BCMA core is identified by few fields, including class it
-+              belongs to. See include/linux/bcma/bcma.h for possible values.
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -5832,6 +5832,13 @@ S:      Maintained
- F:    drivers/ssb/
- F:    include/linux/ssb/
-+BROADCOM SPECIFIC AMBA DRIVER (BCMA)
-+M:    Rafał Miłecki <zajec5@gmail.com>
-+L:    linux-wireless@vger.kernel.org
-+S:    Maintained
-+F:    drivers/bcma/
-+F:    include/linux/bcma/
-+
- SONY VAIO CONTROL DEVICE DRIVER
- M:    Mattia Dongili <malattia@linux.it>
- L:    platform-driver-x86@vger.kernel.org
---- a/drivers/Kconfig
-+++ b/drivers/Kconfig
-@@ -68,6 +68,8 @@ source "drivers/watchdog/Kconfig"
- source "drivers/ssb/Kconfig"
-+source "drivers/bcma/Kconfig"
-+
- source "drivers/mfd/Kconfig"
- source "drivers/regulator/Kconfig"
---- a/drivers/Makefile
-+++ b/drivers/Makefile
-@@ -110,6 +110,7 @@ obj-$(CONFIG_HID)          += hid/
- obj-$(CONFIG_PPC_PS3)         += ps3/
- obj-$(CONFIG_OF)              += of/
- obj-$(CONFIG_SSB)             += ssb/
-+obj-$(CONFIG_BCMA)            += bcma/
- obj-$(CONFIG_VHOST_NET)               += vhost/
- obj-$(CONFIG_VLYNQ)           += vlynq/
- obj-$(CONFIG_STAGING)         += staging/
---- /dev/null
-+++ b/drivers/bcma/Kconfig
-@@ -0,0 +1,57 @@
-+config BCMA_POSSIBLE
-+      bool
-+      depends on HAS_IOMEM && HAS_DMA
-+      default y
-+
-+menu "Broadcom specific AMBA"
-+      depends on BCMA_POSSIBLE
-+
-+config BCMA
-+      tristate "BCMA support"
-+      depends on BCMA_POSSIBLE
-+      help
-+        Bus driver for Broadcom specific Advanced Microcontroller Bus
-+        Architecture.
-+
-+# Support for Block-I/O. SELECT this from the driver that needs it.
-+config BCMA_BLOCKIO
-+      bool
-+      depends on BCMA
-+
-+config BCMA_HOST_PCI_POSSIBLE
-+      bool
-+      depends on BCMA && PCI = y
-+      default y
-+
-+config BCMA_HOST_PCI
-+      bool "Support for BCMA on PCI-host bus"
-+      depends on BCMA_HOST_PCI_POSSIBLE
-+
-+config BCMA_DRIVER_PCI_HOSTMODE
-+      bool "Driver for PCI core working in hostmode"
-+      depends on BCMA && MIPS && BCMA_HOST_PCI
-+      help
-+        PCI core hostmode operation (external PCI bus).
-+
-+config BCMA_HOST_SOC
-+      bool
-+      depends on BCMA_DRIVER_MIPS
-+
-+config BCMA_DRIVER_MIPS
-+      bool "BCMA Broadcom MIPS core driver"
-+      depends on BCMA && MIPS
-+      help
-+        Driver for the Broadcom MIPS core attached to Broadcom specific
-+        Advanced Microcontroller Bus.
-+
-+        If unsure, say N
-+
-+config BCMA_DEBUG
-+      bool "BCMA debugging"
-+      depends on BCMA
-+      help
-+        This turns on additional debugging messages.
-+
-+        If unsure, say N
-+
-+endmenu
---- /dev/null
-+++ b/drivers/bcma/Makefile
-@@ -0,0 +1,10 @@
-+bcma-y                                        += main.o scan.o core.o sprom.o
-+bcma-y                                        += driver_chipcommon.o driver_chipcommon_pmu.o
-+bcma-y                                        += driver_pci.o
-+bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE)       += driver_pci_host.o
-+bcma-$(CONFIG_BCMA_DRIVER_MIPS)               += driver_mips.o
-+bcma-$(CONFIG_BCMA_HOST_PCI)          += host_pci.o
-+bcma-$(CONFIG_BCMA_HOST_SOC)          += host_soc.o
-+obj-$(CONFIG_BCMA)                    += bcma.o
-+
-+ccflags-$(CONFIG_BCMA_DEBUG)          := -DDEBUG
---- /dev/null
-+++ b/drivers/bcma/README
-@@ -0,0 +1,19 @@
-+Broadcom introduced new bus as replacement for older SSB. It is based on AMBA,
-+however from programming point of view there is nothing AMBA specific we use.
-+
-+Standard AMBA drivers are platform specific, have hardcoded addresses and use
-+AMBA standard fields like CID and PID.
-+
-+In case of Broadcom's cards every device consists of:
-+1) Broadcom specific AMBA device. It is put on AMBA bus, but can not be treated
-+   as standard AMBA device. Reading it's CID or PID can cause machine lockup.
-+2) AMBA standard devices called ports or wrappers. They have CIDs (AMBA_CID)
-+   and PIDs (0x103BB369), but we do not use that info for anything. One of that
-+   devices is used for managing Broadcom specific core.
-+
-+Addresses of AMBA devices are not hardcoded in driver and have to be read from
-+EPROM.
-+
-+In this situation we decided to introduce separated bus. It can contain up to
-+16 devices identified by Broadcom specific fields: manufacturer, id, revision
-+and class.
---- /dev/null
-+++ b/drivers/bcma/TODO
-@@ -0,0 +1,3 @@
-+- Interrupts
-+- Defines for PCI core driver
-+- Create kernel Documentation (use info from README)
---- /dev/null
-+++ b/drivers/bcma/bcma_private.h
-@@ -0,0 +1,59 @@
-+#ifndef LINUX_BCMA_PRIVATE_H_
-+#define LINUX_BCMA_PRIVATE_H_
-+
-+#ifndef pr_fmt
-+#define pr_fmt(fmt)           KBUILD_MODNAME ": " fmt
-+#endif
-+
-+#include <linux/bcma/bcma.h>
-+#include <linux/delay.h>
-+
-+#define BCMA_CORE_SIZE                0x1000
-+
-+struct bcma_bus;
-+
-+/* main.c */
-+int __devinit bcma_bus_register(struct bcma_bus *bus);
-+void bcma_bus_unregister(struct bcma_bus *bus);
-+int __init bcma_bus_early_register(struct bcma_bus *bus,
-+                                 struct bcma_device *core_cc,
-+                                 struct bcma_device *core_mips);
-+#ifdef CONFIG_PM
-+int bcma_bus_suspend(struct bcma_bus *bus);
-+int bcma_bus_resume(struct bcma_bus *bus);
-+#endif
-+
-+/* scan.c */
-+int bcma_bus_scan(struct bcma_bus *bus);
-+int __init bcma_bus_scan_early(struct bcma_bus *bus,
-+                             struct bcma_device_id *match,
-+                             struct bcma_device *core);
-+void bcma_init_bus(struct bcma_bus *bus);
-+
-+/* sprom.c */
-+int bcma_sprom_get(struct bcma_bus *bus);
-+
-+/* driver_chipcommon.c */
-+#ifdef CONFIG_BCMA_DRIVER_MIPS
-+void bcma_chipco_serial_init(struct bcma_drv_cc *cc);
-+#endif /* CONFIG_BCMA_DRIVER_MIPS */
-+
-+/* driver_chipcommon_pmu.c */
-+u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc);
-+u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc);
-+
-+#ifdef CONFIG_BCMA_HOST_PCI
-+/* host_pci.c */
-+extern int __init bcma_host_pci_init(void);
-+extern void __exit bcma_host_pci_exit(void);
-+#endif /* CONFIG_BCMA_HOST_PCI */
-+
-+/* driver_pci.c */
-+u32 bcma_pcie_read(struct bcma_drv_pci *pc, u32 address);
-+
-+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
-+bool __devinit bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc);
-+void __devinit bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc);
-+#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
-+
-+#endif
---- /dev/null
-+++ b/drivers/bcma/core.c
-@@ -0,0 +1,127 @@
-+/*
-+ * Broadcom specific AMBA
-+ * Core ops
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/bcma/bcma.h>
-+
-+bool bcma_core_is_enabled(struct bcma_device *core)
-+{
-+      if ((bcma_aread32(core, BCMA_IOCTL) & (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC))
-+          != BCMA_IOCTL_CLK)
-+              return false;
-+      if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
-+              return false;
-+      return true;
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_is_enabled);
-+
-+void bcma_core_disable(struct bcma_device *core, u32 flags)
-+{
-+      if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
-+              return;
-+
-+      bcma_awrite32(core, BCMA_IOCTL, flags);
-+      bcma_aread32(core, BCMA_IOCTL);
-+      udelay(10);
-+
-+      bcma_awrite32(core, BCMA_RESET_CTL, BCMA_RESET_CTL_RESET);
-+      bcma_aread32(core, BCMA_RESET_CTL);
-+      udelay(1);
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_disable);
-+
-+int bcma_core_enable(struct bcma_device *core, u32 flags)
-+{
-+      bcma_core_disable(core, flags);
-+
-+      bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC | flags));
-+      bcma_aread32(core, BCMA_IOCTL);
-+
-+      bcma_awrite32(core, BCMA_RESET_CTL, 0);
-+      udelay(1);
-+
-+      bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | flags));
-+      bcma_aread32(core, BCMA_IOCTL);
-+      udelay(1);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_enable);
-+
-+void bcma_core_set_clockmode(struct bcma_device *core,
-+                           enum bcma_clkmode clkmode)
-+{
-+      u16 i;
-+
-+      WARN_ON(core->id.id != BCMA_CORE_CHIPCOMMON &&
-+              core->id.id != BCMA_CORE_PCIE &&
-+              core->id.id != BCMA_CORE_80211);
-+
-+      switch (clkmode) {
-+      case BCMA_CLKMODE_FAST:
-+              bcma_set32(core, BCMA_CLKCTLST, BCMA_CLKCTLST_FORCEHT);
-+              udelay(64);
-+              for (i = 0; i < 1500; i++) {
-+                      if (bcma_read32(core, BCMA_CLKCTLST) &
-+                          BCMA_CLKCTLST_HAVEHT) {
-+                              i = 0;
-+                              break;
-+                      }
-+                      udelay(10);
-+              }
-+              if (i)
-+                      pr_err("HT force timeout\n");
-+              break;
-+      case BCMA_CLKMODE_DYNAMIC:
-+              bcma_set32(core, BCMA_CLKCTLST, ~BCMA_CLKCTLST_FORCEHT);
-+              break;
-+      }
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_set_clockmode);
-+
-+void bcma_core_pll_ctl(struct bcma_device *core, u32 req, u32 status, bool on)
-+{
-+      u16 i;
-+
-+      WARN_ON(req & ~BCMA_CLKCTLST_EXTRESREQ);
-+      WARN_ON(status & ~BCMA_CLKCTLST_EXTRESST);
-+
-+      if (on) {
-+              bcma_set32(core, BCMA_CLKCTLST, req);
-+              for (i = 0; i < 10000; i++) {
-+                      if ((bcma_read32(core, BCMA_CLKCTLST) & status) ==
-+                          status) {
-+                              i = 0;
-+                              break;
-+                      }
-+                      udelay(10);
-+              }
-+              if (i)
-+                      pr_err("PLL enable timeout\n");
-+      } else {
-+              pr_warn("Disabling PLL not supported yet!\n");
-+      }
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_pll_ctl);
-+
-+u32 bcma_core_dma_translation(struct bcma_device *core)
-+{
-+      switch (core->bus->hosttype) {
-+      case BCMA_HOSTTYPE_SOC:
-+              return 0;
-+      case BCMA_HOSTTYPE_PCI:
-+              if (bcma_aread32(core, BCMA_IOST) & BCMA_IOST_DMA64)
-+                      return BCMA_DMA_TRANSLATION_DMA64_CMT;
-+              else
-+                      return BCMA_DMA_TRANSLATION_DMA32_CMT;
-+      default:
-+              pr_err("DMA translation unknown for host %d\n",
-+                     core->bus->hosttype);
-+      }
-+      return BCMA_DMA_TRANSLATION_NONE;
-+}
-+EXPORT_SYMBOL(bcma_core_dma_translation);
---- /dev/null
-+++ b/drivers/bcma/driver_chipcommon.c
-@@ -0,0 +1,156 @@
-+/*
-+ * Broadcom specific AMBA
-+ * ChipCommon core driver
-+ *
-+ * Copyright 2005, Broadcom Corporation
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/bcma/bcma.h>
-+
-+static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset,
-+                                       u32 mask, u32 value)
-+{
-+      value &= mask;
-+      value |= bcma_cc_read32(cc, offset) & ~mask;
-+      bcma_cc_write32(cc, offset, value);
-+
-+      return value;
-+}
-+
-+void bcma_core_chipcommon_init(struct bcma_drv_cc *cc)
-+{
-+      u32 leddc_on = 10;
-+      u32 leddc_off = 90;
-+
-+      if (cc->setup_done)
-+              return;
-+
-+      if (cc->core->id.rev >= 11)
-+              cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT);
-+      cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP);
-+      if (cc->core->id.rev >= 35)
-+              cc->capabilities_ext = bcma_cc_read32(cc, BCMA_CC_CAP_EXT);
-+
-+      if (cc->core->id.rev >= 20) {
-+              bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0);
-+              bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0);
-+      }
-+
-+      if (cc->capabilities & BCMA_CC_CAP_PMU)
-+              bcma_pmu_init(cc);
-+      if (cc->capabilities & BCMA_CC_CAP_PCTL)
-+              pr_err("Power control not implemented!\n");
-+
-+      if (cc->core->id.rev >= 16) {
-+              if (cc->core->bus->sprom.leddc_on_time &&
-+                  cc->core->bus->sprom.leddc_off_time) {
-+                      leddc_on = cc->core->bus->sprom.leddc_on_time;
-+                      leddc_off = cc->core->bus->sprom.leddc_off_time;
-+              }
-+              bcma_cc_write32(cc, BCMA_CC_GPIOTIMER,
-+                      ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) |
-+                       (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT)));
-+      }
-+
-+      cc->setup_done = true;
-+}
-+
-+/* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */
-+void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks)
-+{
-+      /* instant NMI */
-+      bcma_cc_write32(cc, BCMA_CC_WATCHDOG, ticks);
-+}
-+
-+void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value)
-+{
-+      bcma_cc_write32_masked(cc, BCMA_CC_IRQMASK, mask, value);
-+}
-+
-+u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask)
-+{
-+      return bcma_cc_read32(cc, BCMA_CC_IRQSTAT) & mask;
-+}
-+
-+u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask)
-+{
-+      return bcma_cc_read32(cc, BCMA_CC_GPIOIN) & mask;
-+}
-+
-+u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value)
-+{
-+      return bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUT, mask, value);
-+}
-+
-+u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value)
-+{
-+      return bcma_cc_write32_masked(cc, BCMA_CC_GPIOOUTEN, mask, value);
-+}
-+
-+u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value)
-+{
-+      return bcma_cc_write32_masked(cc, BCMA_CC_GPIOCTL, mask, value);
-+}
-+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_control);
-+
-+u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value)
-+{
-+      return bcma_cc_write32_masked(cc, BCMA_CC_GPIOIRQ, mask, value);
-+}
-+
-+u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value)
-+{
-+      return bcma_cc_write32_masked(cc, BCMA_CC_GPIOPOL, mask, value);
-+}
-+
-+#ifdef CONFIG_BCMA_DRIVER_MIPS
-+void bcma_chipco_serial_init(struct bcma_drv_cc *cc)
-+{
-+      unsigned int irq;
-+      u32 baud_base;
-+      u32 i;
-+      unsigned int ccrev = cc->core->id.rev;
-+      struct bcma_serial_port *ports = cc->serial_ports;
-+
-+      if (ccrev >= 11 && ccrev != 15) {
-+              /* Fixed ALP clock */
-+              baud_base = bcma_pmu_alp_clock(cc);
-+              if (ccrev >= 21) {
-+                      /* Turn off UART clock before switching clocksource. */
-+                      bcma_cc_write32(cc, BCMA_CC_CORECTL,
-+                                     bcma_cc_read32(cc, BCMA_CC_CORECTL)
-+                                     & ~BCMA_CC_CORECTL_UARTCLKEN);
-+              }
-+              /* Set the override bit so we don't divide it */
-+              bcma_cc_write32(cc, BCMA_CC_CORECTL,
-+                             bcma_cc_read32(cc, BCMA_CC_CORECTL)
-+                             | BCMA_CC_CORECTL_UARTCLK0);
-+              if (ccrev >= 21) {
-+                      /* Re-enable the UART clock. */
-+                      bcma_cc_write32(cc, BCMA_CC_CORECTL,
-+                                     bcma_cc_read32(cc, BCMA_CC_CORECTL)
-+                                     | BCMA_CC_CORECTL_UARTCLKEN);
-+              }
-+      } else {
-+              pr_err("serial not supported on this device ccrev: 0x%x\n",
-+                     ccrev);
-+              return;
-+      }
-+
-+      irq = bcma_core_mips_irq(cc->core);
-+
-+      /* Determine the registers of the UARTs */
-+      cc->nr_serial_ports = (cc->capabilities & BCMA_CC_CAP_NRUART);
-+      for (i = 0; i < cc->nr_serial_ports; i++) {
-+              ports[i].regs = cc->core->io_addr + BCMA_CC_UART0_DATA +
-+                              (i * 256);
-+              ports[i].irq = irq;
-+              ports[i].baud_base = baud_base;
-+              ports[i].reg_shift = 0;
-+      }
-+}
-+#endif /* CONFIG_BCMA_DRIVER_MIPS */
---- /dev/null
-+++ b/drivers/bcma/driver_chipcommon_pmu.c
-@@ -0,0 +1,310 @@
-+/*
-+ * Broadcom specific AMBA
-+ * ChipCommon Power Management Unit driver
-+ *
-+ * Copyright 2009, Michael Buesch <m@bues.ch>
-+ * Copyright 2007, Broadcom Corporation
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/bcma/bcma.h>
-+
-+static u32 bcma_chipco_pll_read(struct bcma_drv_cc *cc, u32 offset)
-+{
-+      bcma_cc_write32(cc, BCMA_CC_PLLCTL_ADDR, offset);
-+      bcma_cc_read32(cc, BCMA_CC_PLLCTL_ADDR);
-+      return bcma_cc_read32(cc, BCMA_CC_PLLCTL_DATA);
-+}
-+
-+void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, u32 value)
-+{
-+      bcma_cc_write32(cc, BCMA_CC_PLLCTL_ADDR, offset);
-+      bcma_cc_read32(cc, BCMA_CC_PLLCTL_ADDR);
-+      bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, value);
-+}
-+EXPORT_SYMBOL_GPL(bcma_chipco_pll_write);
-+
-+void bcma_chipco_pll_maskset(struct bcma_drv_cc *cc, u32 offset, u32 mask,
-+                           u32 set)
-+{
-+      bcma_cc_write32(cc, BCMA_CC_PLLCTL_ADDR, offset);
-+      bcma_cc_read32(cc, BCMA_CC_PLLCTL_ADDR);
-+      bcma_cc_maskset32(cc, BCMA_CC_PLLCTL_DATA, mask, set);
-+}
-+EXPORT_SYMBOL_GPL(bcma_chipco_pll_maskset);
-+
-+void bcma_chipco_chipctl_maskset(struct bcma_drv_cc *cc,
-+                               u32 offset, u32 mask, u32 set)
-+{
-+      bcma_cc_write32(cc, BCMA_CC_CHIPCTL_ADDR, offset);
-+      bcma_cc_read32(cc, BCMA_CC_CHIPCTL_ADDR);
-+      bcma_cc_maskset32(cc, BCMA_CC_CHIPCTL_DATA, mask, set);
-+}
-+EXPORT_SYMBOL_GPL(bcma_chipco_chipctl_maskset);
-+
-+void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc, u32 offset, u32 mask,
-+                              u32 set)
-+{
-+      bcma_cc_write32(cc, BCMA_CC_REGCTL_ADDR, offset);
-+      bcma_cc_read32(cc, BCMA_CC_REGCTL_ADDR);
-+      bcma_cc_maskset32(cc, BCMA_CC_REGCTL_DATA, mask, set);
-+}
-+EXPORT_SYMBOL_GPL(bcma_chipco_regctl_maskset);
-+
-+static void bcma_pmu_pll_init(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      switch (bus->chipinfo.id) {
-+      case 0x4313:
-+      case 0x4331:
-+      case 43224:
-+      case 43225:
-+              break;
-+      default:
-+              pr_err("PLL init unknown for device 0x%04X\n",
-+                      bus->chipinfo.id);
-+      }
-+}
-+
-+static void bcma_pmu_resources_init(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+      u32 min_msk = 0, max_msk = 0;
-+
-+      switch (bus->chipinfo.id) {
-+      case 0x4313:
-+              min_msk = 0x200D;
-+              max_msk = 0xFFFF;
-+              break;
-+      case 0x4331:
-+      case 43224:
-+      case 43225:
-+              break;
-+      default:
-+              pr_err("PMU resource config unknown for device 0x%04X\n",
-+                      bus->chipinfo.id);
-+      }
-+
-+      /* Set the resource masks. */
-+      if (min_msk)
-+              bcma_cc_write32(cc, BCMA_CC_PMU_MINRES_MSK, min_msk);
-+      if (max_msk)
-+              bcma_cc_write32(cc, BCMA_CC_PMU_MAXRES_MSK, max_msk);
-+}
-+
-+void bcma_pmu_swreg_init(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      switch (bus->chipinfo.id) {
-+      case 0x4313:
-+      case 0x4331:
-+      case 43224:
-+      case 43225:
-+              break;
-+      default:
-+              pr_err("PMU switch/regulators init unknown for device "
-+                      "0x%04X\n", bus->chipinfo.id);
-+      }
-+}
-+
-+/* Disable to allow reading SPROM. Don't know the adventages of enabling it. */
-+void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+      u32 val;
-+
-+      val = bcma_cc_read32(cc, BCMA_CC_CHIPCTL);
-+      if (enable) {
-+              val |= BCMA_CHIPCTL_4331_EXTPA_EN;
-+              if (bus->chipinfo.pkg == 9 || bus->chipinfo.pkg == 11)
-+                      val |= BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5;
-+      } else {
-+              val &= ~BCMA_CHIPCTL_4331_EXTPA_EN;
-+              val &= ~BCMA_CHIPCTL_4331_EXTPA_ON_GPIO2_5;
-+      }
-+      bcma_cc_write32(cc, BCMA_CC_CHIPCTL, val);
-+}
-+
-+void bcma_pmu_workarounds(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      switch (bus->chipinfo.id) {
-+      case 0x4313:
-+              bcma_chipco_chipctl_maskset(cc, 0, ~0, 0x7);
-+              break;
-+      case 0x4331:
-+              /* BCM4331 workaround is SPROM-related, we put it in sprom.c */
-+              break;
-+      case 43224:
-+              if (bus->chipinfo.rev == 0) {
-+                      pr_err("Workarounds for 43224 rev 0 not fully "
-+                              "implemented\n");
-+                      bcma_chipco_chipctl_maskset(cc, 0, ~0, 0x00F000F0);
-+              } else {
-+                      bcma_chipco_chipctl_maskset(cc, 0, ~0, 0xF0);
-+              }
-+              break;
-+      case 43225:
-+              break;
-+      default:
-+              pr_err("Workarounds unknown for device 0x%04X\n",
-+                      bus->chipinfo.id);
-+      }
-+}
-+
-+void bcma_pmu_init(struct bcma_drv_cc *cc)
-+{
-+      u32 pmucap;
-+
-+      pmucap = bcma_cc_read32(cc, BCMA_CC_PMU_CAP);
-+      cc->pmu.rev = (pmucap & BCMA_CC_PMU_CAP_REVISION);
-+
-+      pr_debug("Found rev %u PMU (capabilities 0x%08X)\n", cc->pmu.rev,
-+               pmucap);
-+
-+      if (cc->pmu.rev == 1)
-+              bcma_cc_mask32(cc, BCMA_CC_PMU_CTL,
-+                            ~BCMA_CC_PMU_CTL_NOILPONW);
-+      else
-+              bcma_cc_set32(cc, BCMA_CC_PMU_CTL,
-+                           BCMA_CC_PMU_CTL_NOILPONW);
-+
-+      if (cc->core->id.id == 0x4329 && cc->core->id.rev == 2)
-+              pr_err("Fix for 4329b0 bad LPOM state not implemented!\n");
-+
-+      bcma_pmu_pll_init(cc);
-+      bcma_pmu_resources_init(cc);
-+      bcma_pmu_swreg_init(cc);
-+      bcma_pmu_workarounds(cc);
-+}
-+
-+u32 bcma_pmu_alp_clock(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      switch (bus->chipinfo.id) {
-+      case 0x4716:
-+      case 0x4748:
-+      case 47162:
-+      case 0x4313:
-+      case 0x5357:
-+      case 0x4749:
-+      case 53572:
-+              /* always 20Mhz */
-+              return 20000 * 1000;
-+      case 0x5356:
-+      case 0x5300:
-+              /* always 25Mhz */
-+              return 25000 * 1000;
-+      default:
-+              pr_warn("No ALP clock specified for %04X device, "
-+                      "pmu rev. %d, using default %d Hz\n",
-+                      bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK);
-+      }
-+      return BCMA_CC_PMU_ALP_CLOCK;
-+}
-+
-+/* Find the output of the "m" pll divider given pll controls that start with
-+ * pllreg "pll0" i.e. 12 for main 6 for phy, 0 for misc.
-+ */
-+static u32 bcma_pmu_clock(struct bcma_drv_cc *cc, u32 pll0, u32 m)
-+{
-+      u32 tmp, div, ndiv, p1, p2, fc;
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      BUG_ON((pll0 & 3) || (pll0 > BCMA_CC_PMU4716_MAINPLL_PLL0));
-+
-+      BUG_ON(!m || m > 4);
-+
-+      if (bus->chipinfo.id == 0x5357 || bus->chipinfo.id == 0x4749) {
-+              /* Detect failure in clock setting */
-+              tmp = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT);
-+              if (tmp & 0x40000)
-+                      return 133 * 1000000;
-+      }
-+
-+      tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_P1P2_OFF);
-+      p1 = (tmp & BCMA_CC_PPL_P1_MASK) >> BCMA_CC_PPL_P1_SHIFT;
-+      p2 = (tmp & BCMA_CC_PPL_P2_MASK) >> BCMA_CC_PPL_P2_SHIFT;
-+
-+      tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_M14_OFF);
-+      div = (tmp >> ((m - 1) * BCMA_CC_PPL_MDIV_WIDTH)) &
-+              BCMA_CC_PPL_MDIV_MASK;
-+
-+      tmp = bcma_chipco_pll_read(cc, pll0 + BCMA_CC_PPL_NM5_OFF);
-+      ndiv = (tmp & BCMA_CC_PPL_NDIV_MASK) >> BCMA_CC_PPL_NDIV_SHIFT;
-+
-+      /* Do calculation in Mhz */
-+      fc = bcma_pmu_alp_clock(cc) / 1000000;
-+      fc = (p1 * ndiv * fc) / p2;
-+
-+      /* Return clock in Hertz */
-+      return (fc / div) * 1000000;
-+}
-+
-+/* query bus clock frequency for PMU-enabled chipcommon */
-+u32 bcma_pmu_get_clockcontrol(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      switch (bus->chipinfo.id) {
-+      case 0x4716:
-+      case 0x4748:
-+      case 47162:
-+              return bcma_pmu_clock(cc, BCMA_CC_PMU4716_MAINPLL_PLL0,
-+                                    BCMA_CC_PMU5_MAINPLL_SSB);
-+      case 0x5356:
-+              return bcma_pmu_clock(cc, BCMA_CC_PMU5356_MAINPLL_PLL0,
-+                                    BCMA_CC_PMU5_MAINPLL_SSB);
-+      case 0x5357:
-+      case 0x4749:
-+              return bcma_pmu_clock(cc, BCMA_CC_PMU5357_MAINPLL_PLL0,
-+                                    BCMA_CC_PMU5_MAINPLL_SSB);
-+      case 0x5300:
-+              return bcma_pmu_clock(cc, BCMA_CC_PMU4706_MAINPLL_PLL0,
-+                                    BCMA_CC_PMU5_MAINPLL_SSB);
-+      case 53572:
-+              return 75000000;
-+      default:
-+              pr_warn("No backplane clock specified for %04X device, "
-+                      "pmu rev. %d, using default %d Hz\n",
-+                      bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_HT_CLOCK);
-+      }
-+      return BCMA_CC_PMU_HT_CLOCK;
-+}
-+
-+/* query cpu clock frequency for PMU-enabled chipcommon */
-+u32 bcma_pmu_get_clockcpu(struct bcma_drv_cc *cc)
-+{
-+      struct bcma_bus *bus = cc->core->bus;
-+
-+      if (bus->chipinfo.id == 53572)
-+              return 300000000;
-+
-+      if (cc->pmu.rev >= 5) {
-+              u32 pll;
-+              switch (bus->chipinfo.id) {
-+              case 0x5356:
-+                      pll = BCMA_CC_PMU5356_MAINPLL_PLL0;
-+                      break;
-+              case 0x5357:
-+              case 0x4749:
-+                      pll = BCMA_CC_PMU5357_MAINPLL_PLL0;
-+                      break;
-+              default:
-+                      pll = BCMA_CC_PMU4716_MAINPLL_PLL0;
-+                      break;
-+              }
-+
-+              /* TODO: if (bus->chipinfo.id == 0x5300)
-+                return si_4706_pmu_clock(sih, osh, cc, PMU4706_MAINPLL_PLL0, PMU5_MAINPLL_CPU); */
-+              return bcma_pmu_clock(cc, pll, BCMA_CC_PMU5_MAINPLL_CPU);
-+      }
-+
-+      return bcma_pmu_get_clockcontrol(cc);
-+}
---- /dev/null
-+++ b/drivers/bcma/driver_mips.c
-@@ -0,0 +1,256 @@
-+/*
-+ * Broadcom specific AMBA
-+ * Broadcom MIPS32 74K core driver
-+ *
-+ * Copyright 2009, Broadcom Corporation
-+ * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
-+ * Copyright 2010, Bernhard Loos <bernhardloos@googlemail.com>
-+ * Copyright 2011, Hauke Mehrtens <hauke@hauke-m.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+
-+#include <linux/bcma/bcma.h>
-+
-+#include <linux/serial.h>
-+#include <linux/serial_core.h>
-+#include <linux/serial_reg.h>
-+#include <linux/time.h>
-+
-+/* The 47162a0 hangs when reading MIPS DMP registers registers */
-+static inline bool bcma_core_mips_bcm47162a0_quirk(struct bcma_device *dev)
-+{
-+      return dev->bus->chipinfo.id == 47162 && dev->bus->chipinfo.rev == 0 &&
-+             dev->id.id == BCMA_CORE_MIPS_74K;
-+}
-+
-+/* The 5357b0 hangs when reading USB20H DMP registers */
-+static inline bool bcma_core_mips_bcm5357b0_quirk(struct bcma_device *dev)
-+{
-+      return (dev->bus->chipinfo.id == 0x5357 ||
-+              dev->bus->chipinfo.id == 0x4749) &&
-+             dev->bus->chipinfo.pkg == 11 &&
-+             dev->id.id == BCMA_CORE_USB20_HOST;
-+}
-+
-+static inline u32 mips_read32(struct bcma_drv_mips *mcore,
-+                            u16 offset)
-+{
-+      return bcma_read32(mcore->core, offset);
-+}
-+
-+static inline void mips_write32(struct bcma_drv_mips *mcore,
-+                              u16 offset,
-+                              u32 value)
-+{
-+      bcma_write32(mcore->core, offset, value);
-+}
-+
-+static const u32 ipsflag_irq_mask[] = {
-+      0,
-+      BCMA_MIPS_IPSFLAG_IRQ1,
-+      BCMA_MIPS_IPSFLAG_IRQ2,
-+      BCMA_MIPS_IPSFLAG_IRQ3,
-+      BCMA_MIPS_IPSFLAG_IRQ4,
-+};
-+
-+static const u32 ipsflag_irq_shift[] = {
-+      0,
-+      BCMA_MIPS_IPSFLAG_IRQ1_SHIFT,
-+      BCMA_MIPS_IPSFLAG_IRQ2_SHIFT,
-+      BCMA_MIPS_IPSFLAG_IRQ3_SHIFT,
-+      BCMA_MIPS_IPSFLAG_IRQ4_SHIFT,
-+};
-+
-+static u32 bcma_core_mips_irqflag(struct bcma_device *dev)
-+{
-+      u32 flag;
-+
-+      if (bcma_core_mips_bcm47162a0_quirk(dev))
-+              return dev->core_index;
-+      if (bcma_core_mips_bcm5357b0_quirk(dev))
-+              return dev->core_index;
-+      flag = bcma_aread32(dev, BCMA_MIPS_OOBSELOUTA30);
-+
-+      return flag & 0x1F;
-+}
-+
-+/* Get the MIPS IRQ assignment for a specified device.
-+ * If unassigned, 0 is returned.
-+ */
-+unsigned int bcma_core_mips_irq(struct bcma_device *dev)
-+{
-+      struct bcma_device *mdev = dev->bus->drv_mips.core;
-+      u32 irqflag;
-+      unsigned int irq;
-+
-+      irqflag = bcma_core_mips_irqflag(dev);
-+
-+      for (irq = 1; irq <= 4; irq++)
-+              if (bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq)) &
-+                  (1 << irqflag))
-+                      return irq;
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(bcma_core_mips_irq);
-+
-+static void bcma_core_mips_set_irq(struct bcma_device *dev, unsigned int irq)
-+{
-+      unsigned int oldirq = bcma_core_mips_irq(dev);
-+      struct bcma_bus *bus = dev->bus;
-+      struct bcma_device *mdev = bus->drv_mips.core;
-+      u32 irqflag;
-+
-+      irqflag = bcma_core_mips_irqflag(dev);
-+      BUG_ON(oldirq == 6);
-+
-+      dev->irq = irq + 2;
-+
-+      /* clear the old irq */
-+      if (oldirq == 0)
-+              bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0),
-+                          bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)) &
-+                          ~(1 << irqflag));
-+      else
-+              bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq), 0);
-+
-+      /* assign the new one */
-+      if (irq == 0) {
-+              bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0),
-+                          bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)) |
-+                          (1 << irqflag));
-+      } else {
-+              u32 oldirqflag = bcma_read32(mdev,
-+                                           BCMA_MIPS_MIPS74K_INTMASK(irq));
-+              if (oldirqflag) {
-+                      struct bcma_device *core;
-+
-+                      /* backplane irq line is in use, find out who uses
-+                       * it and set user to irq 0
-+                       */
-+                      list_for_each_entry_reverse(core, &bus->cores, list) {
-+                              if ((1 << bcma_core_mips_irqflag(core)) ==
-+                                  oldirqflag) {
-+                                      bcma_core_mips_set_irq(core, 0);
-+                                      break;
-+                              }
-+                      }
-+              }
-+              bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq),
-+                           1 << irqflag);
-+      }
-+
-+      pr_info("set_irq: core 0x%04x, irq %d => %d\n",
-+              dev->id.id, oldirq + 2, irq + 2);
-+}
-+
-+static void bcma_core_mips_print_irq(struct bcma_device *dev, unsigned int irq)
-+{
-+      int i;
-+      static const char *irq_name[] = {"2(S)", "3", "4", "5", "6", "D", "I"};
-+      printk(KERN_INFO KBUILD_MODNAME ": core 0x%04x, irq :", dev->id.id);
-+      for (i = 0; i <= 6; i++)
-+              printk(" %s%s", irq_name[i], i == irq ? "*" : " ");
-+      printk("\n");
-+}
-+
-+static void bcma_core_mips_dump_irq(struct bcma_bus *bus)
-+{
-+      struct bcma_device *core;
-+
-+      list_for_each_entry_reverse(core, &bus->cores, list) {
-+              bcma_core_mips_print_irq(core, bcma_core_mips_irq(core));
-+      }
-+}
-+
-+u32 bcma_cpu_clock(struct bcma_drv_mips *mcore)
-+{
-+      struct bcma_bus *bus = mcore->core->bus;
-+
-+      if (bus->drv_cc.capabilities & BCMA_CC_CAP_PMU)
-+              return bcma_pmu_get_clockcpu(&bus->drv_cc);
-+
-+      pr_err("No PMU available, need this to get the cpu clock\n");
-+      return 0;
-+}
-+EXPORT_SYMBOL(bcma_cpu_clock);
-+
-+static void bcma_core_mips_flash_detect(struct bcma_drv_mips *mcore)
-+{
-+      struct bcma_bus *bus = mcore->core->bus;
-+
-+      switch (bus->drv_cc.capabilities & BCMA_CC_CAP_FLASHT) {
-+      case BCMA_CC_FLASHT_STSER:
-+      case BCMA_CC_FLASHT_ATSER:
-+              pr_err("Serial flash not supported.\n");
-+              break;
-+      case BCMA_CC_FLASHT_PARA:
-+              pr_info("found parallel flash.\n");
-+              bus->drv_cc.pflash.window = 0x1c000000;
-+              bus->drv_cc.pflash.window_size = 0x02000000;
-+
-+              if ((bcma_read32(bus->drv_cc.core, BCMA_CC_FLASH_CFG) &
-+                   BCMA_CC_FLASH_CFG_DS) == 0)
-+                      bus->drv_cc.pflash.buswidth = 1;
-+              else
-+                      bus->drv_cc.pflash.buswidth = 2;
-+              break;
-+      default:
-+              pr_err("flash not supported.\n");
-+      }
-+}
-+
-+void bcma_core_mips_init(struct bcma_drv_mips *mcore)
-+{
-+      struct bcma_bus *bus;
-+      struct bcma_device *core;
-+      bus = mcore->core->bus;
-+
-+      pr_info("Initializing MIPS core...\n");
-+
-+      if (!mcore->setup_done)
-+              mcore->assigned_irqs = 1;
-+
-+      /* Assign IRQs to all cores on the bus */
-+      list_for_each_entry_reverse(core, &bus->cores, list) {
-+              int mips_irq;
-+              if (core->irq)
-+                      continue;
-+
-+              mips_irq = bcma_core_mips_irq(core);
-+              if (mips_irq > 4)
-+                      core->irq = 0;
-+              else
-+                      core->irq = mips_irq + 2;
-+              if (core->irq > 5)
-+                      continue;
-+              switch (core->id.id) {
-+              case BCMA_CORE_PCI:
-+              case BCMA_CORE_PCIE:
-+              case BCMA_CORE_ETHERNET:
-+              case BCMA_CORE_ETHERNET_GBIT:
-+              case BCMA_CORE_MAC_GBIT:
-+              case BCMA_CORE_80211:
-+              case BCMA_CORE_USB20_HOST:
-+                      /* These devices get their own IRQ line if available,
-+                       * the rest goes on IRQ0
-+                       */
-+                      if (mcore->assigned_irqs <= 4)
-+                              bcma_core_mips_set_irq(core,
-+                                                     mcore->assigned_irqs++);
-+                      break;
-+              }
-+      }
-+      pr_info("IRQ reconfiguration done\n");
-+      bcma_core_mips_dump_irq(bus);
-+
-+      if (mcore->setup_done)
-+              return;
-+
-+      bcma_chipco_serial_init(&bus->drv_cc);
-+      bcma_core_mips_flash_detect(mcore);
-+      mcore->setup_done = true;
-+}
---- /dev/null
-+++ b/drivers/bcma/driver_pci.c
-@@ -0,0 +1,274 @@
-+/*
-+ * Broadcom specific AMBA
-+ * PCI Core
-+ *
-+ * Copyright 2005, 2011, Broadcom Corporation
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-+ * Copyright 2011, 2012, Hauke Mehrtens <hauke@hauke-m.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/bcma/bcma.h>
-+
-+/**************************************************
-+ * R/W ops.
-+ **************************************************/
-+
-+u32 bcma_pcie_read(struct bcma_drv_pci *pc, u32 address)
-+{
-+      pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_ADDR, address);
-+      pcicore_read32(pc, BCMA_CORE_PCI_PCIEIND_ADDR);
-+      return pcicore_read32(pc, BCMA_CORE_PCI_PCIEIND_DATA);
-+}
-+
-+static void bcma_pcie_write(struct bcma_drv_pci *pc, u32 address, u32 data)
-+{
-+      pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_ADDR, address);
-+      pcicore_read32(pc, BCMA_CORE_PCI_PCIEIND_ADDR);
-+      pcicore_write32(pc, BCMA_CORE_PCI_PCIEIND_DATA, data);
-+}
-+
-+static void bcma_pcie_mdio_set_phy(struct bcma_drv_pci *pc, u8 phy)
-+{
-+      u32 v;
-+      int i;
-+
-+      v = BCMA_CORE_PCI_MDIODATA_START;
-+      v |= BCMA_CORE_PCI_MDIODATA_WRITE;
-+      v |= (BCMA_CORE_PCI_MDIODATA_DEV_ADDR <<
-+            BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF);
-+      v |= (BCMA_CORE_PCI_MDIODATA_BLK_ADDR <<
-+            BCMA_CORE_PCI_MDIODATA_REGADDR_SHF);
-+      v |= BCMA_CORE_PCI_MDIODATA_TA;
-+      v |= (phy << 4);
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_DATA, v);
-+
-+      udelay(10);
-+      for (i = 0; i < 200; i++) {
-+              v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL);
-+              if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE)
-+                      break;
-+              msleep(1);
-+      }
-+}
-+
-+static u16 bcma_pcie_mdio_read(struct bcma_drv_pci *pc, u8 device, u8 address)
-+{
-+      int max_retries = 10;
-+      u16 ret = 0;
-+      u32 v;
-+      int i;
-+
-+      /* enable mdio access to SERDES */
-+      v = BCMA_CORE_PCI_MDIOCTL_PREAM_EN;
-+      v |= BCMA_CORE_PCI_MDIOCTL_DIVISOR_VAL;
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, v);
-+
-+      if (pc->core->id.rev >= 10) {
-+              max_retries = 200;
-+              bcma_pcie_mdio_set_phy(pc, device);
-+              v = (BCMA_CORE_PCI_MDIODATA_DEV_ADDR <<
-+                   BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF);
-+              v |= (address << BCMA_CORE_PCI_MDIODATA_REGADDR_SHF);
-+      } else {
-+              v = (device << BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF_OLD);
-+              v |= (address << BCMA_CORE_PCI_MDIODATA_REGADDR_SHF_OLD);
-+      }
-+
-+      v = BCMA_CORE_PCI_MDIODATA_START;
-+      v |= BCMA_CORE_PCI_MDIODATA_READ;
-+      v |= BCMA_CORE_PCI_MDIODATA_TA;
-+
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_DATA, v);
-+      /* Wait for the device to complete the transaction */
-+      udelay(10);
-+      for (i = 0; i < max_retries; i++) {
-+              v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL);
-+              if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE) {
-+                      udelay(10);
-+                      ret = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_DATA);
-+                      break;
-+              }
-+              msleep(1);
-+      }
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0);
-+      return ret;
-+}
-+
-+static void bcma_pcie_mdio_write(struct bcma_drv_pci *pc, u8 device,
-+                              u8 address, u16 data)
-+{
-+      int max_retries = 10;
-+      u32 v;
-+      int i;
-+
-+      /* enable mdio access to SERDES */
-+      v = BCMA_CORE_PCI_MDIOCTL_PREAM_EN;
-+      v |= BCMA_CORE_PCI_MDIOCTL_DIVISOR_VAL;
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, v);
-+
-+      if (pc->core->id.rev >= 10) {
-+              max_retries = 200;
-+              bcma_pcie_mdio_set_phy(pc, device);
-+              v = (BCMA_CORE_PCI_MDIODATA_DEV_ADDR <<
-+                   BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF);
-+              v |= (address << BCMA_CORE_PCI_MDIODATA_REGADDR_SHF);
-+      } else {
-+              v = (device << BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF_OLD);
-+              v |= (address << BCMA_CORE_PCI_MDIODATA_REGADDR_SHF_OLD);
-+      }
-+
-+      v = BCMA_CORE_PCI_MDIODATA_START;
-+      v |= BCMA_CORE_PCI_MDIODATA_WRITE;
-+      v |= BCMA_CORE_PCI_MDIODATA_TA;
-+      v |= data;
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_DATA, v);
-+      /* Wait for the device to complete the transaction */
-+      udelay(10);
-+      for (i = 0; i < max_retries; i++) {
-+              v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL);
-+              if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE)
-+                      break;
-+              msleep(1);
-+      }
-+      pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0);
-+}
-+
-+/**************************************************
-+ * Workarounds.
-+ **************************************************/
-+
-+static u8 bcma_pcicore_polarity_workaround(struct bcma_drv_pci *pc)
-+{
-+      u32 tmp;
-+
-+      tmp = bcma_pcie_read(pc, BCMA_CORE_PCI_PLP_STATUSREG);
-+      if (tmp & BCMA_CORE_PCI_PLP_POLARITYINV_STAT)
-+              return BCMA_CORE_PCI_SERDES_RX_CTRL_FORCE |
-+                     BCMA_CORE_PCI_SERDES_RX_CTRL_POLARITY;
-+      else
-+              return BCMA_CORE_PCI_SERDES_RX_CTRL_FORCE;
-+}
-+
-+static void bcma_pcicore_serdes_workaround(struct bcma_drv_pci *pc)
-+{
-+      u16 tmp;
-+
-+      bcma_pcie_mdio_write(pc, BCMA_CORE_PCI_MDIODATA_DEV_RX,
-+                           BCMA_CORE_PCI_SERDES_RX_CTRL,
-+                           bcma_pcicore_polarity_workaround(pc));
-+      tmp = bcma_pcie_mdio_read(pc, BCMA_CORE_PCI_MDIODATA_DEV_PLL,
-+                                BCMA_CORE_PCI_SERDES_PLL_CTRL);
-+      if (tmp & BCMA_CORE_PCI_PLL_CTRL_FREQDET_EN)
-+              bcma_pcie_mdio_write(pc, BCMA_CORE_PCI_MDIODATA_DEV_PLL,
-+                                   BCMA_CORE_PCI_SERDES_PLL_CTRL,
-+                                   tmp & ~BCMA_CORE_PCI_PLL_CTRL_FREQDET_EN);
-+}
-+
-+static void bcma_core_pci_fixcfg(struct bcma_drv_pci *pc)
-+{
-+      struct bcma_device *core = pc->core;
-+      u16 val16, core_index;
-+      uint regoff;
-+
-+      regoff = BCMA_CORE_PCI_SPROM(BCMA_CORE_PCI_SPROM_PI_OFFSET);
-+      core_index = (u16)core->core_index;
-+
-+      val16 = pcicore_read16(pc, regoff);
-+      if (((val16 & BCMA_CORE_PCI_SPROM_PI_MASK) >> BCMA_CORE_PCI_SPROM_PI_SHIFT)
-+           != core_index) {
-+              val16 = (core_index << BCMA_CORE_PCI_SPROM_PI_SHIFT) |
-+                      (val16 & ~BCMA_CORE_PCI_SPROM_PI_MASK);
-+              pcicore_write16(pc, regoff, val16);
-+      }
-+}
-+
-+/* Fix MISC config to allow coming out of L2/L3-Ready state w/o PRST */
-+/* Needs to happen when coming out of 'standby'/'hibernate' */
-+static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc)
-+{
-+      u16 val16;
-+      uint regoff;
-+
-+      regoff = BCMA_CORE_PCI_SPROM(BCMA_CORE_PCI_SPROM_MISC_CONFIG);
-+
-+      val16 = pcicore_read16(pc, regoff);
-+
-+      if (!(val16 & BCMA_CORE_PCI_SPROM_L23READY_EXIT_NOPERST)) {
-+              val16 |= BCMA_CORE_PCI_SPROM_L23READY_EXIT_NOPERST;
-+              pcicore_write16(pc, regoff, val16);
-+      }
-+}
-+
-+/**************************************************
-+ * Init.
-+ **************************************************/
-+
-+static void __devinit bcma_core_pci_clientmode_init(struct bcma_drv_pci *pc)
-+{
-+      bcma_core_pci_fixcfg(pc);
-+      bcma_pcicore_serdes_workaround(pc);
-+      bcma_core_pci_config_fixup(pc);
-+}
-+
-+void __devinit bcma_core_pci_init(struct bcma_drv_pci *pc)
-+{
-+      if (pc->setup_done)
-+              return;
-+
-+#ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
-+      pc->hostmode = bcma_core_pci_is_in_hostmode(pc);
-+      if (pc->hostmode)
-+              bcma_core_pci_hostmode_init(pc);
-+#endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
-+
-+      if (!pc->hostmode)
-+              bcma_core_pci_clientmode_init(pc);
-+}
-+
-+int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
-+                        bool enable)
-+{
-+      struct pci_dev *pdev = pc->core->bus->host_pci;
-+      u32 coremask, tmp;
-+      int err = 0;
-+
-+      if (core->bus->hosttype != BCMA_HOSTTYPE_PCI) {
-+              /* This bcma device is not on a PCI host-bus. So the IRQs are
-+               * not routed through the PCI core.
-+               * So we must not enable routing through the PCI core. */
-+              goto out;
-+      }
-+
-+      err = pci_read_config_dword(pdev, BCMA_PCI_IRQMASK, &tmp);
-+      if (err)
-+              goto out;
-+
-+      coremask = BIT(core->core_index) << 8;
-+      if (enable)
-+              tmp |= coremask;
-+      else
-+              tmp &= ~coremask;
-+
-+      err = pci_write_config_dword(pdev, BCMA_PCI_IRQMASK, tmp);
-+
-+out:
-+      return err;
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl);
-+
-+void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend)
-+{
-+      u32 w;
-+
-+      w = bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
-+      if (extend)
-+              w |= BCMA_CORE_PCI_ASPMTIMER_EXTEND;
-+      else
-+              w &= ~BCMA_CORE_PCI_ASPMTIMER_EXTEND;
-+      bcma_pcie_write(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG, w);
-+      bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_PMTHRESHREG);
-+}
-+EXPORT_SYMBOL_GPL(bcma_core_pci_extend_L1timer);
---- /dev/null
-+++ b/drivers/bcma/driver_pci_host.c
-@@ -0,0 +1,588 @@
-+/*
-+ * Broadcom specific AMBA
-+ * PCI Core in hostmode
-+ *
-+ * Copyright 2005 - 2011, Broadcom Corporation
-+ * Copyright 2006, 2007, Michael Buesch <m@bues.ch>
-+ * Copyright 2011, 2012, Hauke Mehrtens <hauke@hauke-m.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/pci.h>
-+#include <linux/bcma/bcma.h>
-+#include <asm/paccess.h>
-+
-+/* Probe a 32bit value on the bus and catch bus exceptions.
-+ * Returns nonzero on a bus exception.
-+ * This is MIPS specific */
-+#define mips_busprobe32(val, addr)    get_dbe((val), ((u32 *)(addr)))
-+
-+/* Assume one-hot slot wiring */
-+#define BCMA_PCI_SLOT_MAX     16
-+#define       PCI_CONFIG_SPACE_SIZE   256
-+
-+bool __devinit bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
-+{
-+      struct bcma_bus *bus = pc->core->bus;
-+      u16 chipid_top;
-+      u32 tmp;
-+
-+      chipid_top = (bus->chipinfo.id & 0xFF00);
-+      if (chipid_top != 0x4700 &&
-+          chipid_top != 0x5300)
-+              return false;
-+
-+      if (bus->sprom.boardflags_lo & BCMA_CORE_PCI_BFL_NOPCI) {
-+              pr_info("This PCI core is disabled and not working\n");
-+              return false;
-+      }
-+
-+      bcma_core_enable(pc->core, 0);
-+
-+      return !mips_busprobe32(tmp, pc->core->io_addr);
-+}
-+
-+static u32 bcma_pcie_read_config(struct bcma_drv_pci *pc, u32 address)
-+{
-+      pcicore_write32(pc, BCMA_CORE_PCI_CONFIG_ADDR, address);
-+      pcicore_read32(pc, BCMA_CORE_PCI_CONFIG_ADDR);
-+      return pcicore_read32(pc, BCMA_CORE_PCI_CONFIG_DATA);
-+}
-+
-+static void bcma_pcie_write_config(struct bcma_drv_pci *pc, u32 address,
-+                                 u32 data)
-+{
-+      pcicore_write32(pc, BCMA_CORE_PCI_CONFIG_ADDR, address);
-+      pcicore_read32(pc, BCMA_CORE_PCI_CONFIG_ADDR);
-+      pcicore_write32(pc, BCMA_CORE_PCI_CONFIG_DATA, data);
-+}
-+
-+static u32 bcma_get_cfgspace_addr(struct bcma_drv_pci *pc, unsigned int dev,
-+                           unsigned int func, unsigned int off)
-+{
-+      u32 addr = 0;
-+
-+      /* Issue config commands only when the data link is up (atleast
-+       * one external pcie device is present).
-+       */
-+      if (dev >= 2 || !(bcma_pcie_read(pc, BCMA_CORE_PCI_DLLP_LSREG)
-+                        & BCMA_CORE_PCI_DLLP_LSREG_LINKUP))
-+              goto out;
-+
-+      /* Type 0 transaction */
-+      /* Slide the PCI window to the appropriate slot */
-+      pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI1, BCMA_CORE_PCI_SBTOPCI_CFG0);
-+      /* Calculate the address */
-+      addr = pc->host_controller->host_cfg_addr;
-+      addr |= (dev << BCMA_CORE_PCI_CFG_SLOT_SHIFT);
-+      addr |= (func << BCMA_CORE_PCI_CFG_FUN_SHIFT);
-+      addr |= (off & ~3);
-+
-+out:
-+      return addr;
-+}
-+
-+static int bcma_extpci_read_config(struct bcma_drv_pci *pc, unsigned int dev,
-+                                unsigned int func, unsigned int off,
-+                                void *buf, int len)
-+{
-+      int err = -EINVAL;
-+      u32 addr, val;
-+      void __iomem *mmio = 0;
-+
-+      WARN_ON(!pc->hostmode);
-+      if (unlikely(len != 1 && len != 2 && len != 4))
-+              goto out;
-+      if (dev == 0) {
-+              /* we support only two functions on device 0 */
-+              if (func > 1)
-+                      return -EINVAL;
-+
-+              /* accesses to config registers with offsets >= 256
-+               * requires indirect access.
-+               */
-+              if (off >= PCI_CONFIG_SPACE_SIZE) {
-+                      addr = (func << 12);
-+                      addr |= (off & 0x0FFF);
-+                      val = bcma_pcie_read_config(pc, addr);
-+              } else {
-+                      addr = BCMA_CORE_PCI_PCICFG0;
-+                      addr |= (func << 8);
-+                      addr |= (off & 0xfc);
-+                      val = pcicore_read32(pc, addr);
-+              }
-+      } else {
-+              addr = bcma_get_cfgspace_addr(pc, dev, func, off);
-+              if (unlikely(!addr))
-+                      goto out;
-+              err = -ENOMEM;
-+              mmio = ioremap_nocache(addr, sizeof(val));
-+              if (!mmio)
-+                      goto out;
-+
-+              if (mips_busprobe32(val, mmio)) {
-+                      val = 0xffffffff;
-+                      goto unmap;
-+              }
-+
-+              val = readl(mmio);
-+      }
-+      val >>= (8 * (off & 3));
-+
-+      switch (len) {
-+      case 1:
-+              *((u8 *)buf) = (u8)val;
-+              break;
-+      case 2:
-+              *((u16 *)buf) = (u16)val;
-+              break;
-+      case 4:
-+              *((u32 *)buf) = (u32)val;
-+              break;
-+      }
-+      err = 0;
-+unmap:
-+      if (mmio)
-+              iounmap(mmio);
-+out:
-+      return err;
-+}
-+
-+static int bcma_extpci_write_config(struct bcma_drv_pci *pc, unsigned int dev,
-+                                 unsigned int func, unsigned int off,
-+                                 const void *buf, int len)
-+{
-+      int err = -EINVAL;
-+      u32 addr = 0, val = 0;
-+      void __iomem *mmio = 0;
-+      u16 chipid = pc->core->bus->chipinfo.id;
-+
-+      WARN_ON(!pc->hostmode);
-+      if (unlikely(len != 1 && len != 2 && len != 4))
-+              goto out;
-+      if (dev == 0) {
-+              /* accesses to config registers with offsets >= 256
-+               * requires indirect access.
-+               */
-+              if (off < PCI_CONFIG_SPACE_SIZE) {
-+                      addr = pc->core->addr + BCMA_CORE_PCI_PCICFG0;
-+                      addr |= (func << 8);
-+                      addr |= (off & 0xfc);
-+                      mmio = ioremap_nocache(addr, sizeof(val));
-+                      if (!mmio)
-+                              goto out;
-+              }
-+      } else {
-+              addr = bcma_get_cfgspace_addr(pc, dev, func, off);
-+              if (unlikely(!addr))
-+                      goto out;
-+              err = -ENOMEM;
-+              mmio = ioremap_nocache(addr, sizeof(val));
-+              if (!mmio)
-+                      goto out;
-+
-+              if (mips_busprobe32(val, mmio)) {
-+                      val = 0xffffffff;
-+                      goto unmap;
-+              }
-+      }
-+
-+      switch (len) {
-+      case 1:
-+              val = readl(mmio);
-+              val &= ~(0xFF << (8 * (off & 3)));
-+              val |= *((const u8 *)buf) << (8 * (off & 3));
-+              break;
-+      case 2:
-+              val = readl(mmio);
-+              val &= ~(0xFFFF << (8 * (off & 3)));
-+              val |= *((const u16 *)buf) << (8 * (off & 3));
-+              break;
-+      case 4:
-+              val = *((const u32 *)buf);
-+              break;
-+      }
-+      if (dev == 0 && !addr) {
-+              /* accesses to config registers with offsets >= 256
-+               * requires indirect access.
-+               */
-+              addr = (func << 12);
-+              addr |= (off & 0x0FFF);
-+              bcma_pcie_write_config(pc, addr, val);
-+      } else {
-+              writel(val, mmio);
-+
-+              if (chipid == 0x4716 || chipid == 0x4748)
-+                      readl(mmio);
-+      }
-+
-+      err = 0;
-+unmap:
-+      if (mmio)
-+              iounmap(mmio);
-+out:
-+      return err;
-+}
-+
-+static int bcma_core_pci_hostmode_read_config(struct pci_bus *bus,
-+                                            unsigned int devfn,
-+                                            int reg, int size, u32 *val)
-+{
-+      unsigned long flags;
-+      int err;
-+      struct bcma_drv_pci *pc;
-+      struct bcma_drv_pci_host *pc_host;
-+
-+      pc_host = container_of(bus->ops, struct bcma_drv_pci_host, pci_ops);
-+      pc = pc_host->pdev;
-+
-+      spin_lock_irqsave(&pc_host->cfgspace_lock, flags);
-+      err = bcma_extpci_read_config(pc, PCI_SLOT(devfn),
-+                                   PCI_FUNC(devfn), reg, val, size);
-+      spin_unlock_irqrestore(&pc_host->cfgspace_lock, flags);
-+
-+      return err ? PCIBIOS_DEVICE_NOT_FOUND : PCIBIOS_SUCCESSFUL;
-+}
-+
-+static int bcma_core_pci_hostmode_write_config(struct pci_bus *bus,
-+                                             unsigned int devfn,
-+                                             int reg, int size, u32 val)
-+{
-+      unsigned long flags;
-+      int err;
-+      struct bcma_drv_pci *pc;
-+      struct bcma_drv_pci_host *pc_host;
-+
-+      pc_host = container_of(bus->ops, struct bcma_drv_pci_host, pci_ops);
-+      pc = pc_host->pdev;
-+
-+      spin_lock_irqsave(&pc_host->cfgspace_lock, flags);
-+      err = bcma_extpci_write_config(pc, PCI_SLOT(devfn),
-+                                    PCI_FUNC(devfn), reg, &val, size);
-+      spin_unlock_irqrestore(&pc_host->cfgspace_lock, flags);
-+
-+      return err ? PCIBIOS_DEVICE_NOT_FOUND : PCIBIOS_SUCCESSFUL;
-+}
-+
-+/* return cap_offset if requested capability exists in the PCI config space */
-+static u8 __devinit bcma_find_pci_capability(struct bcma_drv_pci *pc,
-+                                           unsigned int dev,
-+                                           unsigned int func, u8 req_cap_id,
-+                                           unsigned char *buf, u32 *buflen)
-+{
-+      u8 cap_id;
-+      u8 cap_ptr = 0;
-+      u32 bufsize;
-+      u8 byte_val;
-+
-+      /* check for Header type 0 */
-+      bcma_extpci_read_config(pc, dev, func, PCI_HEADER_TYPE, &byte_val,
-+                              sizeof(u8));
-+      if ((byte_val & 0x7f) != PCI_HEADER_TYPE_NORMAL)
-+              return cap_ptr;
-+
-+      /* check if the capability pointer field exists */
-+      bcma_extpci_read_config(pc, dev, func, PCI_STATUS, &byte_val,
-+                              sizeof(u8));
-+      if (!(byte_val & PCI_STATUS_CAP_LIST))
-+              return cap_ptr;
-+
-+      /* check if the capability pointer is 0x00 */
-+      bcma_extpci_read_config(pc, dev, func, PCI_CAPABILITY_LIST, &cap_ptr,
-+                              sizeof(u8));
-+      if (cap_ptr == 0x00)
-+              return cap_ptr;
-+
-+      /* loop thr'u the capability list and see if the requested capabilty
-+       * exists */
-+      bcma_extpci_read_config(pc, dev, func, cap_ptr, &cap_id, sizeof(u8));
-+      while (cap_id != req_cap_id) {
-+              bcma_extpci_read_config(pc, dev, func, cap_ptr + 1, &cap_ptr,
-+                                      sizeof(u8));
-+              if (cap_ptr == 0x00)
-+                      return cap_ptr;
-+              bcma_extpci_read_config(pc, dev, func, cap_ptr, &cap_id,
-+                                      sizeof(u8));
-+      }
-+
-+      /* found the caller requested capability */
-+      if ((buf != NULL) && (buflen != NULL)) {
-+              u8 cap_data;
-+
-+              bufsize = *buflen;
-+              if (!bufsize)
-+                      return cap_ptr;
-+
-+              *buflen = 0;
-+
-+              /* copy the cpability data excluding cap ID and next ptr */
-+              cap_data = cap_ptr + 2;
-+              if ((bufsize + cap_data)  > PCI_CONFIG_SPACE_SIZE)
-+                      bufsize = PCI_CONFIG_SPACE_SIZE - cap_data;
-+              *buflen = bufsize;
-+              while (bufsize--) {
-+                      bcma_extpci_read_config(pc, dev, func, cap_data, buf,
-+                                              sizeof(u8));
-+                      cap_data++;
-+                      buf++;
-+              }
-+      }
-+
-+      return cap_ptr;
-+}
-+
-+/* If the root port is capable of returning Config Request
-+ * Retry Status (CRS) Completion Status to software then
-+ * enable the feature.
-+ */
-+static void __devinit bcma_core_pci_enable_crs(struct bcma_drv_pci *pc)
-+{
-+      u8 cap_ptr, root_ctrl, root_cap, dev;
-+      u16 val16;
-+      int i;
-+
-+      cap_ptr = bcma_find_pci_capability(pc, 0, 0, PCI_CAP_ID_EXP, NULL,
-+                                         NULL);
-+      root_cap = cap_ptr + PCI_EXP_RTCAP;
-+      bcma_extpci_read_config(pc, 0, 0, root_cap, &val16, sizeof(u16));
-+      if (val16 & BCMA_CORE_PCI_RC_CRS_VISIBILITY) {
-+              /* Enable CRS software visibility */
-+              root_ctrl = cap_ptr + PCI_EXP_RTCTL;
-+              val16 = PCI_EXP_RTCTL_CRSSVE;
-+              bcma_extpci_read_config(pc, 0, 0, root_ctrl, &val16,
-+                                      sizeof(u16));
-+
-+              /* Initiate a configuration request to read the vendor id
-+               * field of the device function's config space header after
-+               * 100 ms wait time from the end of Reset. If the device is
-+               * not done with its internal initialization, it must at
-+               * least return a completion TLP, with a completion status
-+               * of "Configuration Request Retry Status (CRS)". The root
-+               * complex must complete the request to the host by returning
-+               * a read-data value of 0001h for the Vendor ID field and
-+               * all 1s for any additional bytes included in the request.
-+               * Poll using the config reads for max wait time of 1 sec or
-+               * until we receive the successful completion status. Repeat
-+               * the procedure for all the devices.
-+               */
-+              for (dev = 1; dev < BCMA_PCI_SLOT_MAX; dev++) {
-+                      for (i = 0; i < 100000; i++) {
-+                              bcma_extpci_read_config(pc, dev, 0,
-+                                                      PCI_VENDOR_ID, &val16,
-+                                                      sizeof(val16));
-+                              if (val16 != 0x1)
-+                                      break;
-+                              udelay(10);
-+                      }
-+                      if (val16 == 0x1)
-+                              pr_err("PCI: Broken device in slot %d\n", dev);
-+              }
-+      }
-+}
-+
-+void __devinit bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc)
-+{
-+      struct bcma_bus *bus = pc->core->bus;
-+      struct bcma_drv_pci_host *pc_host;
-+      u32 tmp;
-+      u32 pci_membase_1G;
-+      unsigned long io_map_base;
-+
-+      pr_info("PCIEcore in host mode found\n");
-+
-+      pc_host = kzalloc(sizeof(*pc_host), GFP_KERNEL);
-+      if (!pc_host)  {
-+              pr_err("can not allocate memory");
-+              return;
-+      }
-+
-+      pc->host_controller = pc_host;
-+      pc_host->pci_controller.io_resource = &pc_host->io_resource;
-+      pc_host->pci_controller.mem_resource = &pc_host->mem_resource;
-+      pc_host->pci_controller.pci_ops = &pc_host->pci_ops;
-+      pc_host->pdev = pc;
-+
-+      pci_membase_1G = BCMA_SOC_PCI_DMA;
-+      pc_host->host_cfg_addr = BCMA_SOC_PCI_CFG;
-+
-+      pc_host->pci_ops.read = bcma_core_pci_hostmode_read_config;
-+      pc_host->pci_ops.write = bcma_core_pci_hostmode_write_config;
-+
-+      pc_host->mem_resource.name = "BCMA PCIcore external memory",
-+      pc_host->mem_resource.start = BCMA_SOC_PCI_DMA;
-+      pc_host->mem_resource.end = BCMA_SOC_PCI_DMA + BCMA_SOC_PCI_DMA_SZ - 1;
-+      pc_host->mem_resource.flags = IORESOURCE_MEM | IORESOURCE_PCI_FIXED;
-+
-+      pc_host->io_resource.name = "BCMA PCIcore external I/O",
-+      pc_host->io_resource.start = 0x100;
-+      pc_host->io_resource.end = 0x7FF;
-+      pc_host->io_resource.flags = IORESOURCE_IO | IORESOURCE_PCI_FIXED;
-+
-+      /* Reset RC */
-+      udelay(3000);
-+      pcicore_write32(pc, BCMA_CORE_PCI_CTL, BCMA_CORE_PCI_CTL_RST_OE);
-+      udelay(1000);
-+      pcicore_write32(pc, BCMA_CORE_PCI_CTL, BCMA_CORE_PCI_CTL_RST |
-+                      BCMA_CORE_PCI_CTL_RST_OE);
-+
-+      /* 64 MB I/O access window. On 4716, use
-+       * sbtopcie0 to access the device registers. We
-+       * can't use address match 2 (1 GB window) region
-+       * as mips can't generate 64-bit address on the
-+       * backplane.
-+       */
-+      if (bus->chipinfo.id == 0x4716 || bus->chipinfo.id == 0x4748) {
-+              pc_host->mem_resource.start = BCMA_SOC_PCI_MEM;
-+              pc_host->mem_resource.end = BCMA_SOC_PCI_MEM +
-+                                          BCMA_SOC_PCI_MEM_SZ - 1;
-+              pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0,
-+                              BCMA_CORE_PCI_SBTOPCI_MEM | BCMA_SOC_PCI_MEM);
-+      } else if (bus->chipinfo.id == 0x5300) {
-+              tmp = BCMA_CORE_PCI_SBTOPCI_MEM;
-+              tmp |= BCMA_CORE_PCI_SBTOPCI_PREF;
-+              tmp |= BCMA_CORE_PCI_SBTOPCI_BURST;
-+              if (pc->core->core_unit == 0) {
-+                      pc_host->mem_resource.start = BCMA_SOC_PCI_MEM;
-+                      pc_host->mem_resource.end = BCMA_SOC_PCI_MEM +
-+                                                  BCMA_SOC_PCI_MEM_SZ - 1;
-+                      pci_membase_1G = BCMA_SOC_PCIE_DMA_H32;
-+                      pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0,
-+                                      tmp | BCMA_SOC_PCI_MEM);
-+              } else if (pc->core->core_unit == 1) {
-+                      pc_host->mem_resource.start = BCMA_SOC_PCI1_MEM;
-+                      pc_host->mem_resource.end = BCMA_SOC_PCI1_MEM +
-+                                                  BCMA_SOC_PCI_MEM_SZ - 1;
-+                      pci_membase_1G = BCMA_SOC_PCIE1_DMA_H32;
-+                      pc_host->host_cfg_addr = BCMA_SOC_PCI1_CFG;
-+                      pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0,
-+                                      tmp | BCMA_SOC_PCI1_MEM);
-+              }
-+      } else
-+              pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI0,
-+                              BCMA_CORE_PCI_SBTOPCI_IO);
-+
-+      /* 64 MB configuration access window */
-+      pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI1, BCMA_CORE_PCI_SBTOPCI_CFG0);
-+
-+      /* 1 GB memory access window */
-+      pcicore_write32(pc, BCMA_CORE_PCI_SBTOPCI2,
-+                      BCMA_CORE_PCI_SBTOPCI_MEM | pci_membase_1G);
-+
-+
-+      /* As per PCI Express Base Spec 1.1 we need to wait for
-+       * at least 100 ms from the end of a reset (cold/warm/hot)
-+       * before issuing configuration requests to PCI Express
-+       * devices.
-+       */
-+      udelay(100000);
-+
-+      bcma_core_pci_enable_crs(pc);
-+
-+      /* Enable PCI bridge BAR0 memory & master access */
-+      tmp = PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
-+      bcma_extpci_write_config(pc, 0, 0, PCI_COMMAND, &tmp, sizeof(tmp));
-+
-+      /* Enable PCI interrupts */
-+      pcicore_write32(pc, BCMA_CORE_PCI_IMASK, BCMA_CORE_PCI_IMASK_INTA);
-+
-+      /* Ok, ready to run, register it to the system.
-+       * The following needs change, if we want to port hostmode
-+       * to non-MIPS platform. */
-+      io_map_base = (unsigned long)ioremap_nocache(pc_host->mem_resource.start,
-+                                                   resource_size(&pc_host->mem_resource));
-+      pc_host->pci_controller.io_map_base = io_map_base;
-+      set_io_port_base(pc_host->pci_controller.io_map_base);
-+      /* Give some time to the PCI controller to configure itself with the new
-+       * values. Not waiting at this point causes crashes of the machine. */
-+      mdelay(10);
-+      register_pci_controller(&pc_host->pci_controller);
-+      return;
-+}
-+
-+/* Early PCI fixup for a device on the PCI-core bridge. */
-+static void bcma_core_pci_fixup_pcibridge(struct pci_dev *dev)
-+{
-+      if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) {
-+              /* This is not a device on the PCI-core bridge. */
-+              return;
-+      }
-+      if (PCI_SLOT(dev->devfn) != 0)
-+              return;
-+
-+      pr_info("PCI: Fixing up bridge %s\n", pci_name(dev));
-+
-+      /* Enable PCI bridge bus mastering and memory space */
-+      pci_set_master(dev);
-+      if (pcibios_enable_device(dev, ~0) < 0) {
-+              pr_err("PCI: BCMA bridge enable failed\n");
-+              return;
-+      }
-+
-+      /* Enable PCI bridge BAR1 prefetch and burst */
-+      pci_write_config_dword(dev, BCMA_PCI_BAR1_CONTROL, 3);
-+}
-+DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, bcma_core_pci_fixup_pcibridge);
-+
-+/* Early PCI fixup for all PCI-cores to set the correct memory address. */
-+static void bcma_core_pci_fixup_addresses(struct pci_dev *dev)
-+{
-+      struct resource *res;
-+      int pos;
-+
-+      if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) {
-+              /* This is not a device on the PCI-core bridge. */
-+              return;
-+      }
-+      if (PCI_SLOT(dev->devfn) == 0)
-+              return;
-+
-+      pr_info("PCI: Fixing up addresses %s\n", pci_name(dev));
-+
-+      for (pos = 0; pos < 6; pos++) {
-+              res = &dev->resource[pos];
-+              if (res->flags & (IORESOURCE_IO | IORESOURCE_MEM))
-+                      pci_assign_resource(dev, pos);
-+      }
-+}
-+DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, bcma_core_pci_fixup_addresses);
-+
-+/* This function is called when doing a pci_enable_device().
-+ * We must first check if the device is a device on the PCI-core bridge. */
-+int bcma_core_pci_plat_dev_init(struct pci_dev *dev)
-+{
-+      struct bcma_drv_pci_host *pc_host;
-+
-+      if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) {
-+              /* This is not a device on the PCI-core bridge. */
-+              return -ENODEV;
-+      }
-+      pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host,
-+                             pci_ops);
-+
-+      pr_info("PCI: Fixing up device %s\n", pci_name(dev));
-+
-+      /* Fix up interrupt lines */
-+      dev->irq = bcma_core_mips_irq(pc_host->pdev->core) + 2;
-+      pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(bcma_core_pci_plat_dev_init);
-+
-+/* PCI device IRQ mapping. */
-+int bcma_core_pci_pcibios_map_irq(const struct pci_dev *dev)
-+{
-+      struct bcma_drv_pci_host *pc_host;
-+
-+      if (dev->bus->ops->read != bcma_core_pci_hostmode_read_config) {
-+              /* This is not a device on the PCI-core bridge. */
-+              return -ENODEV;
-+      }
-+
-+      pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host,
-+                             pci_ops);
-+      return bcma_core_mips_irq(pc_host->pdev->core) + 2;
-+}
-+EXPORT_SYMBOL(bcma_core_pci_pcibios_map_irq);
---- /dev/null
-+++ b/drivers/bcma/host_pci.c
-@@ -0,0 +1,295 @@
-+/*
-+ * Broadcom specific AMBA
-+ * PCI Host
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/slab.h>
-+#include <linux/bcma/bcma.h>
-+#include <linux/pci.h>
-+#include <linux/module.h>
-+
-+static void bcma_host_pci_switch_core(struct bcma_device *core)
-+{
-+      pci_write_config_dword(core->bus->host_pci, BCMA_PCI_BAR0_WIN,
-+                             core->addr);
-+      pci_write_config_dword(core->bus->host_pci, BCMA_PCI_BAR0_WIN2,
-+                             core->wrap);
-+      core->bus->mapped_core = core;
-+      pr_debug("Switched to core: 0x%X\n", core->id.id);
-+}
-+
-+/* Provides access to the requested core. Returns base offset that has to be
-+ * used. It makes use of fixed windows when possible. */
-+static u16 bcma_host_pci_provide_access_to_core(struct bcma_device *core)
-+{
-+      switch (core->id.id) {
-+      case BCMA_CORE_CHIPCOMMON:
-+              return 3 * BCMA_CORE_SIZE;
-+      case BCMA_CORE_PCIE:
-+              return 2 * BCMA_CORE_SIZE;
-+      }
-+
-+      if (core->bus->mapped_core != core)
-+              bcma_host_pci_switch_core(core);
-+      return 0;
-+}
-+
-+static u8 bcma_host_pci_read8(struct bcma_device *core, u16 offset)
-+{
-+      offset += bcma_host_pci_provide_access_to_core(core);
-+      return ioread8(core->bus->mmio + offset);
-+}
-+
-+static u16 bcma_host_pci_read16(struct bcma_device *core, u16 offset)
-+{
-+      offset += bcma_host_pci_provide_access_to_core(core);
-+      return ioread16(core->bus->mmio + offset);
-+}
-+
-+static u32 bcma_host_pci_read32(struct bcma_device *core, u16 offset)
-+{
-+      offset += bcma_host_pci_provide_access_to_core(core);
-+      return ioread32(core->bus->mmio + offset);
-+}
-+
-+static void bcma_host_pci_write8(struct bcma_device *core, u16 offset,
-+                               u8 value)
-+{
-+      offset += bcma_host_pci_provide_access_to_core(core);
-+      iowrite8(value, core->bus->mmio + offset);
-+}
-+
-+static void bcma_host_pci_write16(struct bcma_device *core, u16 offset,
-+                               u16 value)
-+{
-+      offset += bcma_host_pci_provide_access_to_core(core);
-+      iowrite16(value, core->bus->mmio + offset);
-+}
-+
-+static void bcma_host_pci_write32(struct bcma_device *core, u16 offset,
-+                               u32 value)
-+{
-+      offset += bcma_host_pci_provide_access_to_core(core);
-+      iowrite32(value, core->bus->mmio + offset);
-+}
-+
-+#ifdef CONFIG_BCMA_BLOCKIO
-+void bcma_host_pci_block_read(struct bcma_device *core, void *buffer,
-+                            size_t count, u16 offset, u8 reg_width)
-+{
-+      void __iomem *addr = core->bus->mmio + offset;
-+      if (core->bus->mapped_core != core)
-+              bcma_host_pci_switch_core(core);
-+      switch (reg_width) {
-+      case sizeof(u8):
-+              ioread8_rep(addr, buffer, count);
-+              break;
-+      case sizeof(u16):
-+              WARN_ON(count & 1);
-+              ioread16_rep(addr, buffer, count >> 1);
-+              break;
-+      case sizeof(u32):
-+              WARN_ON(count & 3);
-+              ioread32_rep(addr, buffer, count >> 2);
-+              break;
-+      default:
-+              WARN_ON(1);
-+      }
-+}
-+
-+void bcma_host_pci_block_write(struct bcma_device *core, const void *buffer,
-+                             size_t count, u16 offset, u8 reg_width)
-+{
-+      void __iomem *addr = core->bus->mmio + offset;
-+      if (core->bus->mapped_core != core)
-+              bcma_host_pci_switch_core(core);
-+      switch (reg_width) {
-+      case sizeof(u8):
-+              iowrite8_rep(addr, buffer, count);
-+              break;
-+      case sizeof(u16):
-+              WARN_ON(count & 1);
-+              iowrite16_rep(addr, buffer, count >> 1);
-+              break;
-+      case sizeof(u32):
-+              WARN_ON(count & 3);
-+              iowrite32_rep(addr, buffer, count >> 2);
-+              break;
-+      default:
-+              WARN_ON(1);
-+      }
-+}
-+#endif
-+
-+static u32 bcma_host_pci_aread32(struct bcma_device *core, u16 offset)
-+{
-+      if (core->bus->mapped_core != core)
-+              bcma_host_pci_switch_core(core);
-+      return ioread32(core->bus->mmio + (1 * BCMA_CORE_SIZE) + offset);
-+}
-+
-+static void bcma_host_pci_awrite32(struct bcma_device *core, u16 offset,
-+                                u32 value)
-+{
-+      if (core->bus->mapped_core != core)
-+              bcma_host_pci_switch_core(core);
-+      iowrite32(value, core->bus->mmio + (1 * BCMA_CORE_SIZE) + offset);
-+}
-+
-+const struct bcma_host_ops bcma_host_pci_ops = {
-+      .read8          = bcma_host_pci_read8,
-+      .read16         = bcma_host_pci_read16,
-+      .read32         = bcma_host_pci_read32,
-+      .write8         = bcma_host_pci_write8,
-+      .write16        = bcma_host_pci_write16,
-+      .write32        = bcma_host_pci_write32,
-+#ifdef CONFIG_BCMA_BLOCKIO
-+      .block_read     = bcma_host_pci_block_read,
-+      .block_write    = bcma_host_pci_block_write,
-+#endif
-+      .aread32        = bcma_host_pci_aread32,
-+      .awrite32       = bcma_host_pci_awrite32,
-+};
-+
-+static int __devinit bcma_host_pci_probe(struct pci_dev *dev,
-+                                       const struct pci_device_id *id)
-+{
-+      struct bcma_bus *bus;
-+      int err = -ENOMEM;
-+      const char *name;
-+      u32 val;
-+
-+      /* Alloc */
-+      bus = kzalloc(sizeof(*bus), GFP_KERNEL);
-+      if (!bus)
-+              goto out;
-+
-+      /* Basic PCI configuration */
-+      err = pci_enable_device(dev);
-+      if (err)
-+              goto err_kfree_bus;
-+
-+      name = dev_name(&dev->dev);
-+      if (dev->driver && dev->driver->name)
-+              name = dev->driver->name;
-+      err = pci_request_regions(dev, name);
-+      if (err)
-+              goto err_pci_disable;
-+      pci_set_master(dev);
-+
-+      /* Disable the RETRY_TIMEOUT register (0x41) to keep
-+       * PCI Tx retries from interfering with C3 CPU state */
-+      pci_read_config_dword(dev, 0x40, &val);
-+      if ((val & 0x0000ff00) != 0)
-+              pci_write_config_dword(dev, 0x40, val & 0xffff00ff);
-+
-+      /* SSB needed additional powering up, do we have any AMBA PCI cards? */
-+      if (!pci_is_pcie(dev))
-+              pr_err("PCI card detected, report problems.\n");
-+
-+      /* Map MMIO */
-+      err = -ENOMEM;
-+      bus->mmio = pci_iomap(dev, 0, ~0UL);
-+      if (!bus->mmio)
-+              goto err_pci_release_regions;
-+
-+      /* Host specific */
-+      bus->host_pci = dev;
-+      bus->hosttype = BCMA_HOSTTYPE_PCI;
-+      bus->ops = &bcma_host_pci_ops;
-+
-+      bus->boardinfo.vendor = bus->host_pci->subsystem_vendor;
-+      bus->boardinfo.type = bus->host_pci->subsystem_device;
-+
-+      /* Register */
-+      err = bcma_bus_register(bus);
-+      if (err)
-+              goto err_pci_unmap_mmio;
-+
-+      pci_set_drvdata(dev, bus);
-+
-+out:
-+      return err;
-+
-+err_pci_unmap_mmio:
-+      pci_iounmap(dev, bus->mmio);
-+err_pci_release_regions:
-+      pci_release_regions(dev);
-+err_pci_disable:
-+      pci_disable_device(dev);
-+err_kfree_bus:
-+      kfree(bus);
-+      return err;
-+}
-+
-+static void __devexit bcma_host_pci_remove(struct pci_dev *dev)
-+{
-+      struct bcma_bus *bus = pci_get_drvdata(dev);
-+
-+      bcma_bus_unregister(bus);
-+      pci_iounmap(dev, bus->mmio);
-+      pci_release_regions(dev);
-+      pci_disable_device(dev);
-+      kfree(bus);
-+      pci_set_drvdata(dev, NULL);
-+}
-+
-+#ifdef CONFIG_PM
-+static int bcma_host_pci_suspend(struct device *dev)
-+{
-+      struct pci_dev *pdev = to_pci_dev(dev);
-+      struct bcma_bus *bus = pci_get_drvdata(pdev);
-+
-+      bus->mapped_core = NULL;
-+
-+      return bcma_bus_suspend(bus);
-+}
-+
-+static int bcma_host_pci_resume(struct device *dev)
-+{
-+      struct pci_dev *pdev = to_pci_dev(dev);
-+      struct bcma_bus *bus = pci_get_drvdata(pdev);
-+
-+      return bcma_bus_resume(bus);
-+}
-+
-+static SIMPLE_DEV_PM_OPS(bcma_pm_ops, bcma_host_pci_suspend,
-+                       bcma_host_pci_resume);
-+#define BCMA_PM_OPS   (&bcma_pm_ops)
-+
-+#else /* CONFIG_PM */
-+
-+#define BCMA_PM_OPS     NULL
-+
-+#endif /* CONFIG_PM */
-+
-+static DEFINE_PCI_DEVICE_TABLE(bcma_pci_bridge_tbl) = {
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x0576) },
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4331) },
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4353) },
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4357) },
-+      { PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4727) },
-+      { 0, },
-+};
-+MODULE_DEVICE_TABLE(pci, bcma_pci_bridge_tbl);
-+
-+static struct pci_driver bcma_pci_bridge_driver = {
-+      .name = "bcma-pci-bridge",
-+      .id_table = bcma_pci_bridge_tbl,
-+      .probe = bcma_host_pci_probe,
-+      .remove = __devexit_p(bcma_host_pci_remove),
-+      .driver.pm = BCMA_PM_OPS,
-+};
-+
-+int __init bcma_host_pci_init(void)
-+{
-+      return pci_register_driver(&bcma_pci_bridge_driver);
-+}
-+
-+void __exit bcma_host_pci_exit(void)
-+{
-+      pci_unregister_driver(&bcma_pci_bridge_driver);
-+}
---- /dev/null
-+++ b/drivers/bcma/host_soc.c
-@@ -0,0 +1,183 @@
-+/*
-+ * Broadcom specific AMBA
-+ * System on Chip (SoC) Host
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include "scan.h"
-+#include <linux/bcma/bcma.h>
-+#include <linux/bcma/bcma_soc.h>
-+
-+static u8 bcma_host_soc_read8(struct bcma_device *core, u16 offset)
-+{
-+      return readb(core->io_addr + offset);
-+}
-+
-+static u16 bcma_host_soc_read16(struct bcma_device *core, u16 offset)
-+{
-+      return readw(core->io_addr + offset);
-+}
-+
-+static u32 bcma_host_soc_read32(struct bcma_device *core, u16 offset)
-+{
-+      return readl(core->io_addr + offset);
-+}
-+
-+static void bcma_host_soc_write8(struct bcma_device *core, u16 offset,
-+                               u8 value)
-+{
-+      writeb(value, core->io_addr + offset);
-+}
-+
-+static void bcma_host_soc_write16(struct bcma_device *core, u16 offset,
-+                               u16 value)
-+{
-+      writew(value, core->io_addr + offset);
-+}
-+
-+static void bcma_host_soc_write32(struct bcma_device *core, u16 offset,
-+                               u32 value)
-+{
-+      writel(value, core->io_addr + offset);
-+}
-+
-+#ifdef CONFIG_BCMA_BLOCKIO
-+static void bcma_host_soc_block_read(struct bcma_device *core, void *buffer,
-+                                   size_t count, u16 offset, u8 reg_width)
-+{
-+      void __iomem *addr = core->io_addr + offset;
-+
-+      switch (reg_width) {
-+      case sizeof(u8): {
-+              u8 *buf = buffer;
-+
-+              while (count) {
-+                      *buf = __raw_readb(addr);
-+                      buf++;
-+                      count--;
-+              }
-+              break;
-+      }
-+      case sizeof(u16): {
-+              __le16 *buf = buffer;
-+
-+              WARN_ON(count & 1);
-+              while (count) {
-+                      *buf = (__force __le16)__raw_readw(addr);
-+                      buf++;
-+                      count -= 2;
-+              }
-+              break;
-+      }
-+      case sizeof(u32): {
-+              __le32 *buf = buffer;
-+
-+              WARN_ON(count & 3);
-+              while (count) {
-+                      *buf = (__force __le32)__raw_readl(addr);
-+                      buf++;
-+                      count -= 4;
-+              }
-+              break;
-+      }
-+      default:
-+              WARN_ON(1);
-+      }
-+}
-+
-+static void bcma_host_soc_block_write(struct bcma_device *core,
-+                                    const void *buffer,
-+                                    size_t count, u16 offset, u8 reg_width)
-+{
-+      void __iomem *addr = core->io_addr + offset;
-+
-+      switch (reg_width) {
-+      case sizeof(u8): {
-+              const u8 *buf = buffer;
-+
-+              while (count) {
-+                      __raw_writeb(*buf, addr);
-+                      buf++;
-+                      count--;
-+              }
-+              break;
-+      }
-+      case sizeof(u16): {
-+              const __le16 *buf = buffer;
-+
-+              WARN_ON(count & 1);
-+              while (count) {
-+                      __raw_writew((__force u16)(*buf), addr);
-+                      buf++;
-+                      count -= 2;
-+              }
-+              break;
-+      }
-+      case sizeof(u32): {
-+              const __le32 *buf = buffer;
-+
-+              WARN_ON(count & 3);
-+              while (count) {
-+                      __raw_writel((__force u32)(*buf), addr);
-+                      buf++;
-+                      count -= 4;
-+              }
-+              break;
-+      }
-+      default:
-+              WARN_ON(1);
-+      }
-+}
-+#endif /* CONFIG_BCMA_BLOCKIO */
-+
-+static u32 bcma_host_soc_aread32(struct bcma_device *core, u16 offset)
-+{
-+      return readl(core->io_wrap + offset);
-+}
-+
-+static void bcma_host_soc_awrite32(struct bcma_device *core, u16 offset,
-+                                u32 value)
-+{
-+      writel(value, core->io_wrap + offset);
-+}
-+
-+const struct bcma_host_ops bcma_host_soc_ops = {
-+      .read8          = bcma_host_soc_read8,
-+      .read16         = bcma_host_soc_read16,
-+      .read32         = bcma_host_soc_read32,
-+      .write8         = bcma_host_soc_write8,
-+      .write16        = bcma_host_soc_write16,
-+      .write32        = bcma_host_soc_write32,
-+#ifdef CONFIG_BCMA_BLOCKIO
-+      .block_read     = bcma_host_soc_block_read,
-+      .block_write    = bcma_host_soc_block_write,
-+#endif
-+      .aread32        = bcma_host_soc_aread32,
-+      .awrite32       = bcma_host_soc_awrite32,
-+};
-+
-+int __init bcma_host_soc_register(struct bcma_soc *soc)
-+{
-+      struct bcma_bus *bus = &soc->bus;
-+      int err;
-+
-+      /* iomap only first core. We have to read some register on this core
-+       * to scan the bus.
-+       */
-+      bus->mmio = ioremap_nocache(BCMA_ADDR_BASE, BCMA_CORE_SIZE * 1);
-+      if (!bus->mmio)
-+              return -ENOMEM;
-+
-+      /* Host specific */
-+      bus->hosttype = BCMA_HOSTTYPE_SOC;
-+      bus->ops = &bcma_host_soc_ops;
-+
-+      /* Register */
-+      err = bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips);
-+      if (err)
-+              iounmap(bus->mmio);
-+
-+      return err;
-+}
---- /dev/null
-+++ b/drivers/bcma/main.c
-@@ -0,0 +1,387 @@
-+/*
-+ * Broadcom specific AMBA
-+ * Bus subsystem
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+#include <linux/module.h>
-+#include <linux/bcma/bcma.h>
-+#include <linux/slab.h>
-+
-+MODULE_DESCRIPTION("Broadcom's specific AMBA driver");
-+MODULE_LICENSE("GPL");
-+
-+/* contains the number the next bus should get. */
-+static unsigned int bcma_bus_next_num = 0;
-+
-+/* bcma_buses_mutex locks the bcma_bus_next_num */
-+static DEFINE_MUTEX(bcma_buses_mutex);
-+
-+static int bcma_bus_match(struct device *dev, struct device_driver *drv);
-+static int bcma_device_probe(struct device *dev);
-+static int bcma_device_remove(struct device *dev);
-+static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env);
-+
-+static ssize_t manuf_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      return sprintf(buf, "0x%03X\n", core->id.manuf);
-+}
-+static ssize_t id_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      return sprintf(buf, "0x%03X\n", core->id.id);
-+}
-+static ssize_t rev_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      return sprintf(buf, "0x%02X\n", core->id.rev);
-+}
-+static ssize_t class_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      return sprintf(buf, "0x%X\n", core->id.class);
-+}
-+static struct device_attribute bcma_device_attrs[] = {
-+      __ATTR_RO(manuf),
-+      __ATTR_RO(id),
-+      __ATTR_RO(rev),
-+      __ATTR_RO(class),
-+      __ATTR_NULL,
-+};
-+
-+static struct bus_type bcma_bus_type = {
-+      .name           = "bcma",
-+      .match          = bcma_bus_match,
-+      .probe          = bcma_device_probe,
-+      .remove         = bcma_device_remove,
-+      .uevent         = bcma_device_uevent,
-+      .dev_attrs      = bcma_device_attrs,
-+};
-+
-+struct bcma_device *bcma_find_core(struct bcma_bus *bus, u16 coreid)
-+{
-+      struct bcma_device *core;
-+
-+      list_for_each_entry(core, &bus->cores, list) {
-+              if (core->id.id == coreid)
-+                      return core;
-+      }
-+      return NULL;
-+}
-+EXPORT_SYMBOL_GPL(bcma_find_core);
-+
-+static void bcma_release_core_dev(struct device *dev)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      if (core->io_addr)
-+              iounmap(core->io_addr);
-+      if (core->io_wrap)
-+              iounmap(core->io_wrap);
-+      kfree(core);
-+}
-+
-+static int bcma_register_cores(struct bcma_bus *bus)
-+{
-+      struct bcma_device *core;
-+      int err, dev_id = 0;
-+
-+      list_for_each_entry(core, &bus->cores, list) {
-+              /* We support that cores ourself */
-+              switch (core->id.id) {
-+              case BCMA_CORE_CHIPCOMMON:
-+              case BCMA_CORE_PCI:
-+              case BCMA_CORE_PCIE:
-+              case BCMA_CORE_MIPS_74K:
-+                      continue;
-+              }
-+
-+              core->dev.release = bcma_release_core_dev;
-+              core->dev.bus = &bcma_bus_type;
-+              dev_set_name(&core->dev, "bcma%d:%d", bus->num, dev_id);
-+
-+              switch (bus->hosttype) {
-+              case BCMA_HOSTTYPE_PCI:
-+                      core->dev.parent = &bus->host_pci->dev;
-+                      core->dma_dev = &bus->host_pci->dev;
-+                      core->irq = bus->host_pci->irq;
-+                      break;
-+              case BCMA_HOSTTYPE_SOC:
-+                      core->dev.dma_mask = &core->dev.coherent_dma_mask;
-+                      core->dma_dev = &core->dev;
-+                      break;
-+              case BCMA_HOSTTYPE_SDIO:
-+                      break;
-+              }
-+
-+              err = device_register(&core->dev);
-+              if (err) {
-+                      pr_err("Could not register dev for core 0x%03X\n",
-+                             core->id.id);
-+                      continue;
-+              }
-+              core->dev_registered = true;
-+              dev_id++;
-+      }
-+
-+      return 0;
-+}
-+
-+static void bcma_unregister_cores(struct bcma_bus *bus)
-+{
-+      struct bcma_device *core;
-+
-+      list_for_each_entry(core, &bus->cores, list) {
-+              if (core->dev_registered)
-+                      device_unregister(&core->dev);
-+      }
-+}
-+
-+int __devinit bcma_bus_register(struct bcma_bus *bus)
-+{
-+      int err;
-+      struct bcma_device *core;
-+
-+      mutex_lock(&bcma_buses_mutex);
-+      bus->num = bcma_bus_next_num++;
-+      mutex_unlock(&bcma_buses_mutex);
-+
-+      /* Scan for devices (cores) */
-+      err = bcma_bus_scan(bus);
-+      if (err) {
-+              pr_err("Failed to scan: %d\n", err);
-+              return -1;
-+      }
-+
-+      /* Init CC core */
-+      core = bcma_find_core(bus, BCMA_CORE_CHIPCOMMON);
-+      if (core) {
-+              bus->drv_cc.core = core;
-+              bcma_core_chipcommon_init(&bus->drv_cc);
-+      }
-+
-+      /* Init MIPS core */
-+      core = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
-+      if (core) {
-+              bus->drv_mips.core = core;
-+              bcma_core_mips_init(&bus->drv_mips);
-+      }
-+
-+      /* Init PCIE core */
-+      core = bcma_find_core(bus, BCMA_CORE_PCIE);
-+      if (core) {
-+              bus->drv_pci.core = core;
-+              bcma_core_pci_init(&bus->drv_pci);
-+      }
-+
-+      /* Try to get SPROM */
-+      err = bcma_sprom_get(bus);
-+      if (err == -ENOENT) {
-+              pr_err("No SPROM available\n");
-+      } else if (err)
-+              pr_err("Failed to get SPROM: %d\n", err);
-+
-+      /* Register found cores */
-+      bcma_register_cores(bus);
-+
-+      pr_info("Bus registered\n");
-+
-+      return 0;
-+}
-+
-+void bcma_bus_unregister(struct bcma_bus *bus)
-+{
-+      bcma_unregister_cores(bus);
-+}
-+
-+int __init bcma_bus_early_register(struct bcma_bus *bus,
-+                                 struct bcma_device *core_cc,
-+                                 struct bcma_device *core_mips)
-+{
-+      int err;
-+      struct bcma_device *core;
-+      struct bcma_device_id match;
-+
-+      bcma_init_bus(bus);
-+
-+      match.manuf = BCMA_MANUF_BCM;
-+      match.id = BCMA_CORE_CHIPCOMMON;
-+      match.class = BCMA_CL_SIM;
-+      match.rev = BCMA_ANY_REV;
-+
-+      /* Scan for chip common core */
-+      err = bcma_bus_scan_early(bus, &match, core_cc);
-+      if (err) {
-+              pr_err("Failed to scan for common core: %d\n", err);
-+              return -1;
-+      }
-+
-+      match.manuf = BCMA_MANUF_MIPS;
-+      match.id = BCMA_CORE_MIPS_74K;
-+      match.class = BCMA_CL_SIM;
-+      match.rev = BCMA_ANY_REV;
-+
-+      /* Scan for mips core */
-+      err = bcma_bus_scan_early(bus, &match, core_mips);
-+      if (err) {
-+              pr_err("Failed to scan for mips core: %d\n", err);
-+              return -1;
-+      }
-+
-+      /* Init CC core */
-+      core = bcma_find_core(bus, BCMA_CORE_CHIPCOMMON);
-+      if (core) {
-+              bus->drv_cc.core = core;
-+              bcma_core_chipcommon_init(&bus->drv_cc);
-+      }
-+
-+      /* Init MIPS core */
-+      core = bcma_find_core(bus, BCMA_CORE_MIPS_74K);
-+      if (core) {
-+              bus->drv_mips.core = core;
-+              bcma_core_mips_init(&bus->drv_mips);
-+      }
-+
-+      pr_info("Early bus registered\n");
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+int bcma_bus_suspend(struct bcma_bus *bus)
-+{
-+      struct bcma_device *core;
-+
-+      list_for_each_entry(core, &bus->cores, list) {
-+              struct device_driver *drv = core->dev.driver;
-+              if (drv) {
-+                      struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
-+                      if (adrv->suspend)
-+                              adrv->suspend(core);
-+              }
-+      }
-+      return 0;
-+}
-+
-+int bcma_bus_resume(struct bcma_bus *bus)
-+{
-+      struct bcma_device *core;
-+
-+      /* Init CC core */
-+      core = bcma_find_core(bus, BCMA_CORE_CHIPCOMMON);
-+      if (core) {
-+              bus->drv_cc.setup_done = false;
-+              bcma_core_chipcommon_init(&bus->drv_cc);
-+      }
-+
-+      list_for_each_entry(core, &bus->cores, list) {
-+              struct device_driver *drv = core->dev.driver;
-+              if (drv) {
-+                      struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
-+                      if (adrv->resume)
-+                              adrv->resume(core);
-+              }
-+      }
-+
-+      return 0;
-+}
-+#endif
-+
-+int __bcma_driver_register(struct bcma_driver *drv, struct module *owner)
-+{
-+      drv->drv.name = drv->name;
-+      drv->drv.bus = &bcma_bus_type;
-+      drv->drv.owner = owner;
-+
-+      return driver_register(&drv->drv);
-+}
-+EXPORT_SYMBOL_GPL(__bcma_driver_register);
-+
-+void bcma_driver_unregister(struct bcma_driver *drv)
-+{
-+      driver_unregister(&drv->drv);
-+}
-+EXPORT_SYMBOL_GPL(bcma_driver_unregister);
-+
-+static int bcma_bus_match(struct device *dev, struct device_driver *drv)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
-+      const struct bcma_device_id *cid = &core->id;
-+      const struct bcma_device_id *did;
-+
-+      for (did = adrv->id_table; did->manuf || did->id || did->rev; did++) {
-+          if ((did->manuf == cid->manuf || did->manuf == BCMA_ANY_MANUF) &&
-+              (did->id == cid->id || did->id == BCMA_ANY_ID) &&
-+              (did->rev == cid->rev || did->rev == BCMA_ANY_REV) &&
-+              (did->class == cid->class || did->class == BCMA_ANY_CLASS))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+static int bcma_device_probe(struct device *dev)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
-+                                             drv);
-+      int err = 0;
-+
-+      if (adrv->probe)
-+              err = adrv->probe(core);
-+
-+      return err;
-+}
-+
-+static int bcma_device_remove(struct device *dev)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+      struct bcma_driver *adrv = container_of(dev->driver, struct bcma_driver,
-+                                             drv);
-+
-+      if (adrv->remove)
-+              adrv->remove(core);
-+
-+      return 0;
-+}
-+
-+static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
-+{
-+      struct bcma_device *core = container_of(dev, struct bcma_device, dev);
-+
-+      return add_uevent_var(env,
-+                            "MODALIAS=bcma:m%04Xid%04Xrev%02Xcl%02X",
-+                            core->id.manuf, core->id.id,
-+                            core->id.rev, core->id.class);
-+}
-+
-+static int __init bcma_modinit(void)
-+{
-+      int err;
-+
-+      err = bus_register(&bcma_bus_type);
-+      if (err)
-+              return err;
-+
-+#ifdef CONFIG_BCMA_HOST_PCI
-+      err = bcma_host_pci_init();
-+      if (err) {
-+              pr_err("PCI host initialization failed\n");
-+              err = 0;
-+      }
-+#endif
-+
-+      return err;
-+}
-+fs_initcall(bcma_modinit);
-+
-+static void __exit bcma_modexit(void)
-+{
-+#ifdef CONFIG_BCMA_HOST_PCI
-+      bcma_host_pci_exit();
-+#endif
-+      bus_unregister(&bcma_bus_type);
-+}
-+module_exit(bcma_modexit)
---- /dev/null
-+++ b/drivers/bcma/scan.c
-@@ -0,0 +1,533 @@
-+/*
-+ * Broadcom specific AMBA
-+ * Bus scanning
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "scan.h"
-+#include "bcma_private.h"
-+
-+#include <linux/bcma/bcma.h>
-+#include <linux/bcma/bcma_regs.h>
-+#include <linux/pci.h>
-+#include <linux/io.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/slab.h>
-+
-+struct bcma_device_id_name {
-+      u16 id;
-+      const char *name;
-+};
-+
-+static const struct bcma_device_id_name bcma_arm_device_names[] = {
-+      { BCMA_CORE_ARM_1176, "ARM 1176" },
-+      { BCMA_CORE_ARM_7TDMI, "ARM 7TDMI" },
-+      { BCMA_CORE_ARM_CM3, "ARM CM3" },
-+};
-+
-+static const struct bcma_device_id_name bcma_bcm_device_names[] = {
-+      { BCMA_CORE_OOB_ROUTER, "OOB Router" },
-+      { BCMA_CORE_INVALID, "Invalid" },
-+      { BCMA_CORE_CHIPCOMMON, "ChipCommon" },
-+      { BCMA_CORE_ILINE20, "ILine 20" },
-+      { BCMA_CORE_SRAM, "SRAM" },
-+      { BCMA_CORE_SDRAM, "SDRAM" },
-+      { BCMA_CORE_PCI, "PCI" },
-+      { BCMA_CORE_ETHERNET, "Fast Ethernet" },
-+      { BCMA_CORE_V90, "V90" },
-+      { BCMA_CORE_USB11_HOSTDEV, "USB 1.1 Hostdev" },
-+      { BCMA_CORE_ADSL, "ADSL" },
-+      { BCMA_CORE_ILINE100, "ILine 100" },
-+      { BCMA_CORE_IPSEC, "IPSEC" },
-+      { BCMA_CORE_UTOPIA, "UTOPIA" },
-+      { BCMA_CORE_PCMCIA, "PCMCIA" },
-+      { BCMA_CORE_INTERNAL_MEM, "Internal Memory" },
-+      { BCMA_CORE_MEMC_SDRAM, "MEMC SDRAM" },
-+      { BCMA_CORE_OFDM, "OFDM" },
-+      { BCMA_CORE_EXTIF, "EXTIF" },
-+      { BCMA_CORE_80211, "IEEE 802.11" },
-+      { BCMA_CORE_PHY_A, "PHY A" },
-+      { BCMA_CORE_PHY_B, "PHY B" },
-+      { BCMA_CORE_PHY_G, "PHY G" },
-+      { BCMA_CORE_USB11_HOST, "USB 1.1 Host" },
-+      { BCMA_CORE_USB11_DEV, "USB 1.1 Device" },
-+      { BCMA_CORE_USB20_HOST, "USB 2.0 Host" },
-+      { BCMA_CORE_USB20_DEV, "USB 2.0 Device" },
-+      { BCMA_CORE_SDIO_HOST, "SDIO Host" },
-+      { BCMA_CORE_ROBOSWITCH, "Roboswitch" },
-+      { BCMA_CORE_PARA_ATA, "PATA" },
-+      { BCMA_CORE_SATA_XORDMA, "SATA XOR-DMA" },
-+      { BCMA_CORE_ETHERNET_GBIT, "GBit Ethernet" },
-+      { BCMA_CORE_PCIE, "PCIe" },
-+      { BCMA_CORE_PHY_N, "PHY N" },
-+      { BCMA_CORE_SRAM_CTL, "SRAM Controller" },
-+      { BCMA_CORE_MINI_MACPHY, "Mini MACPHY" },
-+      { BCMA_CORE_PHY_LP, "PHY LP" },
-+      { BCMA_CORE_PMU, "PMU" },
-+      { BCMA_CORE_PHY_SSN, "PHY SSN" },
-+      { BCMA_CORE_SDIO_DEV, "SDIO Device" },
-+      { BCMA_CORE_PHY_HT, "PHY HT" },
-+      { BCMA_CORE_MAC_GBIT, "GBit MAC" },
-+      { BCMA_CORE_DDR12_MEM_CTL, "DDR1/DDR2 Memory Controller" },
-+      { BCMA_CORE_PCIE_RC, "PCIe Root Complex" },
-+      { BCMA_CORE_OCP_OCP_BRIDGE, "OCP to OCP Bridge" },
-+      { BCMA_CORE_SHARED_COMMON, "Common Shared" },
-+      { BCMA_CORE_OCP_AHB_BRIDGE, "OCP to AHB Bridge" },
-+      { BCMA_CORE_SPI_HOST, "SPI Host" },
-+      { BCMA_CORE_I2S, "I2S" },
-+      { BCMA_CORE_SDR_DDR1_MEM_CTL, "SDR/DDR1 Memory Controller" },
-+      { BCMA_CORE_SHIM, "SHIM" },
-+      { BCMA_CORE_DEFAULT, "Default" },
-+};
-+
-+static const struct bcma_device_id_name bcma_mips_device_names[] = {
-+      { BCMA_CORE_MIPS, "MIPS" },
-+      { BCMA_CORE_MIPS_3302, "MIPS 3302" },
-+      { BCMA_CORE_MIPS_74K, "MIPS 74K" },
-+};
-+
-+static const char *bcma_device_name(const struct bcma_device_id *id)
-+{
-+      const struct bcma_device_id_name *names;
-+      int size, i;
-+
-+      /* search manufacturer specific names */
-+      switch (id->manuf) {
-+      case BCMA_MANUF_ARM:
-+              names = bcma_arm_device_names;
-+              size = ARRAY_SIZE(bcma_arm_device_names);
-+              break;
-+      case BCMA_MANUF_BCM:
-+              names = bcma_bcm_device_names;
-+              size = ARRAY_SIZE(bcma_bcm_device_names);
-+              break;
-+      case BCMA_MANUF_MIPS:
-+              names = bcma_mips_device_names;
-+              size = ARRAY_SIZE(bcma_mips_device_names);
-+              break;
-+      default:
-+              return "UNKNOWN";
-+      }
-+
-+      for (i = 0; i < size; i++) {
-+              if (names[i].id == id->id)
-+                      return names[i].name;
-+      }
-+
-+      return "UNKNOWN";
-+}
-+
-+static u32 bcma_scan_read32(struct bcma_bus *bus, u8 current_coreidx,
-+                     u16 offset)
-+{
-+      return readl(bus->mmio + offset);
-+}
-+
-+static void bcma_scan_switch_core(struct bcma_bus *bus, u32 addr)
-+{
-+      if (bus->hosttype == BCMA_HOSTTYPE_PCI)
-+              pci_write_config_dword(bus->host_pci, BCMA_PCI_BAR0_WIN,
-+                                     addr);
-+}
-+
-+static u32 bcma_erom_get_ent(struct bcma_bus *bus, u32 **eromptr)
-+{
-+      u32 ent = readl(*eromptr);
-+      (*eromptr)++;
-+      return ent;
-+}
-+
-+static void bcma_erom_push_ent(u32 **eromptr)
-+{
-+      (*eromptr)--;
-+}
-+
-+static s32 bcma_erom_get_ci(struct bcma_bus *bus, u32 **eromptr)
-+{
-+      u32 ent = bcma_erom_get_ent(bus, eromptr);
-+      if (!(ent & SCAN_ER_VALID))
-+              return -ENOENT;
-+      if ((ent & SCAN_ER_TAG) != SCAN_ER_TAG_CI)
-+              return -ENOENT;
-+      return ent;
-+}
-+
-+static bool bcma_erom_is_end(struct bcma_bus *bus, u32 **eromptr)
-+{
-+      u32 ent = bcma_erom_get_ent(bus, eromptr);
-+      bcma_erom_push_ent(eromptr);
-+      return (ent == (SCAN_ER_TAG_END | SCAN_ER_VALID));
-+}
-+
-+static bool bcma_erom_is_bridge(struct bcma_bus *bus, u32 **eromptr)
-+{
-+      u32 ent = bcma_erom_get_ent(bus, eromptr);
-+      bcma_erom_push_ent(eromptr);
-+      return (((ent & SCAN_ER_VALID)) &&
-+              ((ent & SCAN_ER_TAGX) == SCAN_ER_TAG_ADDR) &&
-+              ((ent & SCAN_ADDR_TYPE) == SCAN_ADDR_TYPE_BRIDGE));
-+}
-+
-+static void bcma_erom_skip_component(struct bcma_bus *bus, u32 **eromptr)
-+{
-+      u32 ent;
-+      while (1) {
-+              ent = bcma_erom_get_ent(bus, eromptr);
-+              if ((ent & SCAN_ER_VALID) &&
-+                  ((ent & SCAN_ER_TAG) == SCAN_ER_TAG_CI))
-+                      break;
-+              if (ent == (SCAN_ER_TAG_END | SCAN_ER_VALID))
-+                      break;
-+      }
-+      bcma_erom_push_ent(eromptr);
-+}
-+
-+static s32 bcma_erom_get_mst_port(struct bcma_bus *bus, u32 **eromptr)
-+{
-+      u32 ent = bcma_erom_get_ent(bus, eromptr);
-+      if (!(ent & SCAN_ER_VALID))
-+              return -ENOENT;
-+      if ((ent & SCAN_ER_TAG) != SCAN_ER_TAG_MP)
-+              return -ENOENT;
-+      return ent;
-+}
-+
-+static s32 bcma_erom_get_addr_desc(struct bcma_bus *bus, u32 **eromptr,
-+                                u32 type, u8 port)
-+{
-+      u32 addrl, addrh, sizel, sizeh = 0;
-+      u32 size;
-+
-+      u32 ent = bcma_erom_get_ent(bus, eromptr);
-+      if ((!(ent & SCAN_ER_VALID)) ||
-+          ((ent & SCAN_ER_TAGX) != SCAN_ER_TAG_ADDR) ||
-+          ((ent & SCAN_ADDR_TYPE) != type) ||
-+          (((ent & SCAN_ADDR_PORT) >> SCAN_ADDR_PORT_SHIFT) != port)) {
-+              bcma_erom_push_ent(eromptr);
-+              return -EINVAL;
-+      }
-+
-+      addrl = ent & SCAN_ADDR_ADDR;
-+      if (ent & SCAN_ADDR_AG32)
-+              addrh = bcma_erom_get_ent(bus, eromptr);
-+      else
-+              addrh = 0;
-+
-+      if ((ent & SCAN_ADDR_SZ) == SCAN_ADDR_SZ_SZD) {
-+              size = bcma_erom_get_ent(bus, eromptr);
-+              sizel = size & SCAN_SIZE_SZ;
-+              if (size & SCAN_SIZE_SG32)
-+                      sizeh = bcma_erom_get_ent(bus, eromptr);
-+      } else
-+              sizel = SCAN_ADDR_SZ_BASE <<
-+                              ((ent & SCAN_ADDR_SZ) >> SCAN_ADDR_SZ_SHIFT);
-+
-+      return addrl;
-+}
-+
-+static struct bcma_device *bcma_find_core_by_index(struct bcma_bus *bus,
-+                                                 u16 index)
-+{
-+      struct bcma_device *core;
-+
-+      list_for_each_entry(core, &bus->cores, list) {
-+              if (core->core_index == index)
-+                      return core;
-+      }
-+      return NULL;
-+}
-+
-+static struct bcma_device *bcma_find_core_reverse(struct bcma_bus *bus, u16 coreid)
-+{
-+      struct bcma_device *core;
-+
-+      list_for_each_entry_reverse(core, &bus->cores, list) {
-+              if (core->id.id == coreid)
-+                      return core;
-+      }
-+      return NULL;
-+}
-+
-+static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
-+                            struct bcma_device_id *match, int core_num,
-+                            struct bcma_device *core)
-+{
-+      s32 tmp;
-+      u8 i, j;
-+      s32 cia, cib;
-+      u8 ports[2], wrappers[2];
-+
-+      /* get CIs */
-+      cia = bcma_erom_get_ci(bus, eromptr);
-+      if (cia < 0) {
-+              bcma_erom_push_ent(eromptr);
-+              if (bcma_erom_is_end(bus, eromptr))
-+                      return -ESPIPE;
-+              return -EILSEQ;
-+      }
-+      cib = bcma_erom_get_ci(bus, eromptr);
-+      if (cib < 0)
-+              return -EILSEQ;
-+
-+      /* parse CIs */
-+      core->id.class = (cia & SCAN_CIA_CLASS) >> SCAN_CIA_CLASS_SHIFT;
-+      core->id.id = (cia & SCAN_CIA_ID) >> SCAN_CIA_ID_SHIFT;
-+      core->id.manuf = (cia & SCAN_CIA_MANUF) >> SCAN_CIA_MANUF_SHIFT;
-+      ports[0] = (cib & SCAN_CIB_NMP) >> SCAN_CIB_NMP_SHIFT;
-+      ports[1] = (cib & SCAN_CIB_NSP) >> SCAN_CIB_NSP_SHIFT;
-+      wrappers[0] = (cib & SCAN_CIB_NMW) >> SCAN_CIB_NMW_SHIFT;
-+      wrappers[1] = (cib & SCAN_CIB_NSW) >> SCAN_CIB_NSW_SHIFT;
-+      core->id.rev = (cib & SCAN_CIB_REV) >> SCAN_CIB_REV_SHIFT;
-+
-+      if (((core->id.manuf == BCMA_MANUF_ARM) &&
-+           (core->id.id == 0xFFF)) ||
-+          (ports[1] == 0)) {
-+              bcma_erom_skip_component(bus, eromptr);
-+              return -ENXIO;
-+      }
-+
-+      /* check if component is a core at all */
-+      if (wrappers[0] + wrappers[1] == 0) {
-+              /* we could save addrl of the router
-+              if (cid == BCMA_CORE_OOB_ROUTER)
-+               */
-+              bcma_erom_skip_component(bus, eromptr);
-+              return -ENXIO;
-+      }
-+
-+      if (bcma_erom_is_bridge(bus, eromptr)) {
-+              bcma_erom_skip_component(bus, eromptr);
-+              return -ENXIO;
-+      }
-+
-+      if (bcma_find_core_by_index(bus, core_num)) {
-+              bcma_erom_skip_component(bus, eromptr);
-+              return -ENODEV;
-+      }
-+
-+      if (match && ((match->manuf != BCMA_ANY_MANUF &&
-+            match->manuf != core->id.manuf) ||
-+           (match->id != BCMA_ANY_ID && match->id != core->id.id) ||
-+           (match->rev != BCMA_ANY_REV && match->rev != core->id.rev) ||
-+           (match->class != BCMA_ANY_CLASS && match->class != core->id.class)
-+          )) {
-+              bcma_erom_skip_component(bus, eromptr);
-+              return -ENODEV;
-+      }
-+
-+      /* get & parse master ports */
-+      for (i = 0; i < ports[0]; i++) {
-+              s32 mst_port_d = bcma_erom_get_mst_port(bus, eromptr);
-+              if (mst_port_d < 0)
-+                      return -EILSEQ;
-+      }
-+
-+      /* get & parse slave ports */
-+      for (i = 0; i < ports[1]; i++) {
-+              for (j = 0; ; j++) {
-+                      tmp = bcma_erom_get_addr_desc(bus, eromptr,
-+                              SCAN_ADDR_TYPE_SLAVE, i);
-+                      if (tmp < 0) {
-+                              /* no more entries for port _i_ */
-+                              /* pr_debug("erom: slave port %d "
-+                               * "has %d descriptors\n", i, j); */
-+                              break;
-+                      } else {
-+                              if (i == 0 && j == 0)
-+                                      core->addr = tmp;
-+                      }
-+              }
-+      }
-+
-+      /* get & parse master wrappers */
-+      for (i = 0; i < wrappers[0]; i++) {
-+              for (j = 0; ; j++) {
-+                      tmp = bcma_erom_get_addr_desc(bus, eromptr,
-+                              SCAN_ADDR_TYPE_MWRAP, i);
-+                      if (tmp < 0) {
-+                              /* no more entries for port _i_ */
-+                              /* pr_debug("erom: master wrapper %d "
-+                               * "has %d descriptors\n", i, j); */
-+                              break;
-+                      } else {
-+                              if (i == 0 && j == 0)
-+                                      core->wrap = tmp;
-+                      }
-+              }
-+      }
-+
-+      /* get & parse slave wrappers */
-+      for (i = 0; i < wrappers[1]; i++) {
-+              u8 hack = (ports[1] == 1) ? 0 : 1;
-+              for (j = 0; ; j++) {
-+                      tmp = bcma_erom_get_addr_desc(bus, eromptr,
-+                              SCAN_ADDR_TYPE_SWRAP, i + hack);
-+                      if (tmp < 0) {
-+                              /* no more entries for port _i_ */
-+                              /* pr_debug("erom: master wrapper %d "
-+                               * has %d descriptors\n", i, j); */
-+                              break;
-+                      } else {
-+                              if (wrappers[0] == 0 && !i && !j)
-+                                      core->wrap = tmp;
-+                      }
-+              }
-+      }
-+      if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
-+              core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE);
-+              if (!core->io_addr)
-+                      return -ENOMEM;
-+              core->io_wrap = ioremap_nocache(core->wrap, BCMA_CORE_SIZE);
-+              if (!core->io_wrap) {
-+                      iounmap(core->io_addr);
-+                      return -ENOMEM;
-+              }
-+      }
-+      return 0;
-+}
-+
-+void bcma_init_bus(struct bcma_bus *bus)
-+{
-+      s32 tmp;
-+      struct bcma_chipinfo *chipinfo = &(bus->chipinfo);
-+
-+      if (bus->init_done)
-+              return;
-+
-+      INIT_LIST_HEAD(&bus->cores);
-+      bus->nr_cores = 0;
-+
-+      bcma_scan_switch_core(bus, BCMA_ADDR_BASE);
-+
-+      tmp = bcma_scan_read32(bus, 0, BCMA_CC_ID);
-+      chipinfo->id = (tmp & BCMA_CC_ID_ID) >> BCMA_CC_ID_ID_SHIFT;
-+      chipinfo->rev = (tmp & BCMA_CC_ID_REV) >> BCMA_CC_ID_REV_SHIFT;
-+      chipinfo->pkg = (tmp & BCMA_CC_ID_PKG) >> BCMA_CC_ID_PKG_SHIFT;
-+      pr_info("Found chip with id 0x%04X, rev 0x%02X and package 0x%02X\n",
-+              chipinfo->id, chipinfo->rev, chipinfo->pkg);
-+
-+      bus->init_done = true;
-+}
-+
-+int bcma_bus_scan(struct bcma_bus *bus)
-+{
-+      u32 erombase;
-+      u32 __iomem *eromptr, *eromend;
-+
-+      int err, core_num = 0;
-+
-+      bcma_init_bus(bus);
-+
-+      erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
-+      if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
-+              eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
-+              if (!eromptr)
-+                      return -ENOMEM;
-+      } else {
-+              eromptr = bus->mmio;
-+      }
-+
-+      eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
-+
-+      bcma_scan_switch_core(bus, erombase);
-+
-+      while (eromptr < eromend) {
-+              struct bcma_device *other_core;
-+              struct bcma_device *core = kzalloc(sizeof(*core), GFP_KERNEL);
-+              if (!core)
-+                      return -ENOMEM;
-+              INIT_LIST_HEAD(&core->list);
-+              core->bus = bus;
-+
-+              err = bcma_get_next_core(bus, &eromptr, NULL, core_num, core);
-+              if (err < 0) {
-+                      kfree(core);
-+                      if (err == -ENODEV) {
-+                              core_num++;
-+                              continue;
-+                      } else if (err == -ENXIO) {
-+                              continue;
-+                      } else if (err == -ESPIPE) {
-+                              break;
-+                      }
-+                      return err;
-+              }
-+
-+              core->core_index = core_num++;
-+              bus->nr_cores++;
-+              other_core = bcma_find_core_reverse(bus, core->id.id);
-+              core->core_unit = (other_core == NULL) ? 0 : other_core->core_unit + 1;
-+
-+              pr_info("Core %d found: %s "
-+                      "(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
-+                      core->core_index, bcma_device_name(&core->id),
-+                      core->id.manuf, core->id.id, core->id.rev,
-+                      core->id.class);
-+
-+              list_add(&core->list, &bus->cores);
-+      }
-+
-+      if (bus->hosttype == BCMA_HOSTTYPE_SOC)
-+              iounmap(eromptr);
-+
-+      return 0;
-+}
-+
-+int __init bcma_bus_scan_early(struct bcma_bus *bus,
-+                             struct bcma_device_id *match,
-+                             struct bcma_device *core)
-+{
-+      u32 erombase;
-+      u32 __iomem *eromptr, *eromend;
-+
-+      int err = -ENODEV;
-+      int core_num = 0;
-+
-+      erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
-+      if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
-+              eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
-+              if (!eromptr)
-+                      return -ENOMEM;
-+      } else {
-+              eromptr = bus->mmio;
-+      }
-+
-+      eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
-+
-+      bcma_scan_switch_core(bus, erombase);
-+
-+      while (eromptr < eromend) {
-+              memset(core, 0, sizeof(*core));
-+              INIT_LIST_HEAD(&core->list);
-+              core->bus = bus;
-+
-+              err = bcma_get_next_core(bus, &eromptr, match, core_num, core);
-+              if (err == -ENODEV) {
-+                      core_num++;
-+                      continue;
-+              } else if (err == -ENXIO)
-+                      continue;
-+              else if (err == -ESPIPE)
-+                      break;
-+              else if (err < 0)
-+                      return err;
-+
-+              core->core_index = core_num++;
-+              bus->nr_cores++;
-+              pr_info("Core %d found: %s "
-+                      "(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
-+                      core->core_index, bcma_device_name(&core->id),
-+                      core->id.manuf, core->id.id, core->id.rev,
-+                      core->id.class);
-+
-+              list_add(&core->list, &bus->cores);
-+              err = 0;
-+              break;
-+      }
-+
-+      if (bus->hosttype == BCMA_HOSTTYPE_SOC)
-+              iounmap(eromptr);
-+
-+      return err;
-+}
---- /dev/null
-+++ b/drivers/bcma/scan.h
-@@ -0,0 +1,56 @@
-+#ifndef BCMA_SCAN_H_
-+#define BCMA_SCAN_H_
-+
-+#define BCMA_ADDR_BASE                0x18000000
-+#define BCMA_WRAP_BASE                0x18100000
-+
-+#define SCAN_ER_VALID         0x00000001
-+#define SCAN_ER_TAGX          0x00000006 /* we have to ignore 0x8 bit when checking tag for SCAN_ER_TAG_ADDR */
-+#define SCAN_ER_TAG           0x0000000E
-+#define  SCAN_ER_TAG_CI               0x00000000
-+#define  SCAN_ER_TAG_MP               0x00000002
-+#define  SCAN_ER_TAG_ADDR     0x00000004
-+#define  SCAN_ER_TAG_END      0x0000000E
-+#define SCAN_ER_BAD           0xFFFFFFFF
-+
-+#define SCAN_CIA_CLASS                0x000000F0
-+#define SCAN_CIA_CLASS_SHIFT  4
-+#define SCAN_CIA_ID           0x000FFF00
-+#define SCAN_CIA_ID_SHIFT     8
-+#define SCAN_CIA_MANUF                0xFFF00000
-+#define SCAN_CIA_MANUF_SHIFT  20
-+
-+#define SCAN_CIB_NMP          0x000001F0
-+#define SCAN_CIB_NMP_SHIFT    4
-+#define SCAN_CIB_NSP          0x00003E00
-+#define SCAN_CIB_NSP_SHIFT    9
-+#define SCAN_CIB_NMW          0x0007C000
-+#define SCAN_CIB_NMW_SHIFT    14
-+#define SCAN_CIB_NSW          0x00F80000
-+#define SCAN_CIB_NSW_SHIFT    17
-+#define SCAN_CIB_REV          0xFF000000
-+#define SCAN_CIB_REV_SHIFT    24
-+
-+#define SCAN_ADDR_AG32                0x00000008
-+#define SCAN_ADDR_SZ          0x00000030
-+#define SCAN_ADDR_SZ_SHIFT    4
-+#define  SCAN_ADDR_SZ_4K      0x00000000
-+#define  SCAN_ADDR_SZ_8K      0x00000010
-+#define  SCAN_ADDR_SZ_16K     0x00000020
-+#define  SCAN_ADDR_SZ_SZD     0x00000030
-+#define SCAN_ADDR_TYPE                0x000000C0
-+#define  SCAN_ADDR_TYPE_SLAVE 0x00000000
-+#define  SCAN_ADDR_TYPE_BRIDGE        0x00000040
-+#define  SCAN_ADDR_TYPE_SWRAP 0x00000080
-+#define  SCAN_ADDR_TYPE_MWRAP 0x000000C0
-+#define SCAN_ADDR_PORT                0x00000F00
-+#define SCAN_ADDR_PORT_SHIFT  8
-+#define SCAN_ADDR_ADDR                0xFFFFF000
-+
-+#define SCAN_ADDR_SZ_BASE     0x00001000      /* 4KB */
-+
-+#define SCAN_SIZE_SZ_ALIGN    0x00000FFF
-+#define SCAN_SIZE_SZ          0xFFFFF000
-+#define SCAN_SIZE_SG32                0x00000008
-+
-+#endif /* BCMA_SCAN_H_ */
---- /dev/null
-+++ b/drivers/bcma/sprom.c
-@@ -0,0 +1,600 @@
-+/*
-+ * Broadcom specific AMBA
-+ * SPROM reading
-+ *
-+ * Copyright 2011, 2012, Hauke Mehrtens <hauke@hauke-m.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include "bcma_private.h"
-+
-+#include <linux/bcma/bcma.h>
-+#include <linux/bcma/bcma_regs.h>
-+#include <linux/pci.h>
-+#include <linux/io.h>
-+#include <linux/dma-mapping.h>
-+#include <linux/slab.h>
-+
-+static int(*get_fallback_sprom)(struct bcma_bus *dev, struct ssb_sprom *out);
-+
-+/**
-+ * bcma_arch_register_fallback_sprom - Registers a method providing a
-+ * fallback SPROM if no SPROM is found.
-+ *
-+ * @sprom_callback: The callback function.
-+ *
-+ * With this function the architecture implementation may register a
-+ * callback handler which fills the SPROM data structure. The fallback is
-+ * used for PCI based BCMA devices, where no valid SPROM can be found
-+ * in the shadow registers and to provide the SPROM for SoCs where BCMA is
-+ * to controll the system bus.
-+ *
-+ * This function is useful for weird architectures that have a half-assed
-+ * BCMA device hardwired to their PCI bus.
-+ *
-+ * This function is available for architecture code, only. So it is not
-+ * exported.
-+ */
-+int bcma_arch_register_fallback_sprom(int (*sprom_callback)(struct bcma_bus *bus,
-+                                   struct ssb_sprom *out))
-+{
-+      if (get_fallback_sprom)
-+              return -EEXIST;
-+      get_fallback_sprom = sprom_callback;
-+
-+      return 0;
-+}
-+
-+static int bcma_fill_sprom_with_fallback(struct bcma_bus *bus,
-+                                       struct ssb_sprom *out)
-+{
-+      int err;
-+
-+      if (!get_fallback_sprom) {
-+              err = -ENOENT;
-+              goto fail;
-+      }
-+
-+      err = get_fallback_sprom(bus, out);
-+      if (err)
-+              goto fail;
-+
-+      pr_debug("Using SPROM revision %d provided by"
-+               " platform.\n", bus->sprom.revision);
-+      return 0;
-+fail:
-+      pr_warn("Using fallback SPROM failed (err %d)\n", err);
-+      return err;
-+}
-+
-+/**************************************************
-+ * R/W ops.
-+ **************************************************/
-+
-+static void bcma_sprom_read(struct bcma_bus *bus, u16 offset, u16 *sprom)
-+{
-+      int i;
-+      for (i = 0; i < SSB_SPROMSIZE_WORDS_R4; i++)
-+              sprom[i] = bcma_read16(bus->drv_cc.core,
-+                                     offset + (i * 2));
-+}
-+
-+/**************************************************
-+ * Validation.
-+ **************************************************/
-+
-+static inline u8 bcma_crc8(u8 crc, u8 data)
-+{
-+      /* Polynomial:   x^8 + x^7 + x^6 + x^4 + x^2 + 1   */
-+      static const u8 t[] = {
-+              0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
-+              0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
-+              0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
-+              0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
-+              0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
-+              0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
-+              0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
-+              0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
-+              0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
-+              0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
-+              0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
-+              0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
-+              0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
-+              0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
-+              0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
-+              0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
-+              0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
-+              0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
-+              0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
-+              0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
-+              0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
-+              0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
-+              0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
-+              0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
-+              0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
-+              0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
-+              0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
-+              0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
-+              0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
-+              0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
-+              0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
-+              0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F,
-+      };
-+      return t[crc ^ data];
-+}
-+
-+static u8 bcma_sprom_crc(const u16 *sprom)
-+{
-+      int word;
-+      u8 crc = 0xFF;
-+
-+      for (word = 0; word < SSB_SPROMSIZE_WORDS_R4 - 1; word++) {
-+              crc = bcma_crc8(crc, sprom[word] & 0x00FF);
-+              crc = bcma_crc8(crc, (sprom[word] & 0xFF00) >> 8);
-+      }
-+      crc = bcma_crc8(crc, sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & 0x00FF);
-+      crc ^= 0xFF;
-+
-+      return crc;
-+}
-+
-+static int bcma_sprom_check_crc(const u16 *sprom)
-+{
-+      u8 crc;
-+      u8 expected_crc;
-+      u16 tmp;
-+
-+      crc = bcma_sprom_crc(sprom);
-+      tmp = sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & SSB_SPROM_REVISION_CRC;
-+      expected_crc = tmp >> SSB_SPROM_REVISION_CRC_SHIFT;
-+      if (crc != expected_crc)
-+              return -EPROTO;
-+
-+      return 0;
-+}
-+
-+static int bcma_sprom_valid(const u16 *sprom)
-+{
-+      u16 revision;
-+      int err;
-+
-+      err = bcma_sprom_check_crc(sprom);
-+      if (err)
-+              return err;
-+
-+      revision = sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & SSB_SPROM_REVISION_REV;
-+      if (revision != 8 && revision != 9) {
-+              pr_err("Unsupported SPROM revision: %d\n", revision);
-+              return -ENOENT;
-+      }
-+
-+      return 0;
-+}
-+
-+/**************************************************
-+ * SPROM extraction.
-+ **************************************************/
-+
-+#define SPOFF(offset) ((offset) / sizeof(u16))
-+
-+#define SPEX(_field, _offset, _mask, _shift)  \
-+      bus->sprom._field = ((sprom[SPOFF(_offset)] & (_mask)) >> (_shift))
-+
-+#define SPEX32(_field, _offset, _mask, _shift)        \
-+      bus->sprom._field = ((((u32)sprom[SPOFF((_offset)+2)] << 16 | \
-+                              sprom[SPOFF(_offset)]) & (_mask)) >> (_shift))
-+
-+#define SPEX_ARRAY8(_field, _offset, _mask, _shift)   \
-+      do {    \
-+              SPEX(_field[0], _offset +  0, _mask, _shift);   \
-+              SPEX(_field[1], _offset +  2, _mask, _shift);   \
-+              SPEX(_field[2], _offset +  4, _mask, _shift);   \
-+              SPEX(_field[3], _offset +  6, _mask, _shift);   \
-+              SPEX(_field[4], _offset +  8, _mask, _shift);   \
-+              SPEX(_field[5], _offset + 10, _mask, _shift);   \
-+              SPEX(_field[6], _offset + 12, _mask, _shift);   \
-+              SPEX(_field[7], _offset + 14, _mask, _shift);   \
-+      } while (0)
-+
-+static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
-+{
-+      u16 v, o;
-+      int i;
-+      u16 pwr_info_offset[] = {
-+              SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1,
-+              SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3
-+      };
-+      BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) !=
-+                      ARRAY_SIZE(bus->sprom.core_pwr_info));
-+
-+      bus->sprom.revision = sprom[SSB_SPROMSIZE_WORDS_R4 - 1] &
-+              SSB_SPROM_REVISION_REV;
-+
-+      for (i = 0; i < 3; i++) {
-+              v = sprom[SPOFF(SSB_SPROM8_IL0MAC) + i];
-+              *(((__be16 *)bus->sprom.il0mac) + i) = cpu_to_be16(v);
-+      }
-+
-+      SPEX(board_rev, SSB_SPROM8_BOARDREV, ~0, 0);
-+
-+      SPEX(txpid2g[0], SSB_SPROM4_TXPID2G01, SSB_SPROM4_TXPID2G0,
-+           SSB_SPROM4_TXPID2G0_SHIFT);
-+      SPEX(txpid2g[1], SSB_SPROM4_TXPID2G01, SSB_SPROM4_TXPID2G1,
-+           SSB_SPROM4_TXPID2G1_SHIFT);
-+      SPEX(txpid2g[2], SSB_SPROM4_TXPID2G23, SSB_SPROM4_TXPID2G2,
-+           SSB_SPROM4_TXPID2G2_SHIFT);
-+      SPEX(txpid2g[3], SSB_SPROM4_TXPID2G23, SSB_SPROM4_TXPID2G3,
-+           SSB_SPROM4_TXPID2G3_SHIFT);
-+
-+      SPEX(txpid5gl[0], SSB_SPROM4_TXPID5GL01, SSB_SPROM4_TXPID5GL0,
-+           SSB_SPROM4_TXPID5GL0_SHIFT);
-+      SPEX(txpid5gl[1], SSB_SPROM4_TXPID5GL01, SSB_SPROM4_TXPID5GL1,
-+           SSB_SPROM4_TXPID5GL1_SHIFT);
-+      SPEX(txpid5gl[2], SSB_SPROM4_TXPID5GL23, SSB_SPROM4_TXPID5GL2,
-+           SSB_SPROM4_TXPID5GL2_SHIFT);
-+      SPEX(txpid5gl[3], SSB_SPROM4_TXPID5GL23, SSB_SPROM4_TXPID5GL3,
-+           SSB_SPROM4_TXPID5GL3_SHIFT);
-+
-+      SPEX(txpid5g[0], SSB_SPROM4_TXPID5G01, SSB_SPROM4_TXPID5G0,
-+           SSB_SPROM4_TXPID5G0_SHIFT);
-+      SPEX(txpid5g[1], SSB_SPROM4_TXPID5G01, SSB_SPROM4_TXPID5G1,
-+           SSB_SPROM4_TXPID5G1_SHIFT);
-+      SPEX(txpid5g[2], SSB_SPROM4_TXPID5G23, SSB_SPROM4_TXPID5G2,
-+           SSB_SPROM4_TXPID5G2_SHIFT);
-+      SPEX(txpid5g[3], SSB_SPROM4_TXPID5G23, SSB_SPROM4_TXPID5G3,
-+           SSB_SPROM4_TXPID5G3_SHIFT);
-+
-+      SPEX(txpid5gh[0], SSB_SPROM4_TXPID5GH01, SSB_SPROM4_TXPID5GH0,
-+           SSB_SPROM4_TXPID5GH0_SHIFT);
-+      SPEX(txpid5gh[1], SSB_SPROM4_TXPID5GH01, SSB_SPROM4_TXPID5GH1,
-+           SSB_SPROM4_TXPID5GH1_SHIFT);
-+      SPEX(txpid5gh[2], SSB_SPROM4_TXPID5GH23, SSB_SPROM4_TXPID5GH2,
-+           SSB_SPROM4_TXPID5GH2_SHIFT);
-+      SPEX(txpid5gh[3], SSB_SPROM4_TXPID5GH23, SSB_SPROM4_TXPID5GH3,
-+           SSB_SPROM4_TXPID5GH3_SHIFT);
-+
-+      SPEX(boardflags_lo, SSB_SPROM8_BFLLO, ~0, 0);
-+      SPEX(boardflags_hi, SSB_SPROM8_BFLHI, ~0, 0);
-+      SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, ~0, 0);
-+      SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, ~0, 0);
-+
-+      SPEX(alpha2[0], SSB_SPROM8_CCODE, 0xff00, 8);
-+      SPEX(alpha2[1], SSB_SPROM8_CCODE, 0x00ff, 0);
-+
-+      /* Extract cores power info info */
-+      for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) {
-+              o = pwr_info_offset[i];
-+              SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI,
-+                      SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT);
-+              SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI,
-+                      SSB_SPROM8_2G_MAXP, 0);
-+
-+              SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0);
-+              SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0);
-+
-+              SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI,
-+                      SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT);
-+              SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI,
-+                      SSB_SPROM8_5G_MAXP, 0);
-+              SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP,
-+                      SSB_SPROM8_5GH_MAXP, 0);
-+              SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP,
-+                      SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT);
-+
-+           &nbs